第一次对接微信支付,也是被这个问题搞了一天多,查看社区看到也是问的多,解决的几乎也没有人分享结果。
针对我自己情况我简单总结下问题,一是自我总结,二是希望能和其他人有参考。
背景介绍:
1、后端服务是nodejs 实现 ,官方只有java php 的SDK提供,没有nodejs 所以意味着整个过程都要自己实现。
2、native 方式接入
对接前准备:
1、文档一定得看熟,看透,我觉得这次解决问题,主要利益于文档被看的几乎无死角,一个细节决定成败。
2、文档必须看透的部分:接入前准备,
这一部分主要是生成证书,必须仔细的一步步操作正确,无数次手机验证码确认,过程略。。。。。
最后的输出是 本地生成一个压缩包,解压后
把证书使用说明.txt 仔细看三遍。
3、接口规则,很重要,对接的每个逻辑息息相关
对接之前,我把左边栏里的内容看了很多遍,一边看一边在自我总结对接逻辑 。 比如
这个错误返回,作用就很大,几乎没人能一下接入成功,必须得会看错误信息,这个微信大厂做的真是好,哪个字段,什么原因出错都有详细描述。。。所以接口规则里的每个字都不能错过。
其实对接难点是这些规则,规则中的难点是证书和密钥的区分和正确使用,重要的说三遍
其实对接难点是这些规则,规则中的难点是证书和密钥的区分和正确使用,重要的说三遍
其实对接难点是这些规则,规则中的难点是证书和密钥的区分和正确使用,重要的说三遍
这解释了什么是商户私钥、商户公钥 、平台公钥 、apiv3 秘钥,以及他们的获取途径。
3、文档必须看透的部分:开发指引,这一部分是上规则一个案例说明,再次让你了解规则。
开始动手
我一开始的想法直接找到Node SDK ,问过官方答复是没有,但是github 能搜到一些非官方的开发包,但我想了想,毕竟是关乎钱的事-支付,还是自己原生代码对接比较好。所以纠结了一下放弃了第三方的SDK。但是他们实现方式确实帮了我不少,感谢这些开源者和github 。 下面就记录代码与调试上几个重要方面。
1、签名
签名必须借助官方一个工具,
使用方法, 这里说很清楚, 目前我只用到签名。文件选自己的 apiclient_key.pem
我把签名字符串复制到【明文】这里,签名得到结果和我程序里的结果相比较,这一步来确保签名是正确的!
方法:签名之前把内容打印出来,然后复制到工具里,生成签名,和自己程序签名比较。
nodejs 用到字符串模板的话注意一个问题,如下图示例,换行的必须顶行开始
2、其他主面,基本是代码程序
上一部分能过,后面就没有大问题了,我这里碰到有,POST JSON(data) 体,
const payload = JSON.stringify(data),data json 对象所以构造签名体,要转成字符串。但是在axios 发送时要发对象(data)
签名 = sign(......,payload)
axios.post(fullurl,data,config).then((response) => {
.....
}
payload 签名是用的,data发送时用的,我发送不小心也写成payload . 造成验签失败,应该是axios 对象会处理成字符串发过去,直接给字符串不知道给转成什么的,所以对象验的东西和你签名的东西不一样了。造成401错误。
3、其他问题,如下图,都比较好解决了。字面意思即可。
都没有问题就可以收到code_url,复制到草料网上,如下图
我在线生成手动二维码,描码---》支付 --》到帐 成功!困扰一天的支付终于解决了。
总结:到此主要针对 401问题解决思路,目前我还没有用到加解密,更换证书等功能。
另外,第三方开源,我看了下,wechatpay-axios-plugin的代码,很优秀的代码实现,代码实现逻辑很多参考这里实现。
-------------------------------------------------the end -------------------------------------------------------
good job!
点赞鼓励!