一、问题详述
1、让服务端去除同步回调地址,此时当客户端唤起微信支付界面,取消后又会重复唤起支付
2、加上同步地址后,当取消、支付成功、或等待支付中,此时都会跳转同步界面,并未回到app中
二、问题思考
1、由于以上叙述的问题,得出结论:app中调用H5支付,并不能采用H5支付的模式进行,需要借助activity的特性交互。
2、就算成功回到app中,如何知道支付的成功状态。是采用轮询、长链接、或是推送的形式值得思考。
三、实践方案
1、让服务端加上同步地址,不能为空
2、不能采用同步地址作为交互的方案,但是又不能去除,客户端需要接受消息,否则客户端会不断唤起支付界面
3、我们在支付Activity中设置是否第一次进入的标示,在Resume中进行判断是否由支付界面回到当前Activity界面。如果并不是一次进入当前activity界面中,我们就认为他是从支付界面跳转回来的,不管是按Home界面回来或是其他操作,此时我们用最简单的方式,轮询机制主动查询服务端订单信息,这里为了友好交互,我们采用10秒中每5秒调用一次,当第一个5秒就成功了,我们也就返回支付成功了,此时就没有必要进行第二个5秒了。尽管会有失败的情况,但是这样长的时间能够保障更多的支付成功情况。如果服务端延迟过长,那应该需要优化一下了。