由于证书有效期限制和交易安全原因,微信支付会不定期的更换平台证书。微信支付提供了一系列接口,帮助商户后台系统实现平滑的证书更换。 
1. 接口说明 请求URL: https://apihk.mch.weixin.qq.com/v3/global/certificates 
 
2. 请求参数 
3. 返回参数 
正常返回 证书序列号 
serial_no 
string[1,40] 
是 
证书的序列号 
示例值:5157F09EFDC096DE15EBE81A47057A7232F1B8E1 
证书启用时间 
effective_time 
string[1,32] 
是 
启用证书的时间,时间格式为 RFC3339 。每个平台证书的启用时间是固定的。 示例值:2018-06-08T10:34:56+08:00 
证书弃用时间 
expire_time 
string[1,32] 
是 
弃用证书的时间,时间格式为 RFC3339 更换平台证书前,会提前24小时修改老证书的弃用时间,接口返回新老两个平台证书。更换完成后,接口会返回最新的平台证书。 示例值:2018-06-08T10:34:56+08:00 
证书信息 
encrypt_certificate 
object 
是 
证书信息,详细说明见下文 
证书信息 加密证书的算法 
algorithm 
string[1,32] 
是 
加密证书的算法,密钥为API KEY, 需要登录商户平台设置 
示例值:AEAD_AES_256_GCM 
加密证书的随机串 
nonce 
string[1,12] 
是 
加密证书的随机串 示 
例值:61f9c719728a 
加密证书的附加数据 
associated_data 
string[1,32] 
是 
固定值: certificate 
示例值:certificate 
加密后的证书内容 
ciphertext 
string[1,344] 
是 
使用API KEY和上述参数,可以解密出平台证书的明文。证书明文为PEM格式。(注意: 更换证书时会出现PEM格式中的证书失效时间与接口返回的证书弃用时间不一致的情况) 
示例值:Y1IPF0kyRe+aJ7TK6cw08r1g/agxl16o 
下面详细描述证书解密的流程 2、针对“algorithm”中描述的算法(目前为AEAD_AES_256_GCM),取得对应的参数“nonce”和“associated_data”。 
3、使用“key”、“nonce”和“associated_data”对数据密文“ciphertext”进行解密(需要先对ciphertext做base64解码,然后再解密),得到证书内容 
“AEAD_AES_256_GCM”算法的接口细节,请参考 rfc5116 
异常返回 返回状态码 
code 
string[1, 32] 
是 
错误码,枚举值见错误码列表 
示例值:INVALID_REQUEST 
返回信息 
message 
string[1, 256] 
是 
返回信息,如非空,为错误原因 
示例值:参数格式校验错误 
详细的错误描述 
detail 
object 
否 
当code为PARAM_ERROR时返回,详细说明见下 
详细的错误描述 指示错误参数的位置 
field 
string[1, 256] 
是 
当错误参数位于请求body的JSON时,填写指向参数的JSON Pointer 当错误参数位于请求的url或者querystring时,填写参数的变量名 
示例值:#/properties/payer 
错误参数的值 
value 
string[1, 256] 
是 
错误参数的值 
示例值:1346177081915535577 
具体错误原因 
issue 
string[1, 256] 
是 
具体错误原因 
示例值:与ALLOF schema不符 
错误参数的位置 
location 
string[1, 256] 
否 
body:错误参数位于请求body的JSON中 url:错误参数位于请求url中 query:错误参数位于请求的querystring中 
示例值:body 
返回示例 正常示例 
1 { 
 2 	 "data" :   [ { 
 3 			 "serial_no" :   "5157F09EFDC096DE15EBE81A47057A7232F1B8E1" , 
 4 			 "effective_time " :   "2018-06-08T10:34:56+08:00" , 
 5 			 "expire_time " :   "2018-12-08T10:34:56+08:00" , 
 6 			 "encrypt_certificate" :   { 
 7 				 "algorithm" :   "AEAD_AES_256_GCM" , 
 8 				 "nonce" :   "61f9c719728a" , 
 9 				 "associated_data" :   "certificate" , 
 10 				 "ciphertext" :   "sRvt… " 
 11 			 } 
 12 		 } , 
 13 		 { 
 14 			 "serial_no" :   "50062CE505775F070CAB06E697F1BBD1AD4F4D87" , 
 15 			 "effective_time " :   "2018-12-07T10:34:56+08:00" , 
 16 			 "expire_time " :   "2020-12-07T10:34:56+08:00" , 
 17 			 "encrypt_certificate" :   { 
 18 				 "algorithm" :   "AEAD_AES_256_GCM" , 
 19 				 "nonce" :   "35f9c719727b" , 
 20 				 "associated_data" :   "certificate" , 
 21 				 "ciphertext" :   "aBvt… " 
 22 			 } 
 23 		 } 
 24 	 ] 
 25 } 异常示例 
1 { 
 2 	 "code" :   "INVALID_REQUEST" , 
 3 	 "message" :   "Parameter format verification error" , 
 4 	 "detail" :   { 
 5 		 "field" :   "#/properties/payer" , 
 6 		 "value" :   "1346177081915535577" , 
 7 		 "issue" :   "与ALLOF schema不符" , 
 8 		 "location" :   "body" 
 9 	 } 
 10 }  
4. 错误码 SYSTEM_ERROR 
系统错误 
系统异常,请再调用发起查询