ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

微信支付-企业付款到零钱

2022-01-05 18:38:28  阅读:253  来源: 互联网

标签:__ setopt 证书 微信 零钱 付款 curl dirname CURLOPT


微信支付API文档中,关于企业付款到零钱的api的使用讲解,大致能够了解接口的调用规则,不过在过程中有些坑还是难以避免。
配置好参数后,使用curl调起接口,如下

		$curl = curl_init();
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_URL, 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers');
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, Array("Content-Type:text/xml; charset=utf-8"));
        curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($curl);
        curl_close($curl);
问题一 :证书报错

打印结果提示:CA_ERROR: 商户API证书校验出错
查看文档后,知道提现、退款相关接口调用,需要是有微信支付的api证书。到微信支付管理平台查看,发现已申请过证书,然后找到了之前使用证书的项目,把php用到的两个pem文件放到项目中(注:尽量不要放在安全的目录中
pem证书有了,怎么使用呢?找了半天也没在微信支付的文档中找到使用方法。翻看之前的项目,发现是在curl中传入了pem的路径,c+v后,代码如下

$curl = curl_init();
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl,CURLOPT_SSLCERTTYPE,'PEM');
        //此处没有使用__DIR__拼接文件路径,而是使用了多个dirname,是为了构造绝对路径
        //有文档说,此处最好使用绝对路径,不然有时候会有意外的错误
        curl_setopt($curl,CURLOPT_SSLCERT,dirname(dirname(dirname(__FILE__))).'/apiclient_cert.pem');
        curl_setopt($curl,CURLOPT_SSLKEYTYPE,'PEM');
        curl_setopt($curl,CURLOPT_SSLKEY,dirname(dirname(dirname(__FILE__))).'/apiclient_key.pem');
        curl_setopt($curl, CURLOPT_URL, 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers');
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, Array("Content-Type:text/xml; charset=utf-8"));
        curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($curl);
        curl_close($curl);

运行代码后,报如下错误

could not load PEM client certificate, OpenSSL error error:140AB18E:
SSL routines:SSL_CTX_use_certificate:ca md too weak, 
(no key found, wrong pass phrase, or wrong file format?)

经过各种渠道了解后 告知是微信端商户支付证书hash算法使用了MD5而MD5已被openssl1.0.0开始就废弃且不被支持。
出现这种错误,可能是因为之前的证书较老,使用了MD5加密生成。在微信支付平台重新申请生成新的证书后,问题解决。

问题二 :

标签:__,setopt,证书,微信,零钱,付款,curl,dirname,CURLOPT
来源: https://blog.csdn.net/u012830303/article/details/122328858

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有