最近由于公司項(xiàng)目需要接入支付横浑,正好研究下支付寶接口的使用传藏。我呢使用的是支付寶即時(shí)到賬接口腻暮,通過(guò)對(duì)支付寶提供的接口DEMO的研究,決定將其進(jìn)行封裝整合毯侦,于是就有了這個(gè)啦哭靖!當(dāng)然目前這個(gè)自定義支付寶支付類還不太完整,缺少退款方法侈离,不過(guò)支付是沒(méi)有問(wèn)題的试幽,測(cè)試也通過(guò)了的。
未完成版 Alipay.class.php
<?php
/**
* Alipay 自定義支付寶即時(shí)到賬類
* 主要是將支付寶即時(shí)到賬DEMO中的方法整合成了一個(gè)文件
* @version 1.0 2016-07-06
*/
class Alipay {
// 支付寶網(wǎng)關(guān)地址(新)
CONST ALIPAY_GATEWAY_NEW = 'https://mapi.alipay.com/gateway.do?';
// HTTPS形式消息驗(yàn)證地址
CONST HTTPS_VERIFY_URL = 'https://mapi.alipay.com/gateway.do?service=notify_verify&';
// HTTP形式消息驗(yàn)證地址
CONST HTTP_VERIFY_URL = 'http://notify.alipay.com/trade/notify_query.do?';
// 支付寶配置數(shù)組
// partner 合作身份者ID 簽約賬號(hào)
// seller_id 同partner
// key MD5密鑰 安全檢驗(yàn)碼
// notify_url 服務(wù)器異步通知頁(yè)面路徑
// return_url 頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面路徑
// sign_type 簽名方式
// input_charset 字符編碼格式
// cacert ca證書(shū)路徑地址 用于curl中ssl校驗(yàn)
// transport 訪問(wèn)模式
// payment_type 支付類型
// service 產(chǎn)品類型
// log_path 日志路徑
// anti_phishing_key 防釣魚(yú)時(shí)間戳
// exter_invoke_ip 客戶端的IP地址
private $_config = array();
/**
* 構(gòu)造函數(shù) 初始化支付寶配置數(shù)組
* @param array $config
*/
public function __construct($config = array()){
$this->_config = $config;
}
/**
* 同構(gòu)造函數(shù)
*/
public function Alipay($config = array()){
$this->__construct($config);
}
/**
* buildRequestForm
* 建立請(qǐng)求卦碾,以表單HTML形式構(gòu)造(默認(rèn))
* @access public
* @param $para_temp 請(qǐng)求參數(shù)數(shù)組
* @param $method 提交方式抡草。兩個(gè)值可選:post、get
* @param $button_name 確認(rèn)按鈕顯示文字
* @return 提交表單HTML文本
*/
public function buildRequestForm($parameter, $method, $button_name) {
$para_temp = array(
'service' => $this->_config['pay_service'],
'partner' => $this->_config['partner'],
'seller_id' => $this->_config['seller_id'],
'payment_type' => $this->_config['payment_type'],
'notify_url' => $this->_config['notify_url'],
'return_url' => $this->_config['return_url'],
'anti_phishing_key' => $this->_config['anti_phishing_key'],
'exter_invoke_ip' => $this->_config['exter_invoke_ip'],
'_input_charset' => trim(strtolower($this->_config['input_charset']))
);
// 待請(qǐng)求參數(shù)數(shù)組
$para = $this->buildRequestPara(array_merge($para_temp, $parameter));
$sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".self::ALIPAY_GATEWAY_NEW."_input_charset=".trim(strtolower($this->_config['input_charset']))."' method='".$method."'>";
foreach ($para as $k => $v) {
$sHtml.= "<input type='hidden' name='".$k."' value='".$v."'/>";
}
// submit按鈕控件請(qǐng)不要含有name屬性
$sHtml = $sHtml."<input type='submit' value='".$button_name."' style='display:none;'></form>";
$sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>";
return $sHtml;
}
/**
* refund 退款
* @access public
* @param array $para 請(qǐng)求參數(shù)數(shù)組
* @return void
*/
public function refund(){
// 構(gòu)造要請(qǐng)求的參數(shù)數(shù)組 無(wú)需改動(dòng)
$parameter = array(
'service' => trim($alipay_config['refund_service']),
'partner' => trim($alipay_config['partner']),
'notify_url' => trim($alipay_config['refund_notify_url']),
'seller_user_id' => trim($alipay_config['partner']),
'refund_date' => date('Y-m-d H:i:s', time()),
'batch_no' => $batch_no,
'batch_num' => $batch_num,
'detail_data' => $detail_data,
'_input_charset' => trim(strtolower($alipay_config['input_charset']))
);
// 待更新
// 待更新
// 待更新
// 待更新
}
/**
* buildRequestPara
* 生成要請(qǐng)求給支付寶的參數(shù)數(shù)組
* @access public
* @param $para_temp 請(qǐng)求前的參數(shù)數(shù)組
* @return 要請(qǐng)求的參數(shù)數(shù)組
*/
public function buildRequestPara($para_temp) {
// 除去待簽名參數(shù)數(shù)組中的空值和簽名參數(shù)
$para_filter = $this->paraFilter($para_temp);
// 對(duì)待簽名參數(shù)數(shù)組排序
$para_sort = $this->argSort($para_filter);
// 生成簽名結(jié)果
$mysign = $this->buildRequestMysign($para_sort);
//簽名結(jié)果與簽名方式加入請(qǐng)求提交參數(shù)組中
$para_sort['sign'] = $mysign;
$para_sort['sign_type'] = strtoupper(trim($this->_config['sign_type']));
return $para_sort;
}
/**
* buildRequestMysign 生成簽名結(jié)果
* @access public
* @param $para_sort 已排序要簽名的數(shù)組
* return 簽名結(jié)果字符串
*/
public function buildRequestMysign($para_sort) {
// 把數(shù)組所有元素蔗坯,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
$prestr = $this->createLinkString($para_sort);
$mysign = '';
switch (strtoupper(trim($this->_config['sign_type']))) {
case 'MD5' :
$mysign = $this->md5Sign($prestr);
break;
default :
$mysign = '';
}
return $mysign;
}
/**
* verify 驗(yàn)證
* @access public
* @param array $data
* @return bool
*/
public function verify($data = array()){
if (empty($data)) { // 判斷數(shù)組是否為空
return false;
} else {
// 生成簽名結(jié)果
$isSign = $this->getSignVerify($data, $data['sign']);
// 獲取支付寶遠(yuǎn)程服務(wù)器ATN結(jié)果 驗(yàn)證是否是支付寶發(fā)來(lái)的消息
$responseTxt = 'false';
if (isset($data['notify_id'])) {
$responseTxt = $this->getResponse($data['notify_id']);
}
if (preg_match("/true$/i", $responseTxt) && $isSign) {
return true;
} else {
return false;
}
}
}
/**
* getSignVerify
* 獲取返回時(shí)的簽名驗(yàn)證結(jié)果
* @access public
* @param array $para_temp 通知返回來(lái)的參數(shù)數(shù)組
* @param string $sign 返回的簽名結(jié)果
* @return bool 簽名驗(yàn)證結(jié)果
*/
public function getSignVerify($para_temp, $sign) {
// 除去待簽名參數(shù)數(shù)組中的空值和簽名參數(shù)
$para_filter = $this->paraFilter($para_temp);
// 對(duì)待簽名參數(shù)數(shù)組排序
$para_sort = $this->argSort($para_filter);
// 把數(shù)組所有元素康震,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
$prestr = $this->createLinkString($para_sort);
$isSgin = false;
switch (strtoupper(trim($this->_config['sign_type']))) {
case 'MD5' :
$isSgin = $this->md5Sign($prestr) == $sign;
break;
default :
$isSgin = false;
}
return $isSgin;
}
/**
* getResponse
* 獲取遠(yuǎn)程服務(wù)器ATN結(jié)果,驗(yàn)證返回URL
* @access public
* @param $notify_id 通知校驗(yàn)ID
* @return 服務(wù)器ATN結(jié)果
* 驗(yàn)證結(jié)果集:
* invalid 命令參數(shù)不對(duì) 出現(xiàn)這個(gè)錯(cuò)誤,請(qǐng)檢測(cè)返回處理中partner和key是否為空
* true 返回正確信息
* false 請(qǐng)檢查防火墻或者是服務(wù)器阻止端口問(wèn)題以及驗(yàn)證時(shí)間是否超過(guò)一分鐘
*/
public function getResponse($notify_id) {
$transport = strtolower(trim($this->_config['transport']));
$partner = trim($this->_config['partner']);
$verify_url = '';
if ($transport == 'https') {
$verify_url = self::HTTPS_VERIFY_URL;
} else {
$verify_url = self::HTTP_VERIFY_URL;
}
$verify_url = $verify_url.'partner='.$partner.'¬ify_id='.$notify_id;
$responseTxt = $this->getHttpResponseGET($verify_url);
return $responseTxt;
}
/**
* createLinkString
* 把數(shù)組所有元素宾濒,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
* @access public
* @param array $para 需要拼接的數(shù)組
* @return 拼接完成以后的字符串
*/
public function createLinkString($para = array()){
$arg = '';
while (list ($key, $val) = each ($para)) {
$arg .= $key . '=' . $val . '&';
}
// 去掉最后一個(gè)&字符
// $arg = substr($arg, 0, count($arg) - 2);
$arg = trim($arg, '&');
// 如果存在轉(zhuǎn)義字符腿短,那么去掉轉(zhuǎn)義
if (get_magic_quotes_gpc()) {
$arg = stripslashes($arg);
}
return $arg;
}
/**
* paraFilter
* 除去數(shù)組中的空值和簽名參數(shù)
* @access public
* @param array $para 簽名參數(shù)組
* @return 去掉空值與簽名參數(shù)后的新簽名參數(shù)組
*/
public function paraFilter($para = array()) {
// 去除空值及簽名參數(shù)
foreach ($para as $k => $v) {
if ($k == 'sign' || $k == 'sign_type' || $v == '') {
unset($para[$k]);
}
}
return $para;
}
/**
* argSort 對(duì)數(shù)組排序
* @access public
* @param array $para 排序前的數(shù)組
* @return array 排序后的數(shù)組
*/
public function argSort($para = array()) {
ksort($para);
reset($para);
return $para;
}
/**
* md5Sign 簽名字符串
* @access public
* @param string $prestr 需要簽名的字符串
* @return string 簽名結(jié)果
*/
public function md5Sign($prestr){
$prestr = $prestr . $this->_config['key'];
return md5($prestr);
}
/**
* logDebug
* 寫(xiě)日志,方便測(cè)試(看網(wǎng)站需求绘梦,也可以改成把記錄存入數(shù)據(jù)庫(kù))
* 注意:服務(wù)器需要開(kāi)通fopen配置
* @access public
* @param string $content 要寫(xiě)入日志里的文本內(nèi)容 默認(rèn)值:空值
* @return void
*/
public function logDebug($content = '', $level = 'debug') {
if (strtolower($level) == 'error') $level = '失敗';
if (strtolower($level) == 'success') $level = '成功';
if (strtolower($level) == 'debug') $level = '調(diào)試';
$fp = fopen($this->_config['log_path'], 'a+');
flock($fp, LOCK_EX); // 文件鎖定 避免其他人同時(shí)操作
fwrite($fp, '#AlipayDebug# '.date('Y-m-d H:i:s')." {$level} ~ ".$content . "\n\n");
flock($fp, LOCK_UN);
fclose($fp);
}
/**
* queryTimeStamp
* @access public
* 用于防釣魚(yú)橘忱,調(diào)用接口query_timestamp來(lái)獲取時(shí)間戳的處理函數(shù)
* 注意:該功能PHP5環(huán)境及以上支持,因此必須服務(wù)器卸奉、本地電腦中裝有支持DOMDocument钝诚、SSL的PHP配置環(huán)境。建議本地調(diào)試時(shí)使用PHP開(kāi)發(fā)軟件
* @return string 時(shí)間戳字符串
*/
public function queryTimeStamp() {
$url = self::ALIPAY_GATEWAY_NEW.'service=query_timestamp&partner='.trim(strtolower($this->_config['partner'])).'&_input_charset='.trim(strtolower($this->_config['input_charset']));
$encrypt_key = '';
$doc = new DOMDocument();
$doc->load($url);
$itemEncrypt_key = $doc->getElementsByTagName( 'encrypt_key' );
$encrypt_key = $itemEncrypt_key->item(0)->nodeValue;
return $encrypt_key;
}
/**
* getHttpResponsePOST
* 遠(yuǎn)程獲取數(shù)據(jù)榄棵,POST模式
* 注意:
* 1.使用Crul需要修改服務(wù)器中php.ini文件的設(shè)置凝颇,找到php_curl.dll去掉前面的";"就行了
* 2.文件夾中cacert.pem是SSL證書(shū)請(qǐng)保證其路徑有效,目前默認(rèn)路徑是:getcwd().'\\cacert.pem'
* @access public
* @param $url 指定URL完整路徑地址
* @param $cacert_url 指定當(dāng)前工作目錄絕對(duì)路徑
* @param $para 請(qǐng)求的數(shù)據(jù)
* @param $input_charset 編碼格式疹鳄。默認(rèn)值:空值
* return 遠(yuǎn)程輸出的數(shù)據(jù)
*/
public function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {
if (trim($input_charset) != '') {
$url = $url.'_input_charset='.$input_charset;
}
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // SSL證書(shū)認(rèn)證
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 嚴(yán)格認(rèn)證
curl_setopt($curl, CURLOPT_CAINFO, $cacert_url); // 證書(shū)地址
curl_setopt($curl, CURLOPT_HEADER, 0 ); // 過(guò)濾HTTP頭
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 顯示輸出結(jié)果
curl_setopt($curl, CURLOPT_POST,true); // post傳輸數(shù)據(jù)
curl_setopt($curl, CURLOPT_POSTFIELDS, $para); // post傳輸數(shù)據(jù)
$responseText = curl_exec($curl);
// 如果執(zhí)行curl過(guò)程中出現(xiàn)異常拧略,可打開(kāi)此開(kāi)關(guān),以便查看異常內(nèi)容
// var_dump( curl_error($curl) );
curl_close($curl);
return $responseText;
}
/**
* getHttpResponseGET
* 遠(yuǎn)程獲取數(shù)據(jù)瘪弓,GET模式
* 注意:
* 1.使用Crul需要修改服務(wù)器中php.ini文件的設(shè)置垫蛆,找到php_curl.dll去掉前面的";"就行了
* 2.文件夾中cacert.pem是SSL證書(shū)請(qǐng)保證其路徑有效,目前默認(rèn)路徑是:getcwd().'\\cacert.pem'
* @access public
* @param $url 指定URL完整路徑地址
* @param $cacert_url 指定當(dāng)前工作目錄絕對(duì)路徑
* return 遠(yuǎn)程輸出的數(shù)據(jù)
*/
public function getHttpResponseGET($url) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 0 ); // 過(guò)濾HTTP頭
curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 顯示輸出結(jié)果
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL證書(shū)認(rèn)證
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//嚴(yán)格認(rèn)證
curl_setopt($curl, CURLOPT_CAINFO, $this->_config['cacert']);//證書(shū)地址
$responseText = curl_exec($curl);
// 如果執(zhí)行curl過(guò)程中出現(xiàn)異常,可打開(kāi)此開(kāi)關(guān)袱饭,以便查看異常內(nèi)容
// var_dump( curl_error($curl) );
curl_close($curl);
return $responseText;
}
}
?>
我在CI下的應(yīng)用
1. libraries下MY_Alipay.php
<?php defined('BASEPATH') OR exit('No direct script access allowed');
// 加載支付寶類
require_once APPPATH.'libraries/Payment/Alipaylib/Alipay.class.php';
/**
* MY_Alipay
* @author Mike Lee
*/
class MY_Alipay extends Alipay {
protected $_CI;
public function __construct($config = array()){
// 獲得 CI 超級(jí)對(duì)象
$this->_CI = & get_instance();
// 判斷是否存在配置文件
if (empty($config)) {
// 加載 Alipay 配置文件
$this->_CI->load->config('alipay', TRUE);
$config = $this->_CI->config->item('alipay');
}
parent::__construct($config);
}
/**
* submit 支付提交
* @access public
* @param string $out_trade_no 商戶訂單號(hào) 商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號(hào)
* @param string $subject 訂單名稱
* @param float $total_fee 付款金額
* @param string $body 商品描述 可空
* @return void
* @author Mike Lee
*/
public function paySubmit($order_code){
$this->_CI->load->model('order_model');
$order_info = $this->_CI->order_model->getMyOrderDetails($order_code, true);
if ( ! is_array($order_info) || ! $order_info) return false;
if ($order_info['pay_status'] == '1') return true;
$subject = 'XXXX商城-商品訂單';
$total_fee = $order_info['order_amount'];
$goods_detail_str = '';
foreach ($order_info['goods'] as $og) {
$goods_detail_str .= $og['goods_name'];
$goods_detail_str .= ' 數(shù)量'.$og['num'].'件川无;';
}
// 構(gòu)造要請(qǐng)求的參數(shù)數(shù)組
$parameter = array(
'out_trade_no' => $order_code,
'subject' => $subject,
'total_fee' => $total_fee,
'body' => $goods_detail_str
);
$html_text = $this->buildRequestForm($parameter, 'post', '確認(rèn)');
return $html_text;
}
/**
* refundSubmit 退款提交
* @access public
* @param string $order_code
* @return void
*/
public function refundSubmit(){
}
/**
* asynNotify 異步通知
* @access public
* @param void
* @return void
* @author Mike Lee
*/
public function asynNotify(){
$notify_data = $this->_CI->input->post(null, true);
$verify_result = $this->verify($notify_data);
if ($verify_result) { //驗(yàn)證成功
//交易狀態(tài)
$trade_status = $notify_data['trade_status'];
// 根據(jù)交易狀態(tài)處理訂單支付狀態(tài)
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
$this->updateOrderPay($notify_data);
}
echo 'success'; //請(qǐng)不要修改或刪除
} else { //驗(yàn)證失敗
echo 'fail'; //請(qǐng)不要修改或刪除
}
}
/**
* syncReturn 頁(yè)面跳轉(zhuǎn)同步通知
* @access public
* @param void
* @return void
* @author Mike Lee
*/
public function syncReturn(){
$return_data = $this->_CI->input->get(null, true);
$verify_result = $this->verify($return_data);
if ($verify_result) { // 驗(yàn)證成功
// 交易狀態(tài)
$trade_status = $return_data['trade_status'];
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
$this->updateOrderPay($return_data);
return true;
} else {
return false;
}
return true;
} else { // 驗(yàn)證失敗
return false;
}
}
/**
* refundNotify 退款異步通知
* @access public
* @param void
* @return void
*/
public function refundNotify(){
$notify_data = $this->_CI->input->post(null, true);
$verify_result = $this->verify($notify_data);
if ($verify_result) { //驗(yàn)證成功
//交易狀態(tài)
$trade_status = $notify_data['trade_status'];
// 根據(jù)交易狀態(tài)處理訂單支付狀態(tài)
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
$this->orderRefund($notify_data);
}
echo 'success'; //請(qǐng)不要修改或刪除
} else { //驗(yàn)證失敗
echo 'fail'; //請(qǐng)不要修改或刪除
}
}
/**
* updateOrderPay 更新訂單支付信息
* @access private
* @param string $order_code
* @return mixed
* @author Mike Lee
*/
public function updateOrderPay($alipay_data){
$this->_CI->load->model('order_model');
// 根據(jù)訂單號(hào)獲取訂單信息
$order_code = $alipay_data['out_trade_no'];
$order_info = $this->_CI->order_model->getOrderByID($order_code, true);
if (empty($order_info) || ! isset($order_info['pay_status'])) return;
if ($order_info['order_status'] == 0 && $order_info['pay_status'] != '1') {
// 更新訂單的支付狀態(tài)及支付方式
// pay_status => 1 表示支付成功
// pay_method => 1 表示支付方式為支付寶支付
$pay_info = array('pay_status' => '1', 'pay_method' => 1);
$pay_result = $this->_CI->order_model->updateOrderPayStatus($order_code, $pay_info, true);
// 添加訂單支付信息
// user_id 用戶ID
// order_id 訂單ID
// total_fee 支付總額
// buyer_id 用戶支付寶ID buyer_id
$order_pay_info = array(
'user_id' => $order_info['user_id'],
'order_id' => $order_info['id'],
'trade_no' => $alipay_data['trade_no'],
'total_fee' => $alipay_data['total_fee'],
#'total_fee' => $alipay_data['price'],
'seller_id' => $alipay_data['seller_id'],
'seller_email' => $alipay_data['seller_email'],
'buyer_id' => $alipay_data['buyer_id'],
'buyer_email' => $alipay_data['buyer_email'],
'add_time' => time()
);
$this->_CI->order_model->addPayLogForOrderAliPay($order_pay_info);
// 添加用戶收支日志
// correlation_id 關(guān)聯(lián)ID 這里為訂單ID
// action_type => 1 表示XXXX商城訂單事件
// pay_type => 1 表示支付寶支付
$payment_log = array(
'user_id' => $order_info['user_id'],
'correlation_id' => $order_info['id'],
'action_type' => 1,
'pay_type' => 1,
'cash_fee' => $alipay_data['total_fee'],
'remark' => 'XXXX商城訂單:支付寶支付'.$alipay_data['total_fee'],
'action_ip' => $_SERVER['REMOTE_ADDR'],
'add_time' => time()
);
$this->_CI->order_model->addLogForUserPay($payment_log);
// 添加支付寶支付日志
$alipay_log = array(
'user_id' => $order_info['user_id'],
'correlation_id' => $order_info['id'],
'seller_id' => $alipay_data['seller_id'],
'seller_email' => $alipay_data['seller_email'],
'buyer_id' => $alipay_data['buyer_id'],
'buyer_email' => $alipay_data['buyer_email'],
'total_fee' => $alipay_data['total_fee'],
'trade_no' => $alipay_data['trade_no'],
'gmt_create' => $alipay_data['gmt_create'],
'gmt_payment' => $alipay_data['gmt_payment'],
'price' => $alipay_data['total_fee'],
'action_ip' => $_SERVER['REMOTE_ADDR'],
'add_time' => time()
);
$this->_CI->order_model->addLogForAliPay($alipay_log);
}
return true;
}
}
/* End of file MY_Alipay.php */
/* Location: ./application/libraries/MY_Alipay.php */
2. 控制器Pay.php
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/**
* pay 支付控制器
*/
class Pay extends MY_Controller {
public function __construct(){
$this->isNeedLogin = FALSE;
parent::__construct();
}
/**
* alipaySubmit 提交支付寶支付
* @access public
* @param string $order_code
* @return void
* @author Mike Lee
*/
public function alipaySubmit($order_code){
$this->load->library('MY_Alipay');
$result = $this->my_alipay->paySubmit($order_code);
if (is_bool($result) && ! $result) {
$this->jumpNoticePage('訂單信息不存在!', site_url('main'), 'ERROR');
}
if (is_bool($result) && $result == true) {
$this->jumpNoticePage('訂單已支付虑乖,請(qǐng)不要重復(fù)支付懦趋!', site_url('user/orders'), 'ERROR');
}
$this->assign('html_text', $result);
$this->display('order/alipay.html');
}
/**
* aliPayNotify 支付寶異步回調(diào)
* @access public
* @param void
* @return void
* @author Mike Lee
*/
public function aliPayNotify(){
$this->load->library('MY_Alipay');
$this->my_alipay->asynNotify();
}
/**
* aliPayReturn 支付寶同步通知
* @access public
* @param void
* @return void
* @author Mike Lee
*/
public function aliPayReturn(){
$this->load->library('MY_Alipay');
$this->my_alipay->syncReturn();
$order_code = $this->input->get('out_trade_no');
header('location: '.site_url('order/paysuccess/'.$order_code));
}
}
/* End of file pay.php */
/* Location: ./apps/home/controllers/pay.php */