微信支付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、登录微信支付商户平台-产品中心,开通付款到零钱。

付款资金

付款到零钱资金使用商户号余额资金。

根据商户号的账户开通情况,实际出款账户有做区别:

  1. 默认情况下,付款到零钱使用商户号基本户(或余额账户)余额。如商户号已开通运营账户,则付款到零钱使用运营账户内的资金。
  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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

不会apiv2哪天弃用了吧。apiv3看起来容易对接了很多,提供官方包还是值得点赞。

1年前 评论
kwok_wah 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!