在前段时间项目中需要接入微信的支付功能,因为以前没做过在其中也踩过不少的坑,所以在这里写一篇文章总结一下在编码过程中遇到的问题以免以后再犯,同时也为大家排一些坑以免大家多走弯路,第一次写博客如果有写得不对或者写得不好的地方也请各位海涵指正。

         回归正题微信支付包括付款码扫码支付、JSAPI支付、H5支付、Native支付、app支付、扫脸支付和小程序支付。在此具体讲的是H5跳转微信支付及小程序跳转微信支付。其他的支付方式在细节上有差异但也都大同小异。微信的开发者文档也都有详细的介绍。

ios 支付宝 微信 h5支付 微信h5支付和jsapi_ios 支付宝 微信 h5支付

 先是H5跳转微信支付。H5支付相对JSAPI支付比较简单,下面将介绍H5支付的具体流程。

首先我们必须得在微信公众平台和微信商业平台那边配置好相关配置

1、注册微信服务号,开通微信支付权限绑定微信商业平台(这个具体怎么操作我就不说了)

2、获得APPID,MERID,SIGNKEY之后将参数拼接签名(此处参数都是必填参数,选填参数根据自己项目需求填写)。

(非常要注意:此处字符拼接的时候必须以参数名首字母的ASCII码排列,其实就是abcd....排列,不然会生成错误的签名

签名时需要把所有小写转换成大写就是调用.toUpperCase)

ios 支付宝 微信 h5支付 微信h5支付和jsapi_微信支付_02

3、将参数封装成xml文件的格式,可以使用工具,我这里是直接拼接起来的(因为懒= =,顺便说一下,H5支付是不需要openid的,而JSAPI支付openid是必须的参数)

ios 支付宝 微信 h5支付 微信h5支付和jsapi_java_03

4、将拼接好的xml作为参数调用统一下单接口:https://api.mch.weixin.qq.com/pay/unifiedorder

ios 支付宝 微信 h5支付 微信h5支付和jsapi_H5支付_04

5、然后他那边就会给你返回这些东西啦

ios 支付宝 微信 h5支付 微信h5支付和jsapi_H5支付_05

如果中间有错误他将会把你的错误提示给你,如果正确的话那调用支付在这里就产不多完成啦(对没错就是这么简单...)

调用成功后将会返回给你一个mweb_url有效期为5分钟,这就是调起微信的连接,直接访问就能调起微信啦。

 

然后是JSAPI支付的调用,这是公众号的支付,因为需要二次签名,所有相对H5的比较麻烦,但是总体的流程是差不多的,各位就放心吧。

1、第一步还是要注册商户平台关联公众号,先设置一些安全域名测试白名单什么的,这个怎么设置百度都有,我这里就不再赘述了。

2、这里还是要把参数弄齐然后按首字母顺序拼接起来生成第一次签名,具体参数的来源和作用在前面图上已经解释过了,如果还不清楚的可以翻上去看看(这里多了个openid,是JSAPI必须的参数这个openid必须是与公众号绑定并授权的appid对应产生的openid)。

ios 支付宝 微信 h5支付 微信h5支付和jsapi_MWEB_06

3、然后就是把参数拼接成xml文件的格式将生成的第一次签名做为参数放入xml中。

ios 支付宝 微信 h5支付 微信h5支付和jsapi_java_07

4、然后就是调用微信的统一下单接口https://api.mch.weixin.qq.com/pay/unifiedorder

ios 支付宝 微信 h5支付 微信h5支付和jsapi_H5支付_08

4、再这里调用成功后将会返回这些东西给你,错误的话也会将什么错误返回给你。

ios 支付宝 微信 h5支付 微信h5支付和jsapi_java_09

这里跟H5支付不同的就是这里是返回一个预下单id:prepay_id,这个id的有限期为2小时。

5、获取到预下单id也就是prepay_id后将进行第二次签名。(这里要看清楚参数是怎么写的,与第一次签名的大小写不同的,这个我当时也纠结了很久需要注意的1、prepay_id是放在package参数中的,中间还要拼接一个prrpay_id=;2、这里参数名是使用的驼峰命名(第一次签名是全部小写);3、时间戳(timeStamp)要生成以秒为单位的不能生成以毫秒为单位的(我这里是直接生成毫秒为单位的然后/1000))

ios 支付宝 微信 h5支付 微信h5支付和jsapi_ios 支付宝 微信 h5支付_10

6、将参数数返回给前端,然后在前端用微信工具就能调起微信支付了

ios 支付宝 微信 h5支付 微信h5支付和jsapi_MWEB_11

至此今天的分享就到此为止了,感谢大家的阅读。