微信支付V3-商户转账到零钱 功能开发
商家转账到零钱产品介绍【原:企业打款到零钱 升级】
文档链接:pay.weixin.qq.com/wiki/doc/apiv3/o...
企业打款到零钱文档链接:pay.weixin.qq.com/wiki/doc/api/too...
该产品为付款至用户零钱的能力,支持通过API接口付款,或通过微信支付商户平台(pay.weixin.qq.com)网页操作付款。
使用条件
1、商户号已入驻90日且截止今日回推30天商户号保持连续不间断的交易。
2、登录微信支付商户平台-产品中心,开通付款到零钱。
付款资金
付款到零钱资金使用商户号余额资金。
根据商户号的账户开通情况,实际出款账户有做区别:
- 默认情况下,付款到零钱使用商户号基本户(或余额账户)余额。如商户号已开通运营账户,则付款到零钱使用运营账户内的资金。
- 基本户(或上述其他出款账户)的资金来源,可能是交易结算款项(仅基本户),或给账户充值的资金。当出款账户余额不足时,付款将因余额不足而付款失败。
相关账号资料准备
- 商户号
- 商户的私钥文件
- 商户证书的序列号【管理证书查看】
- APIV3密钥 【需要开通】
- 平台证书【需要手动生成】
相关开通操作如下
接入前准备文档:pay.weixin.qq.com/wiki/doc/apiv3/o...
1、登录微信商户平台,进入【账户中心 > API安全 】目录,设置APIV3密钥。
2、登录微信商户平台,进入【账户中心 > API安全 】目录,申请证书。
3、开通产品后,商户进入微信支付【商户平台—>产品中心—>商家转账到零钱—>产品设置】,配置发起方式,开启验密批量API。并配置API 调用的IP 地址。
4、设置免密
代码开发
使用官方composer包:wechatpay-php
github.com/wechatpay-apiv3/wechatp...
github.com/wechatpay-apiv3/wechatp...
使用官方包,下载平台证书
> bin/CertificateDownloader.php
Usage: 微信支付平台证书下载工具 [-hV]
-f=<privateKeyFilePath> -k=<apiV3key> -m=<merchantId>
-s=<serialNo> -o=[outputFilePath] -u=[baseUri]
Options:
-m, --mchid=<merchantId> 商户号
-s, --serialno=<serialNo> 商户证书的序列号
-f, --privatekey=<privateKeyFilePath>
商户的私钥文件
-k, --key=<apiV3key> ApiV3Key
-o, --output=[outputFilePath]
下载成功后保存证书的路径,可选参数,默认为临时文件目录夹
-u, --baseuri=[baseUri] 接入点,默认为 https://api.mch.weixin.qq.com/
-V, --version Print version information and exit.
-h, --help Show this help message and exit.
完整命令示例:
php -f ./bin/CertificateDownloader.php -- -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}
使用composer安装的软件包,可以通过如下命令下载:
composer exec CertificateDownloader.php -- -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}
执行命令如下:
composer exec CertificateDownloader.php -- -k hRICjOe6RwPHMlcsJ53jJoUaoxD4qo56 -m 1615917829 -f /data/www/pem/apiclient_key.pem -s 59935FDB7BB5E52378B43A54AFE673734D0A327A -o /data/www/pem/
// 商户号
$merchantId = config('wechat.mini_program.default.mch_id');
$apiclientKey = config('wechat.mini_program.default.key_path');
$platformCert = config('wechat.mini_program.default.platform_certificate');
// 「商户API证书」的「证书序列号」
$merchantCertificateSerial = config('wechat.mini_program.default.certificate_serial');
// 从本地文件中加载「商户API私钥」,「商户API私钥」会用来生成请求的签名
$merchantPrivateKeyFilePath = 'file://' . $apiclientKey;
$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
// 从本地文件中加载「微信支付平台证书」,用来验证微信支付应答的签名
$platformCertificateFilePath = 'file://' . $platformCert;
$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,
],
]);
//然后构建代付,下方详细参数说明详见 [发起商家转账API](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml "发起商家转账API")
$resp = $instance->chain('v3/transfer/batches')->post(['json' => [
'appid' => 'wxf9caa330f2c19e6d',
'out_batch_no' => 20220810092730,
'batch_name' => '2022年8月用户提现操作单',
'batch_remark' => '2022年8月用户提现操作单',
'total_amount' => 30,
'total_num' => 1,
'transfer_detail_list' => [
[
'out_detail_no' => 20220810092750,
'transfer_amount' => 30,
'transfer_remark' => '提现到账零钱',
'openid' => 'orQfM6OStURprhsj9eg5zrCY58zo',
]
],
]]);
if($resp->getStatusCode() != 200){
throw new RequestException("审核提现失败,请联系技术人员");
}
注意事项:
代码执行转用1分钱失败,因为转账默认最低金额是1元,最低可以调至0.3元
参考资料:
Laravel 实现:博客:关于微信支付V3 更新《企业打款到零钱》至《商户转账到零钱》
本作品采用《CC 协议》,转载必须注明作者和本文链接
:+1:
不会apiv2哪天弃用了吧。apiv3看起来容易对接了很多,提供官方包还是值得点赞。