收藏
评论

商户API证书的常见问题及解决方法官方

最常见的错误有以下四种:


(一)

【错误码含义】 

导致nginx未正确解析到证书序列号,logicsvr获取到证书序列为空

【可能的原因】

1. 商户发起请求时没指定API证书

2. 商户发起请求时指定的API证书文件有误

   a) 证书文件路径错误(如:使用curl命令行工具时中少了./ 等)

   b) 证书文件和私钥文件不匹配

   c) p12证书与密码不对

   d) API证书不是微信支付签发的

   e)证书文件的内容损坏 

3. API证书文件的权限设置不当,程序无法访问

4. 开发人员直接调用logicsvr的CGI,请求未经过nginx

【解决办法】

可按下面的步骤排查:

1. 请求中指定API证书,并确认程序有访问API证书的权限

2. 确认pem格式的证书文件(压缩包中的 apiclient_cert.pem )和私钥文件(压缩包中的 apiclient_cert.key)是匹配的。 

   运行命令行 openssl pkcs12 -export -out test.p12 -in ./apiclient_cert.pem -inkey ./apiclient_key.pem -passout pass:test

   能正常生成 test.p12,则说明证书文件和私钥文件是匹配的,且证书文件内容未被损坏

3. 使用p12格式的证书文件时,需要传入正确的密码(默认密码是:mchcode)

4. p12格式的证书文件在windows下可双击打开。如果无法打开,说明文件被损坏。需要找商户号的超管获取正确的证书。

 (apiclient_key.pem文件大小为 1.7k左右, apiclient_key.pem文件大小为 1.5k左右, apiclient_cert.p12文件大小为 2.8k左右)

5. 查看证书的签发者,确认证书文件是微信支付签发的。

   运行命令行 openssl x509 -text -in ./apiclient_cert.pem |grep Issuer |awk -F, '{print $NF}'。

   合法的签发者有两个:

    ① 权威CA签发的证书:CN=MmpaymchCA/emailAddress=mmpaymch@tencent

    ② 微信支付签发的证书:CN=Tenpay.com Root CA

6. 开发人员自测cgi时,必须指定nginx服务器的ip和443端口。nignx负责解析证书信息,并http header传递给logicsvr。


(二)

【错误码含义】 

商户号与API证书不匹配

【可能的原因】

请求报文中的商户号A,但发起请求时却用了商户号B的证书。

【解决办法】

每个API证书中都有商户号信息,不同商户号的API证书文件是独立的,不能混用。

1. 确保请求中指定的API证书,是属于xml报文中商户号的

2. 运行以下命令行,可到查看证书文件中的商户号信息

openssl x509 -text -in ./apiclient_cert.pem |grep Subject |grep -i 'tencent' |awk -F, '{print $1,$NF}'

会有以下两种格式:

① 权威CA签发的证书:Subject: CN=1900006031 L=ShenZhen  (CN字段中内容为mchcode)

② 微信支付签发的证书:Subject: C=CN SN=14767152     (SN字段中内容为merchantId)


(三)

【错误码含义】 

 API证书已经过期

【可能的原因】

请求报文中的商户号A,但发起请求时却用了商户号B的证书。

【解决办法】

API证书的有效期默认为1年,证书过期后,有两种解决办法:

1. 续期证书(过期30天内使用)

2. 更换证书  (更换后的证书有效期为1年)

(特别提醒:1. 证书过期前1个月,平台会多次发送提醒通知超级管理员续期证书。由于商户可能未按通知及时续期证书。 为了给商户预留处理时间,服务器会按比例拦截使用过期证书的请求。 证书到期第一天会有10%的失败,第二天会有20%的失败 , 到第十天100%失败。所以在证书过期的10天内,部分请求会成功,部分请求会被拦截

2. 证书的过期时间以商户平台展示的日期为准。命令行的输出结果并不是实际: openssl x509 -text -in ./apiclient_cert.pem | grep 'Not After' |awk -F' : ' '{print $2}')


(四)

【错误码含义】 

API证书已经作废,不能继续使用

【可能的原因】

商户更换了API证书,但未及时将新证书部署到服务器上,导致程序中仍在使用老证书

【解决办法】

1. 将最新的API证书部署到服务器

2. 商户平台上可以查看到新证书的序列号。运行以下命令行,可查看到证书文件中的序列号。

可先运行第一个命令,若结果为空,再运行第二个命令。

①微信支付自签证书: openssl x509 -text -in ./apiclient_cert.pem |grep Serial    非空时,输出结果为 5-10位数字

② 权威CA签发的证书:openssl x509 -text -in ./apiclient_cert.pem |grep Serial -A 1 |grep -v Serial | tr [a-z] [A-Z] | tr -d :

非空时,输出结果为“40个字符,数字和字母”


最后一次编辑于  2019-04-28
收藏
登录 后发表内容