1.php需要开启扩展
- php_fileinfo
- php_zip
- php_openssl
- php_sodium
2.根据php版本操作微信支付官方文档
开清楚文档必须所要内容
运行 SDK 必需以下的证书和密钥:
1.商户号(1663526***)
1.商户 API 私钥 (apiclient_key.pem)
2.商户 API 证书的证书序列号 (1DE718B9DB31D87EB6463827FF31E7**********) 40位
3.APIv3 密钥 (POIUYTREWASDFFGGHJKLQW**********)32位
4.微信支付平台证书 (重点重点 需要自己拿私钥+序列号+商户号获取)
由于 PHP-FPM (opens new window)进程模型限制,PHP SDK 不支持自动获取和更新微信支付平台证书。 你可以使用 SDK 自带的工具 (opens new window)下载微信支付平台证书。
composer exec CertificateDownloader.php -- -k POIUYTREWASDFFGGHJKLQW********** -m 1663526*** -f apiclient_key.pem -s 1DE718B9DB31D87EB6463827FF31E7********** -o file://C:/phpstudy_pro/WWW/
-f 存放的key.pem地址
-o 就是需要下载到本地什么目录下
composer执行的时候报错
Trying 59.36.153.147:443...
* Connected to api.mch.weixin.qq.com (59.36.153.147) port 443 (#0)
* ALPN: offers http/1.1
* ....
一直提示需要ssl 但我有不是自己定义的curl请求 还以为是微信的sdk的bug
去到https://curl.haxx.se/ca/下载最新CA证书
需要修改php的curl的curl.cainfo=指定到上面下载长度CA证书
windows的的路径 \
再次执行平台证书下载就行
$wxConfig = WX_PAY;
$merchantId = $wxConfig['mch_id']; #商户号
$merchantPrivateKeyFilePath = $wxConfig['key_path']; #商户 API 私钥
$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
$merchantCertificateSerial = $wxConfig['serial']; #商户 API 证书的证书序列号
$platformCertificateFilePath = $wxConfig['cert_path'];#支付平台证书
$platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);
// 从「微信支付平台证书」中获取「证书序列号」
$platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);
$instance = Builder::factory([
'mchid' => $merchantId,
'serial' => $merchantCertificateSerial,
'privateKey' => $merchantPrivateKeyInstance,
'certs' => [
$platformCertificateSerial => $platformPublicKeyInstance,
],
]);
$resp = $instance
->chain('v3/pay/transactions/h5')
->post(['json' => [
'mchid' => $wxConfig['mch_id'],
'out_trade_no' => 'js12177525012014070332334',
'appid' => $wxConfig['appid'],
'description' => '测试测试',
'notify_url' => 'https://weixin.qq.com/',
'amount' => [
'total' => 1,
'currency' => 'CNY'
],
'scene_info' =>[
'payer_client_ip' =>'120.79.240.153',
'h5_info' =>[
'type' =>'iOS',
]
],
]]);
echo $resp->getBody(), PHP_EOL;
die;