背景

项目需要直接对接微信支付,实现小程序支付和退款功能,支付不需要证书,但是退款的话需要证书支持

  • 语言:php
  • 开发环境win
  • 测试环境centos
坑点1:路径问题

网上查到比较多的答案是在Linux系统下采用虚拟路径,Windows系统下采用绝对路径,但是在开发的过程中,发现在Windows系统下用绝对路径OK,但是放到测试环境的时候,出错了,报curl:58错误。测试环境改成绝对路径就可以通过用例了。

参考PHP代码:

			//在微信官方提供的demo中的Wxpay.Api.php中的postXmlCurl方法
			//设置证书
			//使用证书:cert 与 key 分别属于两个.pem文件
			curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
			curl_setopt($ch,CURLOPT_SSLCERT, __DIR__ .WxPayConfig::SSLCERT_PATH);
			curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
			curl_setopt($ch,CURLOPT_SSLKEY, __DIR__ .WxPayConfig::SSLKEY_PATH);
坑点2:证书存放目录

证书需要放到一个文件名问cert的文件夹下面,不然还是会报找不到证书的错误

坑点3:微信官方文档提供的OpenSSL命令跑出来的证书有问题
  • 官方提供:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
输出样例
Bag Attributes
    localKeyID: ******************************** 
    friendlyName: Tenpay Certificate
Key Attributes: <No Attributes>


  • 最后正确的命令:openssl pkcs12 -nodes -clcerts -in apiclient_cert.p12 -out apiclient_key.pem
输出样例
Bag Attributes
    localKeyID: **************************************
    friendlyName: Tenpay Certificate
subject=/CN=1245052102/O=**************/C=CN/ST=GuangDong/L=ShenZhen
issuer=/C=CN/O=Tenpay.com/OU=Tenpay.com CA Center/CN=Tenpay.com Root CA
-----BEGIN CERTIFICATE-----
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
-----END CERTIFICATE-----
Bag Attributes
    localKeyID:**********************************
    friendlyName: Tenpay Certificate
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************

官方提供的命令中的-nocerts表示不输出任何证书,修改后的-clicerts表示仅输出客户端证书

具体命令可以看看官网文档的描述:https://www.openssl.org/docs/manmaster/man1/pkcs12.html

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐