Loader

微信支付(V3)的证书

易思捷科技 08-05

微信支付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密钥;

这是我们就使用到了上面所说的第三个内容。

至此微信支付也就完成了。

最后:

商户证书需要用户在商户平台配置,配置完成后会自动下载证书到本机,实际看上面的内容,就是需要证书的私钥;

而微信支付平台证书是需要通过接口来下载,下载后存储本地,但这里有个问题:这个证书可能是多个,所以每次通讯的时候都需要从请求头信息中把证书的序列号拿出来,在验签之前进行比对,如果证书序列号不对,则重新下载。

微信官方文档是这样说的:

好了,开始集成微信支付吧。