小程序支付流程梳理

微信支付体系有APP支付、扫码支付、网页支付、公众号支付、小程序支付。后两者是比较类似的,不同的是网页支付需要设置安全支付目录和授权域名,小程序是不需要。

主要围绕小程序支付来说明,小程序内置了支付函数 wx.requsetPayment(OBJECT). 调起这个函数需要package(含有prepay_id=的参数)、随机字符串(nonceStr)、时间戳(timeStamp)、签名类型(signType 默认是md5)、签名(paySign)这几个参数都是需要从自己搭建的接口服务器获取。

下面对这些参数获取一一说明:

1、随机字符串可以在服务器上直接生成;

2、时间戳也可以直接从服务器获取,获取从1970年1月1日00:00:00至今的秒数,即当前的时间;

3、签名类型“MD5”可以理解为一个常量;

4、预支付ID是需要向微信支付接口(统一下单接口)提交参数生成的,这个是关键中的关键。通过这个ID微信支付后台可以知道支付的金额、发起IP、发起人Openid、订单ID、商户号、APPID、诸如此类的信息;

具体参数可以看 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

请求统一下单接口需要用到发送HTTPS请求的代码,后面会单独介绍。

订单ID要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。很多时候发现突然请求不到prepay_id了,那么可以检查一下订单ID是不是重复。建议使用系统时间加随机序列来完成

5、签名是根据一系列参数排序加上KEY生成

举例如下:

paySign=MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=wukonglaiwukonglaiwukonglai12345)

= 22D9B4E54AB1950F51E0649E8810ACD6

KEY这个关键参数,需要进入微信支付后台去设置32位的字符串。

APPID这个参数是所对应的支付主体,对应的就是小程序、服务号的APPID。

Prepay_ID由前一步生成。


综上所述,成功发起支付需要先提交参数到微信支付统一下单接口,处理支付结果

自定义的接口和类

1、预支付接口,获取prepay_id

2、支付通知处理,支付完成后,微信会把相关支付结果和用户信息发送给商户。会先后按不同频率(通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)通知商户

3、签名类,支持MD5和SHA256

4、XML 数据格式化

5、HTTPS 网络请求

6、工具类,生成随机字符串和时间戮




官方定义的支付接口列表(10个)

1、统一下单

2、查询订单

3、关闭订单

4、交易通知

5、申请退款,(需要数据字证书)

6、退款查询

7、退款通知

8、交易保障

9、对帐单

10、订单评价

常用的1和4接口,接口8比较有意思,可以检测到接口的响应时间。

你可能感兴趣的:(小程序支付流程梳理)