微信支付作为当下第二大第三方,毋庸置疑是大家都要接入的支付方式。
我们就接入了微信支付除刷卡支付之外所有的支付方式,包括隐藏的wap支付。
微信支付和大众化的支付异同点:
APP支付就是应用直接呼起微信客户端,完成支付
扫码支付,就是最近搞促销的超市,用微信扫一下就拿到了商品价格,直接付钱
wap支付,官方并没有公布在web上,它其实和公众号支付的类型是一样的,只是这个支付方式是在非微信客户端的其他手机H5上呼起微信支付
公众号支付,就是在微信的公众号内选择订单完成支付(公众号是一个蛮好玩的东西)
做支付的同学都知道,接一个通道,基本就是扣款,退款,查询,支付回调,,退款回调(支付宝退款是异步回调的)。
微信将扣款接口拆分成统一下单和调起支付接口,商户后端完成统一下单然后将接口组装交给无线客户端来调用微信支付接口。这个统一下单在我理解是将成单操作提前,来简化呼起微信客户端后的操作,增加用户体验。
微信的退款也拆分成了两个接口,申请退款和查询退款,申请退款后通过主动查询来轮询结果。并发量大的时候异步确实是个不错的选择,毕竟网络一波动线程池就全部等待结果返回无法释放还是很蛋疼的。
微信支付几种支付方式流程的区别
微信支付其中wap,app支付流程差不多,公众号多了一步授权获取openid,扫码流程稍微复杂一点。
简单介绍下
app支付
1,用户打开商户app,选择商品下单
2,商户后端成单之后发送微信统一下单,拿到prepayid,组装支付参数返回app端
3,app端调用微信支付接口,呼起微信支付,用户完成付款,微信返回APP端结果,是否展示成果H5页面(0:展示成果页面 -1:异常 -2:用户取消支付)
4,微信扣款完成,将支付结果通知商户后端
5,订单系统等待支付系统主动推送结果更改订单状态。
扫码支付(PC端)
1,app端按微信要求生成二维码
2,用户打开微信扫码,扫码后,微信会回调商户后端
3,商户后端成单后从微信统一下单,拿到prepayid
4,然后直接返回(2中微信有请求商户后端)给微信,呼起微信支付
5,微信扣款完成,将支付结果通知客户端
6,app端等待商户后端主动推送支付结果,展示用户成功页面
我们为了让用户更快的支付,也把成单操作提前了,只要用户点击商品生成二维码,我们就立刻统一下单拿到prepayid。
代码的建议
1,各种配置和动作接口尽量抽象出来,因为公司拓展可能出现多个公众号,多个app,以后新增的话就可以只配下appid之类的就可以了,简化代码开发,避免冗余。
2,是否可以多个app都使用一套appid,我也不是很清楚,以前我们两个app就共用的一个appid app支付,偶尔会出现A.app支付完了跳到B.app(在用户这两个app都安装的情况下),所以还是尽量分开吧。
3,微信所有交互都是https请求,退款需要证书,其他无证书,post请求完成交易动作,获取openid是get请求,最好封装一个http交互工具。
好的代码都是不断完善的,
有时间尽量多看看自己写的旧代码,可能以前的你并不懂如何更好的设计,那么现在既然知道了就应该去适当的重构。
送给热爱编程的我们。