小程序订单支付,用户在输入密码时候关闭窗口,但是可以在45分钟内通过待支付订单页面重新支付这笔订单。现在想到有2种方式:
- 重新调用 prepayWithRequestPayment(JsapiServiceExtension)接口,重新获取支付参数,通过日志观察,这次微信支付生成的prepay_id和第一次请求这个接口获取的prepay_id不一致,应该是每次请求这个接口微信支付都会生成新的prepay_id;
- 将第一次获取到的微信支付参数(appId,timestamp,nonceStr,package,signType,paySign)缓存起来,有效期45分钟。
目前使用的是第一种方式,验证过没有问题,但是这种方式有一个弊端就是用户多次关闭收银台,然后在重新支付,就会生成多个prepay_id,其实就是多次在微信支付下单,感觉这样不太好,不知道会不会有什么影响。第二种方式没有验证过,prepay_id有效期是2小时,不知道这些参数的有效期是多长。
原单重入可以直接获取新的预支付ID用于调起支付,订单可重入时间是远大于你当前需要的45分钟的,不建议做缓存,会存在安全风险