集成支付并不是一件多難的事情,難的是支付流程,
本文就當(dāng)做我們已經(jīng)有了一個(gè)完整支付流程的網(wǎng)站,只剩下集成微信支付了。
能夠正常支付并不是微信支付的終點(diǎn),因?yàn)槲覀冞€要執(zhí)行回調(diào)
當(dāng)我們支付成功之后微信會(huì)向我們指定的回調(diào)方法發(fā)送請(qǐng)求,這個(gè)請(qǐng)求的路徑我們已經(jīng)在上面的代碼塊中指定
$input->SetNotify_url("http://www.\*\*\*\*.com/index.php/index/Order/notify");
具體回調(diào)方法如下:
//微信回調(diào)
public function notify()
{
$data=$GLOBALS['HTTP_RAW_POST_DATA'];
$result=xmlToArray($data);
$outTradeTo = $result['out_trade_no'];
if($result['return_code'] == 'FAIL'){
$failResult="
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
";
echo $failResult;
exit;
}else{
if($result['result_code'] == 'FAIL'){
}else{
db('order')->where(array('out_trade_no'=>$outTradeTo))->update(['pay_status'=>1]);
}
}
$failResult="
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
";
echo $failResult;
exit;
}
回調(diào)方法的目的就接到微信的通知后告訴微信我們知道處理結(jié)果了。
這里還沒完
再有最后一步就是支付成功或者失敗的時(shí)候,我們要?jiǎng)討B(tài)的提示給掃碼的用戶,這個(gè)一般的做法就是ajax異步訪問,查詢微信訂單,但是我在做這個(gè)的時(shí)候總是才坑,所以就自己寫了一個(gè)方法,ajax怎么異步訪問我想沒有必要貼出代碼了吧,我們已經(jīng)做過太多次,
貼出我自己改的查詢訂單狀態(tài)的代碼
//查詢訂單
public function orderQuery(){
$out_trade_no=input('out_trade_no');
$orders=db('order')->where(array('out_trade_no'=>$out_trade_no))->find();
if($orders['pay_status']==1){
return 'SUCCESS';
}else{
return 'ERROR';
}
}
ajax得到返回的結(jié)果為success就提示支付成功,error就提示失敗。至此就完成了微信支付。