微信支付根证书升级,实际更换中遇到的问题在这里整理下来
此处是指导商户更新证书的指导页面,此处需要几点注意的是 证书安装和验证
验证证书使用 纱窗地址https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey
模拟数据可以参考发放普通红包 的 xml信息
验证命令:终端输入
echo '<xml><!--使用普通红包里面的xml信息或自己编写, 不要带xml头信息, 不要直接复制此段话--></xml>'|curl -X POST -H 'Content-type:text/xml' -d @- https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey
返回成功信息如下
<return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[ok]]></return_msg>
其他参数请参考资料1文档
如果返回值为FAIL 则看安装证书部分
安装证书我们使用C/C++的这样可以直接在命令行中运行
查看跟证书命令
openssl version -a
可以看到类似记录 OPENSSLDIR: “/etc/pki/tls”
在运行
openssl s_client -connect api.mch.weixin.qq.com:443 -verify_return_error -CApath $OPENSSLDIR #将OPENSSLDIR更换为上面获得的路径
看是否含有如下信息
depth=3 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root verify return:1 depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA verify return:1 depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = GeoTrust RSA CA 2018 verify return:1 depth=0 C = CN, L = Shenzhen, O = Tencent Technology (Shenzhen) Company Limited, OU = R&D, CN = payapp.weixin.qq.com
如果不上上面 的 Baltimore 和 DigiCert 可能还需要为服务器绑定下host
113.96.240.139 api.mch.weixin.qq.com #电信使用 #157.255.180.139 api.mch.weixin.qq.com #联通使用 #121.51.30.139 api.mch.weixin.qq.com #其他使用
请根据实际情况选用
之后重新查看上面命令运行是否正常
更换跟证书之后 尝试正式环境支付出现SSL的60错误或者提示 Peer certificate cannot be authenticated with known CA certificates
CURLE_SSL_CACERT (60)
Peer certificate cannot be authenticated with known CA certificates.
错误代码地址:libcurl error codes
这个错误是 curl中
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_CAINFO,‘/cacert/DigiCert_Global_Root_CA.pem’);
可以设置
CURLOPT_SSL_VERIFYPEER 为FALSE
或者 CURLOPT_SSL_VERIFYPEER 设置为TRUE,CURLOPT_CAINFO 修改为 Baltimore_CyberTrust_Root.pem 这个证书
由于目前微信证书并未实际切换到对应服务器上 则还是需要保证 host记录是存在的
113.96.240.139 api.mch.weixin.qq.com #电信使用
官方提醒:注意:验收完成后,请及时恢复服务器上的host配置,微信支付服务器证书更新完成后,此处使用的IP会被关停。
目前我只能说等到5月底在将host记录删除掉吧 不知道有没有其他好的办法不用写host
(1148)