微信支付HTTPS服务器证书的根证书将于2018-08-23日到期,微信支付计划于2018-05-29日更换服务器证书。若商户服务器上没有部署新的根CA证书,将可能导致你的下单、退款等功能无法正常使用。现在需要验证商户服务器是否支持,现在说一下沙箱环境下的接口验证。
一、商户服务器环境说明
服务器:阿里云centos7
开发环境:Java1.7
二、验证步骤
1、微信支付已经将新的服务器证书部署到了沙箱域名(apitest.mch.weixin.qq.com), 如果使用沙箱环境的接口能调用成功,通常表明客户端支持微信支付新的服务器证书。
请求Url:https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey
请求方式:POST
请求格式:XML
请求参数:商户号 mch_id 、随机字符串 nonce_str 、签名 sign
2、参数获取
商户号(mch_id):是微信支付分配的微信商户号,
随机字符串(nonce_str ):是随机字符串,不长于32位,可以通过微信支付api提供的工具类获取:RandomUtil.getRandomStringByLength(32)
签名(sign ):需要通过| 签名生成算法 |获取到。具体办法:
假如传送的参数如下:
mch_id: 10000100
nonce_str: ibuaiVcKdpRxkhJA
说明:就需要这两个参数就行了
对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
stringA="mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA";
通过MD5拼接API密钥:微信支付api提供了MD5的工具类
String stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d"; //注:key为商户平台设置的密钥key
String sign = MD5Util.MD5Encode(stringSignTemp).toUpperCase();
这样就获取到了签名sign.
现在需要去验证签名sign是否正确(签名校验工具):
签名验证成功后,通过ssh工具登录到阿里云centos7服务器,通过如下命令进行post提交,验证商户服务器是否支持新的证书
echo '<xml><mch_id>商户号</mch_id><nonce_str>随机数</nonce_str><sign>签名</sign></xml>'|curl -X POST -H 'Content-type:text/xml' -d @- https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey
如果返回如下内容:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[ok]]></return_msg>
<sandbox_signkey><![CDATA[3d9949cd376d1271834d33b5013dbfe9]]></sandbox_signkey>
</xml>
表示商户服务器支持新的证书。