作用
1、接收到品牌API接口的返回内容,需要使用微信支付公钥进行验签;
2、调用某些含有敏感信息参数(如姓名、身份证号码)的接口时,需要使用微信支付公钥加密后再传输参数。
为了确保品牌商户发起调用正确性、安全性,因此品牌API要求在请求中携带品牌商户申请的微信支付公钥ID用以验证其有效性。
公钥 ID
提供给品牌商户的公钥 ID 由前缀 PUB_KEY_ID_
和原始公钥 ID 组成。其中,原始公钥ID为 32 个数字(0-9)字符组成的字符串。
发起请求
品牌商户通过在 HTTP 头中声明 Wechatpay-Serial
,告知微信支付当前持有的公钥 ID。微信支付将根据此值使用相应的私钥为应答签名,以确保品牌商户能够进行验签。

1Authorization: WECHATPAY-BRAND-SHA256-RSA2048 brand_id="1900009191",nonce_str="593BEC0C930BF1AFEB40B4A08C8FB242",signature="...",timestamp="1554208460",serial_no="1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C"
2Wechatpay-Serial: PUB_KEY_ID_00000000000000000000000000000000
当品牌商户传递 Wechatpay-Serial
时,微信支付会验证其是否正确。当它错误时,微信支付应返回 400 Bad Request
的状态码, code
为 INVALID_REQUEST
。
接收应答和回调
应答和回调中,微信支付使用 Wechatpay-Serial
告知品牌商户系统验证签名使用的公钥 ID。
微信支付使用公钥对应的私钥签名,应答或回调的 HTTP 头示例如下:

1Request-ID: e2762b10-b6b9-5108-a42c-16fe2422fc8a
2Wechatpay-Nonce: c5ac7061fccab6bf3e254dcf98995b8c
3Wechatpay-Signature: CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA==
4Wechatpay-Timestamp: 1554209980
5Wechatpay-Serial: PUB_KEY_ID_00000000000000000000000000000000