因为微信返回的res.err_msg值,微信也不能保证一定准确,所以本人是根据订单的状态值来判断订单是否支付成功。此后出现了一些异常事件:1.有用户对同一商品购买了两次,原因是商城购买后弹框提示支付失败,但都扣款成功。2.我在弹框前断点打印订单状态是0(未支付的),而最后数据库里的状态却是成功的。3.最后根据用户反映,弹框提示有时是成功的,有时是失败的。
本人把微信支付的所有流程进行了检查,为了解决问题,这中间我自己给自己挖了一些坑,想必你们是不会有这样的错误的,所以在这里就不多说了。最后导致有这些问题的原因是本人的微信支付前端跳转速度太快了,而微信服务器返回xml数据,我再进行判断更新订单状态,速度太慢了。所以才会出现弹框提示支付失败,最后数据库里的状态却是成功的现象,因为弹框提示时,订单状态还未来的及更新。
最后一个延迟跳转就可以解决了
window.setTimeout('window.location="/payments/completed/id/<?php echo $userPaymentsp['order_id']?>"',2000);
//两秒后跳转新页面
在这里特别感谢我的同事方涛给我提供的帮助,向我推荐了强大postman异步调试工具。
在这里我也向大家推荐异步调试工具postman.