最佳实践
由于旧证书过期前的5天内,微信支付会同时使用新旧证书,因此为实现新老证书的平滑切换,商户系统需支持多平台证书。
方式1
商户需通过平台证书下载API获取证书,并将其部署到生产环境中。线上服务根据报文头部的证书序列号Wechatpay-Serial找到对应的平台证书,再使用其中的公钥进行签名验证。商户需在旧证书过期前5-10天,完成新证书的部署。
商户也可以选择“惰性加载”的方式实现平滑切换。当没有证书序列号所对应的证书时,调用API获取对应的平台证书,再进行签名验证或。为了提高效率,商户可以在证书有效期内进行适当的缓存。微信支付API v3的Java库wechatpay-apache-httpclient,实现了这种方式。
我们建议:
1. 将获取和部署的过程自动化,并设置定时(如每日)任务,降低证书更新时因人为因素造成商户系统风险。
2. 使用中控服务统一获取和安全存储证书,其他业务逻辑服务使用的证书均来自于该中控服务,或者直接使用中控服务进行签名验证。
操作处理时序图:
方式2
商户也可以选择“惰性加载”的方式实现平滑切换。当业务逻辑服务上没有证书序列号所对应的证书时,调用API获取对应的平台证书,再进行签名验证或敏感信息加密。为了提高效率,商户可以在短时间内进行适当的缓存。
注意:系统中已有的微信支付平台证书在到达有效期后,商户系统应主动将其作废,避免安全风险。微信支付不会使用过期的证书。