业务场景

由于我司最近接入海外业务,支付使用了paypal支付,在线上跑一段时间后频频的收到用户反馈购买商品时用户已经支付了,系统却提示用户未购买成功。这导致用户体验相当的差,也影响到了业务正常运作。

问题排查

于是我就拿用户提供的paypal交易号去查paypal商户管理平台查看用户是否已经完成了支付,结果发现用户真的完成了支付,但是我们的系统订单状态却是未支付状态,通过查看数据对比分析基于只有部分用户反馈未支付成功、其它用户都支付成功了,可以排除不是代码级别低级错误,可能有如下原因:

  • 原因1
    描述:业务系统与支付中心系统进行通信时是否延时过大,导致整个交易没有进行到底系统就报错。
    结果分析:在支付中心系统与业务中心系统中未发现操作日志,可以排除。

  • 原因2
    描述:paypal服务器异步回调我们服务器时因为网络问题延迟或丢包,导致无法请求到我们的系统,造成订单是未支付状态
    结果分析:我们的服务部署在国内,使用了阿里云全球CDN加速器进行加速,基于网络架构,国外某些区域请求我们服务器时可能会存在丢包或延时的情况。

解决方案

完成问题排查以后,我基本确定是原因2导致的,由于现在好大一部分用户都反馈有此类问题,所以得想一个应急方案来临时处理一下呀,于是我就有了如下2套方案:

  • 应急方案1:开发一个小工具针对已付款的用户直接激活订单等业务信息,开发小工具时间成本在4个小时左右,而且为了保证小工具不出问题,还有经过测试人员测一轮才能交给运营使用,七七八八算下来,从开发到交到运营手上前前后后需要1天的时间,时间成本折腾不起,于是又想了另外一个方案。
  • 应急方案2:登录paypal商户平台,点击右上角 设置->选择 销售工具->点击 即时付款通知的更新->点击 即时付款通知记录后,根据paypal交易号查看paypal异步回调交易记录,然后选择重新发送异步通知信息,该方案可行,运营可以直接使用,只需要快速写一个操作文档交给运营即可。

应急方案已经有了,但是从长远来看,我们得从根上解决问题。

  • 长远方案1:可否改变网络架构呢?网络架构的确可以调整,但是调整成本太大。
  • 长远方案2:既然paypal异步回调老是由于网络原因导致我们的订单业务无法成功,我们可否绕过异步回调呢?嘿嘿,当然可以啦,我们可以在paypal同步回调我们服务器时做手脚呀,在用户完成支付后点击返回商家我们就可以使用paypal携带给我们的参数再拿去验证签名如果合法则继续执行订单业务信息,我们既然有了同步回调处理逻辑了,异步回调是否可以舍弃呢?我认为还是继续保留,原因是同步回调受限于用户要点击返回商家,如果用户不返回商家则我们的同步回调就调不起来。在同步回调为调取时异步回调继续监控,双从保障,完美解决。

综上所述:长远方案2有个弊端也会导致用户购买不成功,那就是:用户支付完成以后不点击返回商家,且paypal异步回调没有调取成功,则问题就会暴露,最好的方案还是长远方案1,如果时间允许、成本允许可以考虑重构网络架构,将我们的系统根据服务点架设到具体的区域。

读者,您好,如果您有什么更好的方案欢迎在评论区回复,共同学习、共同成长哟!

paypal异步回调超时或无法请求到我们的服务器解决方案相关推荐

  1. 理解支付宝同步回调和异步回调

    支付宝同步回调和异步回调 当一个支付请求被发送到支付渠道方,支付渠道会很快返回一个结果.但是这个结果,只是告诉你调用成功了,不是扣款成功,这叫同步调用. 很多新手会拿这个结果 当作支付成功了,那就会被 ...

  2. dva中dispatch函数实现异步回调函数的方式

    #关于 dva中dispatch函数实现异步回调函数的方式 1.通过promise函数实现 这里先给出index.js 和modal模块的实现 services模块不需要做处理 //index.jsi ...

  3. Android 避免主线程执行网络请求之Activity/Fragment 结束后处理异步回调

    大家都知道Android涉及到与UI相关的操作只能在主线程执行 android4.0以后就禁止在主线程进行网络请求了,在主线程里面执行Http请求都会报NetworkOnMainThreadExcep ...

  4. c# 异步回调post请求http

    之前提到想用HttpClient发送post请求向服务器请求数据,今天被师父发现使用了c#提供的异步接口,但是使用方式却依然是同步的,就是取了Result,结果依然会阻塞主线程,所以查了查,改成异步回 ...

  5. php paypal ipn回调,Paypal IPN / Webhook 异步回调流程是怎样的?

    里面提到的内容跟我遇到的差不多,我使用的是 Omnipay Paypal 包. 我之前直以为只要用户在 paypal 端完成支付,无论是否跳转回网站执行同步回调,IPN / Webhook 异步回调都 ...

  6. 异步同步、阻塞非阻塞、异步回调、线程队列和协程

    今天学习了异步同步.阻塞非阻塞.异步回调.线程队列和协程 一.异步同步和阻塞非阻塞 线程的三种状态: 1.就绪 2.运行 3.阻塞 阻塞:遇到了IO操作  代码卡住  无法执行下一行  CPU会切换到 ...

  7. android 异步回调中操作UI线程,UI同步、卡死阻塞等性能问题

    android开发中,回调无处不在,整个android开发的框架就是以回调机制建立起来的.如:activity,service,broadcast,fragment,view事件监听,baseadap ...

  8. 异步http 超时_具有CompletableFuture的异步超时

    异步http 超时 有一天,我重写了执行不佳的多线程代码,该代码在Future.get()某个时刻被阻塞: public void serve() throws InterruptedExceptio ...

  9. 项目对接支付宝支付,内网穿透实现监听支付宝的支付成功异步回调通知

    调试的话使用支付宝的沙箱环境来进行调试 调试的时候因为是本地调试,没有上线的域名,无法被支付宝的异步回调请求所打到,这种情况下可以使用内网穿透来进行解决 内网穿透步骤: 内网穿透的几个常用软件 1.n ...

最新文章

  1. 在已创建的DataTable对象中添加在首列一列
  2. linux部署tomcat启动后无法访问,linux中启动tomcat后浏览器无法访问的解决方法
  3. Linux的IPC机制(二):Socket/管道/消息队伍/信号量
  4. js 获取sessionid_百战卓越班学员学习经验分享:页面js代码
  5. mnist手写数字识别_手写数字识别
  6. mysql如何防止插入重复数据_如何防止MySQL重复插入数据,这篇文章会告诉你
  7. POJ 2965.The Pilots Brothers‘ refrigerator
  8. (转)Hibernate框架基础——在Hibernate中java对象的状态
  9. iPhone屏幕尺寸、分辨率及适配
  10. Android HPSocket SE_SOCKET_CREATE (3)
  11. FusionCompute产品介绍
  12. 425 Failed to establish connection.
  13. Bootstrap下拉单选框,下拉搜索多选框Bootstrap-select
  14. uniapp上传图片视频插架分享
  15. 一个通过SOAP web service驱动ssh/telnet执行命令的小平台
  16. java poi excel导出2003版改成2007版本的时候报错
  17. 端口telnet通,但是无法访问前端资源(浏览器空白)
  18. Ubuntu 18.04 Bionic Beaver Linux上安装TeamViewer
  19. 人工解决问题和用计算机解决问题的相同点,2计算机解决问题的过程.docx
  20. 运行单独的vue页面

热门文章

  1. Android定位详解 兼容网络定位、GPS定位
  2. [VNCTF] insterestingPHP
  3. 给我深爱着的人,祝你中秋快乐……
  4. 程序员编程艺术第三十~三十一章:字符串转换成整数,通配符字符串匹配
  5. RISCV 特权级拾遗
  6. c语言 字符串 timu,这个C语言题目究竟谁该背锅?竟然是它。。。
  7. JavaScript中等等与(==)和全等于(===)以及不等于和不全等于
  8. 数字农业与智慧农业的区别和差异
  9. 前端面试题答案整理之CSS
  10. 如何把PPT转成PDF有用的方法