敦兮其若朴,旷兮其若谷
现在第三方支付越来越流行,支持支付宝和微信支付的商家已经随处可见。伴随着移动支付的这种趋势,越来越多的企业在选择支付方式的时候会接入这两种支付方式。而我们也接入了这两种支付方式。
我们知道支付宝和微信在支付的时候需要传递一个order_num参数,用于标记提交的这个订单的编号,但是如果本次支付失败了,支付宝或者微信会在他们服务器针对此订单号记录为失败状态(即在第三方支付服务器一个订单号只被标记一次,标记后不得更改),下次再次提交的时候,如果还是传递该订单编号,则会一直返回失败,但我们的业务需求却是支付失败可以再次尝试支付该订单,所以为了避免这种情况我们需要注意:
※需要建立两张表。表1:订单记录表(order_record) 表2:支付记录表(pay_record)。两张表用order_num关联,每次生成待支付订单时,向order_record表中插入一条记录代表该订单。然后当真正点击支付需要向第三方支付提交订单编号参数时,不要提交order_num,而是向pay_record表中插入一条数据,并添加pay_num和pay_status字段(pay_num可时间戳+随机数生成),提交pay_num给第三方支付服务器,如果返回成功或失败更改两个表中的pay_status,但如果想把失败的待支付重新支付则再次向pay_record中插入记录即可,当然关联的order_num仍然是之前的order_num,但pay_num却是新生成的,这样提交到第三方支付服务器的时候,他认为是一个新的订单号(其实在我们这边是pay_num),就会重新跑支付流程了。
这样还能避免如果支付按钮未做多次提交防护,也能有效避免支付失败的情况。
© 后花院 | 静心思考 | Powered by EMLOG | Theme by NIMA
友情链接:Nutcracker