一、背景
在面试程序员的时候,有两项经历会带来比较大的加分,第一你是否做过支付金融相关的业务,第二你是否写过底层框架中间件代码,今天我们聊一下微信支付是如何对接的。
二、相关概念
1、微信商户平台
要使用微信支付,第一步就是要先入驻微信商户平台,准备好你的企业营业执照、法人身份证等完成入驻,平台就会给你生成 MCH_ID(商户ID)、MCH_KEY(商户密钥)、然后申请开通支付产品类型、操作证书、绑定银行卡等等。
2、接入模式
直连模式
商家自行开发系统对接微信支付进行交易,微信支付将资金结算到商户的结算账户.
服务商模式
商家没有自己系统,而是由微信支付官方注册入驻的系统开发商提供协助完成入驻,好像有赞就干了这个事。
3、支付产品类型
JSAPI网页支付:即公众号支付,在公众号网页点支付唤起支付控件。
小程序支付:小程序对接微信支付API 实现用户在小程序内完成交易场景。
另外还有线下付款码支付、扫码支付,这个就是付款的时候常问的话,你扫我还是我扫你?
另外还有AppSDK支付、H5支付等。
三、相关接口
1、统一下单
微信的各种支付产品类型(除付款码)都需要先调用统一下单接口,在微信后台生成预支付交易单,然后按各种不同的支付场景唤起对应的各支付控件。
请求参数:APPID\MCH_ID\随机串、订单编码、商品相关信息、价格、支付成功回调地址等。
返回值:预支付交易会话ID
两次签名概念
第一次签名:调用统一下单接口的签名
第二次签名:对预支付交易会话ID+APPID+随机串签名然后返回给小程序端,小程序端拿到这个签名串调接口唤起支付窗口。
2、wx.requestPayment
小程序端调用requestPayment唤起支付窗口,输入支付密码支付成功,微信服务端就会回调你在预支付时传过去的回调地址。
请求参数:预支付二次签名生成的串
3、支付回调通知接口
回调时做一下解签,返回商户订单号,微信平台生成的支付单号(便于对账)、实际用户支付金额、支付时间等。
4、申请退款接口
原路退还、超过一年无法退款,可以部分退款,退款接口调用时需要加载操作证书进行双向认证。PS:我们没有给用户提供该接口,而是做在管理系统里,当客户需要退款时打热线电话找客服退,垂直电商和平台电商做法还是有些区别。
5、查询退款接口
微信退款有延迟,零钱支付20分钟原路返回,如果是银行卡3个工作日,PS:不确定现在是否有调整.
四、微信支付调用时序图
PS:在开发时如果是三方及以上的系统交互最好把时序图画出来,这样便于整体理解,一般开发用的多的就是流程图(产品逻辑)、ER图(数据流)、类图(代码结构)、时序图(代码交互)基本上就差不多了。