logo科技微讯

微信支付商户 API 证书、平台证书、APIv3 密钥、商户 APIv2 密钥的区别

作者:科技微讯
日期:2024-07-22
📝 笔记

商户 API 证书

商户 API 证书是开发者申请的,申请后将获得公钥、私钥。私钥是用来签名的,有两个地方需要用它来签名:

  • 商户服务端调用微信支付 API v3 所有接口都需要使用该私钥对请求参数进行签名;
  • 前端(公众号网页小程序等)拉起微信支付时,也要用这个私钥对请求参数进行签名;

微信支付收到商户的请求(来自服务端的请求或前端的请求)后,会用公钥计算一个签名,并和商户用私钥计算的签名对比,如果两个签名一样,就说明请求是合法的。

商户 API 证书中的私钥其实还有一个用途:调用微信支付 API v2 的部分接口时,也需要用它对请求参数进行签名,但目前微信支付 API 大部份都是 v3 接口了,所以这个用途频率较低。

平台证书

前面的商户 API 证书是商户自己申请的,而这个平台证书顾名思义,是微信支付申请的,会自动分配给商户。

另外,商户申请的 API 证书有公钥、私钥,而平台证书没有私钥,只有公钥。私钥是微信支付平台保存的,不会公开给商户,就好象商户 API 证书中的私钥也只有商户知道,微信支付只能拿到公钥部分。

证书常被视为公钥的载体,因为它是分发和验证公钥的标准方式,所以有时候证书和公钥这两个词会混着用,令人费解。按照官方的说法,平台证书包含了微信支付平台的身份标识和公钥信息。

我们向微信支付发起 API 请求,对方会用我们的公钥验证请求的合法性。反过来,微信支付向我们返回的数据,我们就要用平台证书中的公钥对数据进行验证。

平台证书无法在微信支付的网页后台下载,需要通过下载平台证书接口获取。

APIv3 密钥

按照官方的说法,调用 APIv3 的下载平台证书接口、处理回调通知中报文时,要通过该密钥来解密信息。

所以,前面的商户 API 证书、平台证书都是用来计算签名的,并通过签名的对比确认请求的合法性,而 APIv3 密钥不是用来计算签名的,而是用来解密的,解密微信支付返回的数据。

没错,微信向我们返回数据时,不仅计算了签名,还加密了数据。我们应该首先通过平台证书计算签名验证微信的合法性,然后使用 APIv3 密钥解密返回的数据。

商户 APIv2 密钥

商户 APIv2 密钥和 APIv3 密钥的作用不同,而是和商户 API 证书的作用相同,都是用来对请求进行签名的。

商户 API 证书属于非对称签名技术,商户 APIv2 密钥属于对称签名技术。非对称更安全,所以 APIv3 一律使用非对称,部分对安全性要求较高的 APIv2 接口也使用非对称(即商户 API 证书)进行签名,前面也提了。

如果你只使用 APIv3 接口,则不需要设置商户 APIv2 密钥,只需设置商户 API 证书。

donation赞赏
thumbsup0
thumbsdown0
暂无评论