微信小程序商户API证书的常见问题及解决方法

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

(一)【错误码含义】

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

【可能的原因】

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

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

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

c) p12证书与密码不对

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

e)证书文件的内容损坏

  • API证书文件的权限设置不当,程序无法访问
  • 开发人员直接调用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个字符,数字和字母”

本文源于微信小程序开发文档官网,此文仅供大家学习,如有侵权请及时告知删除!


<来客推(www.laiketui.com)是国内知名商城系统及商城网站建设提供商,为企业级商家提供零售商城、B2B2C多用户商城系统、社区团购商城系统、微信分销系统、小程序商城、微分销系统等多端商城网站建设解决方案>

申明:本网站部分文章和图片来源网络编辑,如有侵权及时沟通删除,来客电商原创文章,转载请注明来源。

相关新闻

QR code