支付宝支付微信支付开发处理异步通知 notify 的方法
怎样在支付发起网站增加处理异步通知的方法
在本站之前的文章中,笔者为大家介绍了在WordPress中使用支付宝支付和微信支付的开发方法。那两篇文章中,只介绍了处理同步返回数据的方法,而没有介绍怎么处理支付平台异步通知返回数据的方法,只有同步而没有异步通知的处理显然是不完整的。如果用户支付完成之后,没有等待支付网站跳转回发起支付的网站就关闭了页面,发起支付的网站是收不到支付结果通知的。今天我就为大家介绍一下怎么在支付发起网站增加处理异步通知的方法。
异步通知和同步通知的相同和不同
两种通知方式的相同之处就是返回的数据完全相同,不同之处主要有以下两点。
- 同步通知返回数据的方法为GET请求,我们可以很方法的通过$_GET全局变量获取返回的数据并进行处理。而异步通知的请求方法为POST方法。
- 同步通知返回的数据,我们可以很轻松的打印出来,出现错误方便排查原因,而同步通知返回的数据没有办法直接打印,只能通过写入Log或数据库的方式来查看返回的数据。
有了以上两点不同,处理异步通知的方法肯定就和处理同步通知的方法不一样了。其实主要的不同在于返回数据的方法,一个是GET请求,一个是POST请求。下面我们来看一下具体的处理代码。
处理异步通知的注意事项
不管是通知通知,还是异步通知,在发起支付的网站,处理通知的业务逻辑其实是一样的,基于DRY原则,我们完全可以把两种处理方式放在一起处理,在两种支付方法不同的地方做出判断,各自处理就可以了。下面是支付宝支付和微信支付获取请求数据的方法,如果通知方法是同步通知,直接通过$_GET变量获取订单号,如果是异步通知,支付宝可以直接通过$_POST变量获取数据,而微信支付返回的数据是XML格式的,我们需要通过辅助函数转换为数据,然后获取数据。
/**
*获取支付网关返回的out_trade_no
*/
if($notify=='return'){
$out_trade_no=$_GET['out_trade_no'];
}else{
if($method=='alipay'){
$out_trade_no=$_POST['out_trade_no'];
}else{
$out_trade_no=Helper::xml2array(file_get_contents('php://input'))['out_trade_no'];
}
}
验证同步通知成功,我们需要返回一个成功消息“success”给支付网关,以免支付网关重复发送通知。
if($response->isPaid()){
if($notify=='notify'){
echo'success';
}
}
有了异步通知的方法,支付接口的开发才算是完整的,就是用户支付完成后关闭了支付网关页面,发起支付的网站也能很快判断用户的支付状态,并根据用户的支付状态做出自动处理订单、自动发货等后续的业务处理。
支付宝微信支付开发的重点
其实在支付宝微信支付开放的过程中,支付接口的对接并不是最重要的部分,接口的注意事项是固定的,总共就有那么多,不会有太多变化。而处理订单的业务逻辑却是千变万化的,而因为支付直接设计到交易,在业务逻辑的处理过程中,我们一定要小心慎重,尽量完整地考虑各种情况的发生及处理方法,这样才能做到万无一失。

-
WordPress同城互联网产品解决方案:UBASE 2023-10-03 16:40:39
-
WordPress网站的安全插件:wordfence 2023-09-14 09:25:18
-
创建Vue组件详细教程 2023-09-10 00:23:17
-
WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本 2023-08-28 16:58:45
-
WordPress 6.3版本(2023年8月)性能提升了哪些? 2023-08-28 16:56:02
-
Astra 主题团队推出人工智能驱动的 WordPress 网站创建平台 – ZIPWP 2023-08-28 16:49:54
-
WordPress 宣布将为用户提供 100 年域名托管服务 2023-08-28 16:45:27
-
PHP判断if else 和 switch case的区别盘点 2023-07-29 15:11:11
-
详解WordPress独立站SEM中的OCPC方法(含百度推广OCPC与谷歌OCPC) 2023-07-19 08:01:30
-
WordPress的古腾堡全站编辑器site-editor.php介绍(附:site-editor.php启用代码) 2023-07-16 08:01:57