mysql - 支付宝及时付款怎么用php事务处理

php中文网
发布: 2016-06-06 20:26:48
原创
1565人浏览过

如果支付宝付款成功,而数据库插入记录失败了,怎么用事务进行回滚,

回复内容:

如果支付宝付款成功,而数据库插入记录失败了,怎么用事务进行回滚,

以异步通知的支付宝实时到账的SDK支付接口为例,做的时间有点久了,和支付宝交互的过程可能说的不是非常正确,不过不影响处理逻辑:

  1. 支付宝向你的notify_url发起一个post请求,其中包括了各种订单信息和当前的付款状态作为参数

  2. 收到请求后你应该要对此请求进行校验(验签)

    立即学习PHP免费学习笔记(深入)”;

  3. 如果一切正常,你开始调用PDO的beginTransaction开启事务写入

  4. 对你的数据库进行正常的操作

  5. 操作的过程中如果有任何异常,自行捕获,调用PDO的rollback进行回滚,然后返回支付宝非success字符串(或者空)

    LibLib AI
    LibLib AI

    中国领先原创AI模型分享社区,拥有LibLib等于拥有了超多模型的模型库、免费的在线生图工具,不考虑配置的模型训练工具

    LibLib AI 647
    查看详情 LibLib AI
  6. 如果一切正常,调用PDO的commit提交事务,然后返回支付宝success的结果

注意,如果你这里没有正确结束,永远不要向支付宝的异步通知请求返回"success"成功的结果,对于异常的情况支付宝会重复调用7次通知

插入失败就告诉支付宝失败了,支付宝会一直发回调过来,你总有一次插入成功的。

这个问题其实本质上是一个分布式事务的问题,更通用一些的问题是的:
如何保证两个不同系统间数据的一致性?

目前个人感觉比较好的方法是采用消息的方式,通过可靠的消息中间件,将一个大的事务操作,拆分为多个小的本地事务,通过最终一致的方式实现ACID

无法回滚,一个是支付宝接口,一个是本地数据库操作

相关标签:
支付宝
支付宝

支付宝,全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付服务,有需要的小伙伴快来保存下载体验吧!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号