微信支付V3的集成并不复杂,因为有微信的大礼包 https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient ,这里已经将需要做的事情都做了,集成的时候只需要调用相应的接口就行了,这个值得仔细参考。
下面来说说V3中的证书。只要搞明白这些概念,集成微信支付就会so easy了。
微信支付中有三个东西:
1、 商户证书,由商户自己生成并下载(需下载微信提供的证书生成工具);
2、 平台证书,微信提供了接口进行下载;
3、 V3密钥,由商户自己进行配置,32位;
这几个东西作用如下:
在支付过程中,实际主要解决的就是两个问题:身份识别和数据防篡改。
身份识别就是无论我们和微信支付中心通讯,还是反向,都要认为对方是真实的身份,而不是假冒的。
数据防篡改就是订单金额别被改成1分钱就行。
这也是数字证书在解决的问题,所以,采用了这么多的证书也就容易理解了。
以Native支付为例进行说明,如果集成微信支付,核心就是两个内容:发送支付请求,支付结果回调;
第一步:服务端调用微信支付接口,从而获取支付的code_url(code_url是一个支付链接,可通过第三方工具生成二维码,微信扫一道即可调起支付);
这个过程实际是一个数据上行过程,我们将数据传递给微信支付中心,并由微信支付中心生成支付链接,此时,微信支付中心需要识别我们的身份,确保身份没有被冒用。
所以,需要我们进行签名,签名时需要商户证书的私钥;这样,我们就使用到了第一个东西,商户证书;
第二步,支付结果回调
当终端用户支付成功之后,微信支付接口会调用第一步所带的回调地址告知我们钱已收到,可以继续了后续的操作了。
同样,此时我们也需要验证一下,这个回调方是不是微信支付,加入毛用了,有可能造成我们财产损失,因此我们需要对发来的数据进行验签,验签时需要微信支付证书的公钥;这就使用到了前面提到的第二个证书。
但微信支付证书系统并不会直接给你,需要自行下载。好在微信的大礼包都包括了。
第三步:解密
再看这句话,意思就是回调的数据中,关键数据被加密了,当服务端收到回调数据后,验签也成功了,ok,开始对关键数据解密,解密的密钥就是配置的:API V3密钥;
这是我们就使用到了上面所说的第三个内容。
至此微信支付也就完成了。
最后:
商户证书需要用户在商户平台配置,配置完成后会自动下载证书到本机,实际看上面的内容,就是需要证书的私钥;
而微信支付平台证书是需要通过接口来下载,下载后存储本地,但这里有个问题:这个证书可能是多个,所以每次通讯的时候都需要从请求头信息中把证书的序列号拿出来,在验签之前进行比对,如果证书序列号不对,则重新下载。
微信官方文档是这样说的:
好了,开始集成微信支付吧。