1. 在使用APIV3接口时,由于回调报文是以密文的形式发送的,那么用户在接收到密文后需进行解密才可以得到明文的业务数据。但进行解密时是需要获取到回调报文对应商户号设置的APIV3Key才可以进行解密,由于收到的回调报文是密文无法直接得知对应关系来获取APIV3Key。

  2. 如果用户是一个商户号对应一个回调通知地址的话那还比较好能够直接得知对应关系,但是在拥有多个商户号且回调通知地址均是同一个的情况下,很多用户都不知道如何去区分回调归属于哪个商户号,那么也就无法获取到对应的APIV3key来解密导致无法开展后续的业务流程,往往会耗费很多时间还无法解决问题。

  3. 其实这里微信侧是有提供一个标识来区分回调报文归属于哪个商户号的。

    在收到的回调报文HTTP头部Wechatpay-Serial中有包含微信支付平台证书序列号,且每个商户号自身的微信支付平台证书序列号都是微信侧唯一的,在这个前提下,那么方法就来了。

    首先统一把所有商户号的微信支付平台证书序列号和商户号都进行对应存储起来,在收到回调报文时通过HTTP头部Wechatpay-Serial中的微信支付平台证书序列号与现有已经存储好的微信支付平台证书序列号进行对比就可以得到回调对应的商户号从获取到对应的APIV3Key来进行解密了。

    平台证书如何获取?

    下载地址 https://github.com/wechatpay-apiv3/CertificateDownloader

image-1678956913843
image-1678956937083

以window电脑为例,本地要有jdk环境,cmd命令行启动。
官网上有参数的说明,即:

java -jar CertificateDownloader-1.2.0-jar-with-dependencies.jar 
-k 微信支付V3ApiKey 
-m 商户号 
-f apiclient_key.pem路径 
-s 商户平台证书序列号 
-o 生成路径

image-1678957334756

如图蓝色部分就是平台证书的序列号,这个信息需要自己维护到支付配置中去
且这个平台证书序列号使用期限为5年