API安全机制简介

更新时间:2023.09.13

以下所述针对V3版本API

# 安全机制

微信支付使用商户的消息签名验证商户的身份。如果一个请求不包含签名或者签名验证失败,微信支付将返回身份验证错误。它背后的技术是:数字签名技术。

数字签名(亦称公钥数字签名)是一种独特的数字串,只能由信息发送者生成,且无法被他人伪造。它有效地证明了发送者发送信息的真实性。数字签名类似于纸上的普通物理签名,但采用了公钥加密技术来实现,用于验证数字信息的真实性。数字签名系统通常包含两种互补操作:一种用于生成签名,另一种用于验证签名。

# 商户请求微信支付

每个商户都拥有自己的商户API证书私钥,在发送请求时,商户需要使用这个私钥对消息进行签名。 当微信支付侧收到请求后,会使用对应的商户API证书公钥对签名进行验证(即验签)。只有当验签成功后,微信支付才会确认消息发送者的身份是真实的。

如果有敏感字段需要上送,则用微信支付的平台证书公钥对字段进行加密。微信支付收到后,会使用平台证书私钥解密。

示意图如下: 图片

顺序为:

  1. 商户构造原始请求。
  2. 商户使用平台证书公钥对请求中的敏感字段进行加密,得到新的请求包体,注意是对敏感字段加密,而非整个原始请求,详情见:敏感数据加密
  3. 商户使用商户API私钥对请求包体计算签名,详情见:生成签名
  4. 商户将请求包体和签名上送到微信支付。
  5. 微信支付使用商户API证书公钥对请求包体进行验签。
  6. 微信支付使用平台私钥对请求中的敏感字段进行解密,得到原始请求,随后开始处理业务。

# 微信支付应答商户

微信支付给商户应答时,机制和商户请求微信支付类似,只是签名的私钥换成了微信支付平台私钥,加密的公钥换成了商户API证书公钥。

示意图如下: 图片

顺序为:

  1. 微信支付构造原始应答。
  2. 微信支付使用商户API证书公钥对应答中的敏感字段进行加密,得到新的应答包体。
  3. 微信支付使用平台私钥对应答包体计算签名。
  4. 微信支付将应答包体和签名返回给商户。

商户收到应答后,应使用微信支付平台证书公钥进行验签,以校验应答者的身份真实性。详情见:验证签名

如果应答中包含敏感字段,应使用商户API证书私钥进行解密。详情见:敏感数据加密

# 微信支付回调商户

微信支付回调商户时,与前述略有不同,主要体现在加密和签名的源串不同。

示意图如下: 图片

其顺序为:

  1. 微信支付构造原始请求
  2. 微信支付使用APIv3密钥对原始请求进行加密,得到新的请求包体(注意:APIv3密钥是一个对称密钥,由商户在商户平台设置)
  3. 微信支付使用平台证书私钥对原始请求计算签名
  4. 微信支付将请求包体和签名上送到商户
  5. 商户使用APIv3密钥对请求包体进行解密,得到原始请求
  6. 商户使用平台证书公钥对原始请求进行验签,验签通过后开始处理业务

详细的解密方法见:回调解密

反馈
咨询
目录