微信支付 V3 接口涉及到多个密钥,以及安全概念。这里帮大家做了一个梳理。
V3 接口涉及的密钥概念
参考:私钥和证书
商户 API 证书
用途:用于调用所有 V3 接口;
含义:包含商户号,公司名称,商户公钥信息
获取方法:有财务老师在微信商户后台申请。【通过微信提供的工具,填入商户号,公司名称等进行申请】
商户 API 私钥
用途:签名
获取方法:在申请商户 API 证书时,申请工具会生成该私钥。
APIv3 密钥
用途:特定接口(通知,平台证书下载)结果信息中,关键敏感信息的解密
获取方法:商户自定义(32字节),然后配置到商户后台。
注意:该密钥与商户API私钥没有任何关系,设置该密钥也不会导致商户API私钥失效。
微信支付平台证书
用途:响应和通知的验签,敏感信息加密
注意:由于微信存在多个平台证书,我们需要根据序列号,采取对应证书内的公钥来验签
含义:包含微信支付平台的身份信息,商户公钥信息
获取方法:调用接口
主要安全流程
签名
调用微信支付平台v3 API 时,需要使用商户 API 私钥对请求报文进行 SHA-256 with RSA 签名。【签名信息存放于头中】
参考:如何生成请求签名
验签
微信支付平台会对其响应报文,以及通知报文进行 SHA-256 with RSA 签名。作为商户,需要使用微信支付平台证书内的公钥,对签名进行验签。
参考:如何验证签名
敏感信息加解密
商户请求微信:商户使用微信支付平台证书公钥,对敏感信息进行 RSA 公钥加密。
微信返回结果:商户使用商户 API 私钥,对响应的敏感信息密文进行 RSA 解密。
参考:如何加解密敏感信息
平台证书与通知报文解密
针对两个特殊场景【微信平台证书获取接口】,【通知】:我们使用 APIv3 密钥基于 AES-256-GCM 做对称加解密。
参考:如何解密证书和回调报文
国密
为了支持国家信息安全的号召,微信是可以提供支持国密SM2/3/4的v3接口交互的。商户可联系微信技术支持申请。
参考:国家商用密码简介