【问题记录】关于ping++支付跳转的回调地址问题(支付宝和微信不一致)
问题描述
我们公司webview的h5网页支付是集成了ping++的支付。使用很简单,只需要创建一个charge支付凭据对象,所有和支付相关的要素信息都存储在这个对象中(通常是请求接口从服务端获取这些支付相关的信息),然后只需要调用ping++的一个函数pingpp.createPayment()就可以调起支付了。
但是支付操作完成后,我们常常需要通过判断支付状态(支付成功,支付失败,支付取消)做一些处理,这时候就要踩坑了!!!!
extra特定渠道发起交易时需要的额外参数,以及部分渠道支付成功返回的额外参数
根据ping++开发文档,支付完成后返回的页面地址,需要在charge对象的extra属性中传递。
一般有三个回调地址,result_ur,cancel_url,success_url。但是!!!不同渠道支付的回调地址处理方式不同,千万不要盲目处理,这就是踩坑的地方!!!
问题分析
我这里目前只用到了支付宝手机网站支付(支付方式为alipay_wap),和微信H5支付(支付方式为wx_wap)。回调地址注意:
1. 支付宝网页支付
支付宝有两个回调地址success_url支付成功的回调地址cancel_url支付取消的回调地址安卓用支付宝支付成功后点完成能够自动返回app(在配置了URL scheme的情况下),即跳转success_url,取消支付则跳转cancel_urlios用支付宝支付成功后,并不能返回app(目前没找到解决方法),只能手动返回,但是即使你支付成功了,跳转的依然是cancel_url,所有相当于ios用支付宝支付跳的都是cancel_url
2. 微信网页支付
微信只有一个回调地址,不管支付状态,只要拉起支付后返回网页跳转的都是result_urlresult_url支付完成的回调地址。问题解决 综上所述,只有挑战到success_url的时候,才能确保是支付成功的,而跳到cancel_url或者result_url都不能确认是否支付成功了所以在支付操作完成后,需要做处理的话,除了success_url,其他回调地址都需要主动获取下支付状态(用order_no订单id获取支付状态)需要注意的是,由于支付状态往数据库写入数据需要时间,可能第一时间返回h5后并不能获取到准确的支付状态,所以需要延迟获取支付状态可以考虑加个缓冲页,回调地址不要直接跳转回h5首页,这样延长操作时间,可以保证支付状态获取正常