申请流程及配置
申请以及配置流程参考官方:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_6_1.shtml
根据官方的指导,我们获取到了证书文件
我们接下来的描述中的两个文件,cert称为证书,key称为私钥。
安装composer
紧接着我们安装composer,为接下来使用微信支付的SDK做好基本铺垫。
-
下载 Composer.phar 文件
打开SSH,连接服务器,输入命令:php -r “readfile(‘https://getcomposer.org/installer’);” | php
进行composer的安装。 -
全局安装
将下载好的 Cooposer.phar 移动至 /usr/local/bin改名为 Composer , 这样就实现了全局调用mv composer.phar /usr/local/bin/composer
-
切换镜像
国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
切换成原来的镜像
composer config -g repo.packagist composer https://repo.packagist.org
这里推荐阿里云。
-
基本命令
查看版本号composer -v
新增
composer install
更新
composer update
设置忽略版本匹配
composer install --ignore-platform-reqs
composer update --ignore-platform-reqs
卸载依赖包
composer remove "厂商/类库"
升级命令
composer self-update
升级到某个版本
composer self-update --版本
- 注意
在新安装的 PHP 环境下 putenv() 和 proc_open() 函数默认处于禁用状态,那么在composer安装后需要把 putenv() 和 proc_open() 禁用函数去掉或注释掉,否则在查看 Composer 或在使用 Composer 时会有警告提示及报错信息。
以上安装流程参考:https://blog.csdn.net/qq_38874883/article/details/124887091
于是我们继续看到微信部分。
安装微信SDK
微信支付V3 SDK说明以及源码:https://github.com/wechatpay-apiv3/wechatpay-php
SSH执行安装命令:composer require wechatpay/wechatpay
接下来会把所有依赖要用到的东西,都会自动安装完成。
生成公钥
生成方案参考:https://blog.csdn.net/Yisermorn/article/details/127304729
这里我就不多说了,里面很详细。
最后我们得到一个长串字符的pem文件,就是我们的公钥。
开始敲代码
兄弟们,我们开始我们的主要内容了
我们用H5支付作为案例(所有支付方式都是同一套代码,同一套SDK)
//这里一定要带上,加载微信支付的SDK
use WeChatPay\Builder;
use WeChatPay\Crypto\Rsa;
use WeChatPay\Util\PemUtil;
use WeChatPay\Formatter;
use WeChatPay\Crypto\AesGcm;
//支付下单通用方法,其他支付方式基本改API接口地址就行了
//H5 API接口文档:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml
//订单编号,钱,jsapi支付用的openid参数(H5支付可以无视)
public function wx_pay($orderid,$money,$openid=''){
// 设置参数
// 商户号
$merchantId = '163XXXXXXX';
// 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名
$merchantPrivateKeyFilePath = 'file:///www/wwwroot/xxxxxxx/xxxxx/xxxxx/apiclient_key.pem';//这里是私钥文件路径
$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
// 「商户API证书」的「证书序列号」
$merchantCertificateSerial = '2A0B88xxxxxxxxxxxxxxxxxxxxxxxx';//微信支付账户中心里的证书序列号,这个不多说了,去找就看到了。
// 从本地文件中加载「微信支付平台证书」,用来验证微信支付应答的签名
$platformCertificateFilePath = 'file:///www/wwwroot/xxxxx/xxxxxx/xxxxxxxxx/wechatpay_3B46AC2A44B23FFA7E6F23404BB720D932C34A3A.pem';//这里是公钥文件路径
$platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);
// 从「微信支付平台证书」中获取「证书序列号」
$platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);
// 构造一个 APIv3 客户端实例
$instance = Builder::factory([
'mchid' => $merchantId,
'serial' => $merchantCertificateSerial,
'privateKey' => $merchantPrivateKeyInstance,
'certs' => [
$platformCertificateSerial => $platformPublicKeyInstance,
],
]);
// 发送请求
//$resp = $instance->chain('v3/certificates')->get(
//['debug' => false] // 调试模式,https://docs.guzzlephp.org/en/stable/request-options.html#debug
//);
//echo $resp->getBody(), PHP_EOL;
try {
if($openid==''){
//这里我判断了支付方式,有openid传过来,我就用jsapi支付,没有就用H5支付
$resp