今天只讲废话!
知识点
python
同步回调-跳转地址:展示界面渲染客户端 一般是GET请求
异步回调-通知地址处理对应订单业务逻辑 一般是POST请求
呜呼!互联网是把双刃剑 声嘶力竭证明观点,徒叹奈何!
python
一、同步回调-跳转地址:
展示界面渲染客户端 一般是GET请求
同步跳转文件:return_url.php
同步回调(也称为前台通知)的主要作用是给用户展示支付结果页面。当用户支付成功后,
支付宝会跳转回商户指定的同步回调地址,携带支付结果参数。商户服务器接收到该回调后,需要验证参数的合法性,并根据支付结果展示对应的页面。
1、从第三方支付平台的页面上返回自己的网站继续后续操作;
2、携带支付状态的get(或者post)参数;让自己的网站用于验证;
用户支付完之后会直接执行return_url.php,只执行一次,我们在这个文件里写的代码用于修改数据库订单状态,
改为买家已经支付过的状态(例如:status从0改为1),同时跳转到支付结束之后返回的页面
python
二、异步回调-通知地址
处理对应订单业务逻辑 一般是POST请求
异步通知文件:notify_url.php
异步回调(也称为服务器通知)是支付宝支付过程中最重要的一步,主要用于确认支付结果。当用户支付成功后,
支付宝服务器会向商户服务器发送一个HTTP POST请求,通知支付结果。商户服务器接收到该回调消息后,
需要验证消息的合法性,确认支付结果,并更新订单状态
如果自己的服务器出问题没有正确返回接受到通知的状态,第三方支付平台的服务器会在一段时间内
(通知频率大概为24小时以内完成 8 次通知)持续的往自己的服务器发送异步通知,直到成功为止。
然后才会执行notify_url.php,我们在这个文件里你依然可以修改订单的状态参数等,
主要作用是确认上一步return_url.php是否出错或者订单状态还需要修改,你可以在这个文件里写一些select的sql语句等,
(例如:select * from buy where status=0 and orderno='".$out_trade_no."用来确认订单状态确实已经修改成功)
,确保没问题之后给支付宝回复一个"success",这样这笔订单的操作才算结束了
其实吧之前忙于实现代码支付功能 殊不知忘了业务说明不深刻!
书到用时方知少,奈何陋室为书所累

python
同步通知和异步通知发送的数据没有本质的区别;
## 同步通知有2个作用;
第一是从支付宝的页面上返回自己的网站继续后续操作;
第二是携带支付状态的get参数;让自己的网站用于验证;
## 异步通知有2个作用
第一同步通知后;还需要异步通知主要是为了防止出现意外情况;
因为涉及到金钱;这是一个对安全和稳定要求比较严格的场景;
如果同步通知的过程中;用户不小心关闭了浏览器;或者浏览器卡死了;
第二是接收post参数异步也能收到通知;记录支付状态;
获取回调数据 file_get_contents("php://input");
python
即便是用户端没问题;
万一自己的服务器网络异常了一下呢?
如果自己的服务器没有正确返回接受到通知的状态;
支付宝的服务器会在一段时间内持续的往自己的服务器发送异步通知;
一直到成功;
顺便去确认了下;这个一段时间是:
25 小时以内完成 8 次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)
如果用户支付后,立即关闭了浏览器窗口,那么回调通知就会失败,但是用户的确是支付了,所以需要异步通知。
保险用的,除了关闭浏览器这种常见的意外情况,异步通知的接口也会有时候不可访问,
支付宝会周期性的反复请求异步接口,刚开始是1分钟后重试,然后8分钟之后重试,
然后30分钟后重试,然后1小时,然后5小时,这种。如果2天内都无法成功,就真正放弃。这个原理,具体的多次调用的规则请看官方文档。