' .
'' . $order['order_sn'] . '' .
'' . $order['order_sn'] . 'O' . $order['log_id'] . '' .
'' . $order['order_amount'] . '' .
'' . $payment['alipay_account'] . '' .
'' . return_url(basename(__FILE__, '.php')) . '' .
'' . __URL__.'alipay.php' . '' .
'' . $order['consignee'] . '' .
''.__URL__.'' .
'3600' .
'';
$parameter = array(
'service' => 'alipay.wap.trade.create.direct', // 接口名称
'format' => 'xml', // 请求参数格式
'v' => '2.0', // 接口版本号
'partner' => $payment['alipay_partner'], // 合作者身份ID
'req_id' => $order['order_sn'] . $order['log_id'], // 请求号,唯一
'sec_id' => 'MD5', // 签名方式
'req_data' => $req_data, // 请求业务数据
"_input_charset" => $charset
);
ksort($parameter);
reset($parameter);
$param = '';
$sign = '';
foreach ($parameter as $key => $val) {
$param .= "$key=" . urlencode($val) . "&";
$sign .= "$key=$val&";
}
$param = substr($param, 0, - 1);
$sign = substr($sign, 0, - 1) . $payment['alipay_key'];
// 请求授权接口
$result = \libraries\Http::doPost($gateway, $param . '&sign=' . md5($sign));
$result = urldecode($result); // URL转码
$result_array = explode('&', $result); // 根据 & 符号拆分
// 重构数组
$new_result_array = $temp_item = array();
if (is_array($result_array)) {
foreach ($result_array as $vo) {
$temp_item = explode('=', $vo, 2); // 根据 & 符号拆分
$new_result_array[$temp_item[0]] = $temp_item[1];
}
}
$xml = simplexml_load_string($new_result_array['res_data']);
$request_token = (array) $xml->request_token;
// 请求交易接口
$parameter = array(
'service' => 'alipay.wap.auth.authAndExecute', // 接口名称
'format' => 'xml', // 请求参数格式
'v' => $new_result_array['v'], // 接口版本号
'partner' => $new_result_array['partner'], // 合作者身份ID
'sec_id' => $new_result_array['sec_id'],
'req_data' => '' . $request_token[0] . '',
'request_token' => $request_token[0],
'_input_charset' => $charset
);
ksort($parameter);
reset($parameter);
$param = '';
$sign = '';
foreach ($parameter as $key => $val) {
$param .= "$key=" . urlencode($val) . "&";
$sign .= "$key=$val&";
}
$param = substr($param, 0, - 1);
$sign = substr($sign, 0, - 1) . $payment['alipay_key'];
/* 生成支付按钮 */
$button = '支付宝支付';
return $button;
}
/**
* 同步通知
* @param $data
* @return mixed
*/
public function callback($data)
{
if (! empty($_GET)) {
include_once(BASE_PATH.'helpers/payment_helper.php');
$out_trade_no = explode('O', $_GET['out_trade_no']);
$log_id = $out_trade_no[1];
$payment = get_payment($data['code']);
/* 检查数字签名是否正确 */
ksort($_GET);
reset($_GET);
$sign = '';
foreach ($_GET as $key => $val) {
if ($key != 'sign' && $key != 'sign_type' && $key != 'code') {
$sign .= "$key=$val&";
}
}
$sign = substr($sign, 0, - 1) . $payment['alipay_key'];
if (md5($sign) != $_GET['sign']) {
return false;
}
if ($_GET['result'] == 'success') {
/* 改变订单状态 */
order_paid($log_id, 2);
return true;
} else {
return false;
}
}else{
return false;
}
}
/**
* 异步通知
* @param $data
* @return mixed
*/
public function notify($data)
{
if (! empty($_POST)) {
include_once(BASE_PATH.'helpers/payment_helper.php');
$payment = get_payment($data['code']);
// 支付宝系统通知待签名数据构造规则比较特殊,为固定顺序。
$parameter['service'] = $_POST['service'];
$parameter['v'] = $_POST['v'];
$parameter['sec_id'] = $_POST['sec_id'];
$parameter['notify_data'] = $_POST['notify_data'];
// 生成签名字符串
$sign = '';
foreach ($parameter as $key => $val) {
$sign .= "$key=$val&";
}
$sign = substr($sign, 0, - 1) . $payment['alipay_key'];
// 验证签名
if (md5($sign) != $_POST['sign']) {
exit("fail");
}
// 解析notify_data
$data = (array) simplexml_load_string($parameter['notify_data']);
// 交易状态
$trade_status = $data['trade_status'];
// 获取支付订单号log_id
$out_trade_no = explode('O', $data['out_trade_no']);
$log_id = $out_trade_no[1]; // 订单号log_id
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
/* 改变订单状态 */
order_paid($log_id, 2);
/*if(method_exists('WechatController', 'do_oauth')){
//如果需要,微信通知
$order_id = model()->table('order_info')->field('order_id')->where(array('order_sn'=>$out_trade_no[0]))->one();
$order_url = U('user/order/detail', array('order_id'=>$order_id), true);
$order_url = urlencode(base64_encode($order_url));
//send_wechat_message('pay_remind', '', $out_trade_no[0].' 订单已支付', $order_url, $out_trade_no[0]);
}*/
exit("success");
} else {
exit("fail");
}
} else {
exit("fail");
}
}
/**
* 订单查询
* @return mixed
*/
public function query($order, $payment)
{
}
}