微信文档里面的流程是:用户下单后,后台会调用统一支付 api,获取到 prepay_id 等参数,然后签名,返回相关数据给微信端,然后微信端发起支付。 现在我做的是,用户下单后。点击确认支付,然后付款。我不确定统一下单这一步放在哪儿。
如果是放在用户点击确认支付这一步,那么用户在微信端发起付款后,可以取消支付,或者余额不足等等。然后当他再次点击确认支付的时候,后台会重复提交统一下单。这样会报错,因为订单号重复。
如果实在用户下单的时候,就请求了统一支付。这个时候还没到用户付款这一步,那这样做 prepay_id 这些信息就需要保存下来,放到数据库?或者 redis ?之后支付的时候直接取出来发给微信端,然后微信端付款。
不知以上哪种流程合理一点?请大家指点指点。
1
RihcardLu 2017-10-28 16:02:23 +08:00 via iPhone
第一种,同一个方式如果如果不发生价格变化,不会报重复,不同方式才会,公众号支付加固定后缀。
|
2
arischow 2017-10-28 19:05:35 +08:00 via iPhone 1
prepay_id 不需要保存起来,这个 id 有效期是两小时,期间有新的 prepay_id 生成,它也不会失效。所以如果用户取消支付了的话再去调用一次统一下单就可以了。
|
3
pubby 2017-10-28 20:18:10 +08:00
设计上有点问题,订单是订单,支付是支付
order: O6789 "商品" ¥ 12.00 等待支付 trade: T1234 O6789 "微信支付" ¥ 12.00 <prepay_id> 正在支付 用户取消后再次支付就再生成一条,( prepay_id 超时之前可以继续用上面一条): T1235 O6789 "微信支付" ¥ 12.00 <prepay_id2> 支付完成 -> 操作 O6789 的状态 -> 已支付 trade 可以扩展为支持不同的支付渠道,微信支付,支付宝,银联.... |
4
dangyuluo 2017-10-29 03:39:26 +08:00
一楼回答没错,我们是这么做的,用户购买有个确认界面,要求输入地址、电话、备注等。用户输入完成后点击确认,服务器生成这个订单,并根据这个订单 id 及金额向微信统一下单服务器发送请求,得到 prepay_id,返回给前台。
前端收到这个统一下单 id 后,调用支付接口,微信就会弹出来支付输入密码。支付完成后可以用成功的回调 js 代码。 统一下单 api 被调用的时候一定要给一个通知地址,不能根据前端 js 来获取的支付结果,不安全。 |