php支付宝手机网站支付,异步回调和同步回调里面应该怎么写?

lesliehuo 2017-01-14 10:31:41
这几天要开发支付功能,用的是新版alipay.trade.wap.pay接口,看了一下支付宝文档,发现回调分为同步和异步返回,分别返回参数到设置的return_url和notify_url地址。

官方DEMO的notify_url解释要写的判断逻辑:
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序

官方DEMO的return_url中:
则没提示要的写任何判断逻辑

问题是:有两种返回方式,我不知道哪种执行再前,哪种在后。
1.return_url中先查询订单状态,在将数据库订单状态更新为已付款。这样return_url和notify_url的逻辑是一模一样的了。
2.return_url中直接在将数据库订单状态更新为已付款
3.return_url中不做任何更改数据库操作,就由notify_url来做

这三种处理哪种才正确?因为不知道同步回调和异步回调的先后顺序,不知道要不要在同步回调的return_ur中写哪种处理
...全文
3741 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41939758 2018-10-15
  • 打赏
  • 举报
回复
楼主请问一下,你支付宝手机端同步那边是怎么搞的,我这边也是支付宝手机端同步是出了点问题的,返回的数据status = 0的,数据库是已经修改支付状态了的,但支付完后的跳转页面是显示订单失败的,就是同步的这个方法出了问题的
haif_city 2017-12-26
  • 打赏
  • 举报
回复
现在的那个回调的触发前提是已经支付成功成功才会产生回调,也就是说我们可以默认他只要产生了回调参数,那么这个订单就算用户支付成功了,就直接根据回传的订单号,如果你觉得不安全那么你可以将它回调的参数进行验签,这个在支付宝异步回调那块有具体解释,并且你还可以用回调回来的支付宝那边的订单号去使用一个接口来查询它进行判断,所以说你说的三种现在都是可以的
lovewangya 2017-01-31
  • 打赏
  • 举报
回复
谢谢楼上了,正是我需要的,多谢
傲雪星枫 2017-01-24
  • 打赏
  • 举报
回复
引用 4 楼 lesliehuo 的回复:
[quote=引用 3楼傲雪星枫 的回复:]交易状态trade_status 可以根据out_trade_no去调用支付宝API获取的。 return_url你可以跳转到判断是否支付成功的页面。
引用 5楼傲雪星枫 的回复:
交易状态trade_status 可以根据out_trade_no去调用支付宝API获取的。
return_url你可以跳转到判断是否支付成功的页面。 你意思是在return_url中调用一次查询接口吗,然后根据查询接口返回值判断跳转的页面?这些理解对不对[/quote] 是的。
thanksmyfriend 2017-01-24
  • 打赏
  • 举报
回复
我记得在支付宝的文档中有这么几句话,不保证记得准确,还是要再研究下文档。 (1)notify_url,会在24小时(很类似24小时的一个数字,看到是还对这个数字怎么确定的很好奇)内重复发送,直到支付宝受到success的通知 (2)retrun_url,只调用一次,但因为网络问题,不保证能成功 所以个人操作习惯: 只在notify_url中写业务处理逻辑,return_url中不做任何处理。
lesliehuo 2017-01-23
  • 打赏
  • 举报
回复
引用 3楼傲雪星枫 的回复:
交易状态trade_status 可以根据out_trade_no去调用支付宝API获取的。 return_url你可以跳转到判断是否支付成功的页面。
引用 5楼傲雪星枫 的回复:
交易状态trade_status 可以根据out_trade_no去调用支付宝API获取的。
return_url你可以跳转到判断是否支付成功的页面。 你意思是在return_url中调用一次查询接口吗,然后根据查询接口返回值判断跳转的页面?这些理解对不对
傲雪星枫 2017-01-23
  • 打赏
  • 举报
回复
交易状态trade_status 可以根据out_trade_no去调用支付宝API获取的。 return_url你可以跳转到判断是否支付成功的页面。
lesliehuo 2017-01-22
  • 打赏
  • 举报
回复
引用 1 楼 fdipzone 的回复:
其实你不用理是同步还是异步先到达,因为网络情况很难保证先后。 你可以收到回调后,先判断是否已修改,如果已修改,且修改的与现在获取的一样,就不用再做更新处理了。 例如异步的回调先到,你更新支付成功,修改db。 然后同步的到了,你判断到已经更新过了,就不用做后面的处理了。
现在问题出来了,原来新版的支付宝接口的return_url是没有返回交易状态trade_status的,以前接口的两个回调逻辑是可以一样。现在的同步回调return_url没有这个状态感觉不能判断到付款是否已经成功了,就不能作数据库更改操作了,只能作跳转用。我这样理解对不对,return_url里面应该怎么写? 最新版接口:https://doc.open.alipay.com/doc2/detail.htm?treeId=203&articleId=105463&docType=1
傲雪星枫 2017-01-15
  • 打赏
  • 举报
回复
其实你不用理是同步还是异步先到达,因为网络情况很难保证先后。 你可以收到回调后,先判断是否已修改,如果已修改,且修改的与现在获取的一样,就不用再做更新处理了。 例如异步的回调先到,你更新支付成功,修改db。 然后同步的到了,你判断到已经更新过了,就不用做后面的处理了。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧