请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

支付宝回调发生异常时,能否通知支付宝取消当前交易?

Hi Geely Sir,

刚看到支付宝对接这部分,有个问题想请教一下,一般来说我们测试支付宝回调的时候,很可能不能保证一次性验证通过,也就是说有可能在我们自己的业务逻辑中间很可能会出现异常,那么在实际线上,当支付宝回调我们接口时,如果发生了异常,有没有什么办法通知支付宝取消当前交易,避免用户的损失呢?

谢谢...

==============分割线===============

自己开了下脑洞,在遇到回调异常的时候,捕获了该异常,然后在异常处理里面调用了退款接口,但是问题又来了,对于退款的订单,支付宝貌似把该订单关闭了,在我再次调用支付接口生成二维码进行付款的时候,提示当前交易已关闭,请收银员重新发起付款,请问这个怎么破?是需要我在自己的系统里把该订单也置为关闭状态,然后让用户重新下单吗?求指点!

可能我的这种解决方案有点愚蠢了,希望能给一个好的解决方案,谢谢...

正在回答 回答被采纳积分+3

1回答

Geely 2017-12-08 14:18:21
  1. 第一个问题是可以滴,系统肯定 要做补偿措施滴,例如用定时任务定时检测。异常订单主动取消退款 ,很好的问题

  2. 这个没关系,把咱们订单的状态重置,然后重新和支付宝生成新的交易号即可。




另外,看帖子看帖子看帖子,重要的说三遍哈


我给大家整理了这个,有问题可以来看看先找一下。 肯定有你想要的哈


部署环境的话 ,建议看下文章最后一小段哟~首先跟着课程阿里云部署那个章节过一遍,可以先不跟着操作,做到心里有数,环境部署都做了什么。


尽快进入咱们QQ群哟~~进群方法下面思维导图那个帖子有。非常详细


课程项目思维导图及线上环境、测试环境、部署linux和windows等解答

http://www.imooc.com/article/20193 


【重点】问答区常见问题整理

http://www.imooc.com/article/18998


课程项目QQ群分享手记

http://www.imooc.com/article/19094



找工作的季节之简历及找工作的分享

http://www.imooc.com/article/19998


项目环境、vsftpd、linux、mysql等各种配置、软件下载

http://learning.happymmall.com


课程求10分好评哇谢谢啦~~(づ ̄ 3 ̄)づ


咱们二期上线啦,【二期进阶Tomcat集群和Redis分布式课程已经上线】

二期课程网址 http://coding.imooc.com/class/162.html


0 回复 有任何疑惑可以回复我~
  • Hi geely sir,
    
    感谢百忙之中抽时间解答我的问题,谢谢...
    
    对于第一点,这个很好理解,为避免用户损失可以定时主动查询支付订单状态,必要时进行订单撤销或者退款。
    
    对于第二点我还是有点疑惑,疑惑在于您说的“重新和支付宝生成新的交易号”;我目前的理解是,首先我们得在自己的系统(这里就是mmall)中,将该订单状态重置(这里应该是置为交易关闭吧),然后用户需要在商城中重新进行下单,然后再次发起扫码支付,是这个意思吗?
    但是我个人浅见觉得这样的话会不会使得用户的支付体验不太愉快,因为我明明进行了支付,因为你系统的原因导致我还要重新再下一次单,所以我想表达的意思是,有没有办法让用户没有感知的情况下,认为是自己没有支付成功,只需要重新扫描我们已经生成的二维码进行再次支付,完成交易呢?
    
    但是我也看了支付宝的官方文档,里面有明确的规定:
    "特别注意:商户订单号out_trade_no在任何情况下不可重复,即时对于失败或撤销的交易,商户订单号也可能已经被使用了,如需再次发起支付,必须使用新的商户订单号调用接口,否则会报错。"
    
    我感觉这个规定的意思就是如果要重新发起支付的话,那用户就必须重新下单,重新生成out_trade_no再与支付宝发起支付,是这个意思吗?
    
    希望geely sir 您能不吝赐教 谢谢...
    回复 有任何疑惑可以回复我~ 2017-12-14 11:35:12
  • Geely 回复 提问者 请叫我程序猿_呆维德 #2
    这个过程是在后端悄悄进行的,可以加一层校验,校验这个交易号是否已经过期,如果过期,在后端重新发起交易流水,展示给用户的还是最新的二维码,然后在pay表里记录好这个过程。另外你说的out_trade_no不能重复,这个的确是一个问题,我们还有一个办法。就是在后端在弄一共表,把用户真实的out_trade_no和我们悄悄发起的进行一个绑定。可以用这个out_trade_no加上下划线_1 _2这样发起。这个问题就解决了。
    只不过回调的时候我们要判断一下绑定关系。是否正确。
    回复 有任何疑惑可以回复我~ 2017-12-16 12:19:27
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号