集成支付并不是一件多难的事情,难的是支付流程,
本文就当做我们已经有了一个完整支付流程的网站,只剩下集成微信支付了。
能够正常支付并不是微信支付的终点,因为我们还要执行回调
当我们支付成功之后微信会向我们指定的回调方法发送请求,这个请求的路径我们已经在上面的代码块中指定
$input->SetNotify_url("http://www.\*\*\*\*.com/index.php/index/Order/notify");
具体回调方法如下:
//微信回调
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;
}
回调方法的目的就接到微信的通知后告诉微信我们知道处理结果了。
这里还没完
再有最后一步就是支付成功或者失败的时候,我们要动态的提示给扫码的用户,这个一般的做法就是ajax异步访问,查询微信订单,但是我在做这个的时候总是才坑,所以就自己写了一个方法,ajax怎么异步访问我想没有必要贴出代码了吧,我们已经做过太多次,
贴出我自己改的查询订单状态的代码
//查询订单
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得到返回的结果为success就提示支付成功,error就提示失败。至此就完成了微信支付。