config文件配置支付寶信息
//支付寶 支付配置
'ALI_CONFIG' => array(
'gatewayUrl' => 'https://openapi.alipay.com/gateway.do',//支付寶網關(固定)
'appId' => 'APPID即創建應用後生成',
'rsaPrivateKey' => '由開發者自己生成: 請填寫開發者私鑰去頭去尾去回車,一行字符串',
'alipayrsaPublicKey' => '支付寶公鑰,由支付寶生成: 請填寫支付寶公鑰,一行字符串',
'notifyUrl' => 'http://www.xxxx.com/api.php/CallBack/orderCallBackzfb', // 支付成功通知地址
'returnUrl' => 'http://www.xxxx.com/index.php/Index/index1', // 支付後跳轉地址
)
controller支付寶支付接口,前臺用form表單提交
/**
* 支付寶支付
*/
public function orderAlipay(){
if (IS_POST){
Vendor('Alipay.aop.AopClient');
Vendor('Alipay.aop.request.AlipayTradeWapPayRequest');
$order_no = $_REQUEST['order_no'];//訂單號
$order = M("order")->where("order_no='".$order_no."'")->find();
if($order['type'] == 1){
$goods = M("fish")->where("id=".$order['goods_id'])->find();
}else{
$goods = M("product")->where("id=".$order['goods_id'])->find();
}
$out_trade_no = $order_no;
$body = '支付信息';
$subject = $goods['name'];//商品名
$order_amount = $order['price'];//訂單加個
$aliConfig = C('ALI_CONFIG');
$aop = new \AopClient();
$aop->gatewayUrl = $aliConfig['gatewayUrl'];
$aop->appId = $aliConfig['appId'];
$aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
$aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];
$aop->apiVersion = '1.0';
$aop->postCharset='UTF-8';
$aop->format='json';
$aop->signType='RSA2';
$request = new \AlipayTradeWapPayRequest ();
$bizContent = "{" .
" \"body\":\"$body.\"," .
" \"subject\":\"$subject\"," .
" \"out_trade_no\":\"$out_trade_no\"," .
" \"timeout_express\":\"90m\"," .
" \"total_amount\":$order_amount," .
" \"product_code\":\"QUICK_WAP_WAY\"" .
" }";
$request->setBizContent($bizContent);
$request->setNotifyUrl($aliConfig['notifyUrl']);
$request->setReturnUrl($aliConfig['returnUrl']);
$result = $aop->pageExecute ( $request);
echo $result;
}else{
echo 'sorry,非法請求失敗';
}
}
回調接口
/**
* 支付寶回調
*/
public function alipayCallBack(){
Vendor('Alipay.wappay.service.AlipayTradeService');
$arr=$_POST;
$aliConfig = C('ALI_CONFIG');
$alipaySevice = new \AlipayTradeService($aliConfig);
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
if($result) {//驗證成功
//請在這裏加上商戶的業務邏輯程序代
//——請根據您的業務邏輯來編寫程序(以下代碼僅作參考)——
//獲取支付寶的通知返回參數,可參考技術文檔中服務器異步通知參數列表
//商戶訂單號
$out_trade_no = $_POST['out_trade_no'];
//支付寶交易號
$trade_no = $_POST['trade_no'];
//交易狀態
$trade_status = $_POST['trade_status'];
if($_POST['trade_status'] == 'TRADE_FINISHED') {
//判斷該筆訂單是否在商戶網站中已經做過處理
//如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
//請務必判斷請求時的total_amount與通知時獲取的total_fee爲一致的
//如果有做過處理,不執行商戶的業務程序
//注意:
//退款日期超過可退款期限後(如三個月可退款),支付寶系統發送該交易狀態通知
}
else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判斷該筆訂單是否在商戶網站中已經做過處理
//如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
//請務必判斷請求時的total_amount與通知時獲取的total_fee爲一致的
//如果有做過處理,不執行商戶的業務程序
//注意:
//付款完成後,支付寶系統發送該交易狀態通知
}
//——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——
echo "success"; //請不要修改或刪除
}else {
//驗證失敗
echo "fail"; //請不要修改或刪除
}
}