关于thinkphp 微信v3 支付
最近做到了支付,忽然发现微信更新到了v3版本,然后看了一下文档,懂之前云里雾里,懂之后,原来是这样~
首先准备的工作是各种配置信息, 我做的是h5支付,所以只会介绍我用到的东西
1 $appId 微信的 appId
2 $merchantId 支付所需的商户号 merchantId
3 $merchantSerialNumber 商户证书序列号 merchantSerialNumber (设置API证书)
4 $apiV3 商户api密钥 apiV3 (账号中心->API安全->APIv3密钥中设置)
5 $merchantPrivateKey 商户私钥 merchantPrivateKey (也就是apiclient_key.pem文件)
6 $wechatpayCertificate 支付平台证书 wechatpayCertificate (额外生成,以下会说明)
关于wechatpayCertificate 也就是证书需要额外生成 如果电脑有java环境的可以直接下载 java包
下载后运行
java -jar CertificateDownloader-1.1.jar -f 商户私钥文件路径 -k 商户api密钥 -m 商户号 -o 证书保存路径 -s 商户证书序列号
如果没有的话也可以用php 的。我试了好多次没成功,就不去管了 官方链接
这里需要注意一下不要:-c 参数 非必需参数
运行后会得到一个文件
文件名大概是 wechatpay_250393205B4A9CC12900B44B65E04B9751CE95.pem 之类的 对应上面的 配置信息 6 支付平台证书
到此配置信息就准备完成了,截下来是配置环境,我用的是thinkphp6 php是7.2
首先是安装官方composer 官方git链接指引
也可以直接运行 composer require wechatpay/wechatpay-guzzle-middleware
/**
* 获取平台证书 官方文档说明,会不定期更换证书,所以有个接口去自己请求,刚刚java生成的是也可以用,不过建议之后换成接口请求
*
* @return void
*/
public static function getCertificates()
{
$url = 'https://api.mch.weixin.qq.com/v3/certificates'
$url_parts = parse_url($url);
$http_method = 'GET';
$nonce = '随机字符串';
$timestamp = time();
$serial_no = $merchantSerialNumber ;
$body = '';
$canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));
$message = $http_method . "\n" .
$canonical_url . "\n" .
$timestamp . "\n" .
$nonce . "\n" .
$body . "\n";
openssl_sign($message