Home >Backend Development >PHP Tutorial >[PHP]微信红包接口实践说明 CA证书出错 签名异常

[PHP]微信红包接口实践说明 CA证书出错 签名异常

WBOY
WBOYOriginal
2016-06-13 12:28:081625browse

[PHP]微信红包接口实践说明 CA证书出错 签名错误

1. 在微信支付的商户平台,在[API安全]中下载API证书,将下载的证书(apiclient

_cert.pem/apiclient_key.pem/roota.pem)放在服务器上,确定并记录存放路径(2中会用);

?

2. 在php的curl中增加如下设置,其中CURLOPT_SSLCERT/ CURLOPT_SSLKEY/ CURLOPT_CAINFO的中设置路径分别对应1中的三个pem文件:

//因为微信红包在使用过程中需要验证服务器和域名,故需要设置下面两行curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 只信任CA颁布的证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配curl_setopt($ch,CURLOPT_SSLCERT,'/xxx/xxx /apiclient_cert.pem');curl_setopt($ch,CURLOPT_SSLKEY,'/xxx/xxx/apiclient_key.pem'); curl_setopt($ch, CURLOPT_CAINFO, '/xxx/xxx/rootca.pem'); // CA根证书(用来验证的网站证书是否是CA颁布)

(curl设置摘自:http://www.cnblogs.com/kangjin0828/p/4517657.html)

?

3. 借助于微信平台提供的签名接口调试工具:https://pay.weixin.qq.com/wiki/tools/signverify/进行签名的调试,可以根据红包接口自定义参数,需要注意的是,接口里部分参数会是中文,在验证签名步骤是否正确时,最好都设置为英文或数字,确保签名通过后再设置为中文:


?

4. 签名步骤验证通过后,将中文参数设置进去,进行测试,微信红包接口中,中文的编码方式为utf-8,如果确定编码方式已经是utf-8,则不需要encode;

?

5. 在调试过程中,常见错误就是“CA证书出错”和 “签名错误”,解决方式如下:

?

CA证书出错

说明没有设置CA证书或者在curl设置时路径有问题;

?

签名错误

原因一:md5前没有按照接口要求整理数据,如:

key在md5时没有没有按规则排列,在联合密钥key时,要注意整理成: XX&$key=XXX;

原因二:key值要取商户API密钥,如果是首次使用的话,虽然说默认是商户号,但是还是要重新设置一下,这里简单一句,实际调试的时候就是因为这个原因,花了大半天工夫 …(⊙_⊙;)…

?

?

在调试过程中,遇到相同的问题,到网上搜搜,虽然搜到的很多都只是只字片语,但还是会给自己一些启发,希望上述总结能对后来的亲有帮助( *^_^* )

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn