关于微信支付V3 更新《企业打款到零钱》至《商户转账到零钱》

如题,大概是今年4、5月份开通“微信代付”也就是商户平台的钱通过接口转账到用户余额里这个功能,更新了一版,更新完之后接入方式与之前完全分离,也就是完全不一样了。本文主要详细介绍下关于官方推荐的包 wechatpay 具体如果使用,官方文档有些脑残,让人猜来猜去。

首先我们进入商户平台 账户中心 -> API安全

关于微信更新《企业打款到零钱》至《商户转账到零钱》
如果此处显示未申请,先按照步骤申请,申请完之后你会获取到一个压缩包,压缩包中会有两个文件
一个 apiclient_cert.pem 为了防止乱这里给他起别名 “文件A” , 另外一个 apiclient_key.pem 文件起别名 “文件B”

如果已申请则是下方图片,去程序里找这两个文件

关于微信更新《企业打款到零钱》至《商户转账到零钱》

然后我们去设置 apiv3 秘钥,一个32位随机数,按照指示设置即可,我们这个这个秘钥起别名 “字符串A”

关于微信更新《企业打款到零钱》至《商户转账到零钱》

然后点击 账户中心 -> 商户信息 获取商户号 我们起别名 “字符串B”

关于微信更新《企业打款到零钱》至《商户转账到零钱》

然后下一步来阅读以下官方推荐的轮子 wechatpay(叫啥无所谓,我叫习惯了),然后我们安装上 composer require wechatpay/wechatpay
注意这个轮子要求:
Guzzle 7.0,PHP >= 7.2.5
Guzzle 6.5,PHP >= 7.1.2
安装完之后其他不用看,先去看下载平台证书,点进去

关于微信更新《企业打款到零钱》至《商户转账到零钱》

然后到这个页面,点击这里

关于微信更新《企业打款到零钱》至《商户转账到零钱》

然后进入下一个页面,介绍工具如果使用,使用工具之前确定你已经安装好这个轮子,他生成的方式有很多我采用的是第二个
关于微信更新《企业打款到零钱》至《商户转账到零钱》
详细介绍下生成方式,首先我们切换到我们项目的 vendor/bin 文件夹下,你会看到一个 CertificateDownloader.php 这个文件,说明刚轮子就安装对了。
执行命令之前我们还需要获取另外一个字符串 商户API证书序列号 执行以下代码即可获得,我们起名:“字符串C”

$str = openssl_x509_parse(file_get_contents(文件B的相对路径或是绝对路径));
return $str['serialNumberHex'];

然后切换到 vendor/bin 文件夹下 执行

php -f CertificateDownloader.php -- -k  秘钥A -m 字符串B -f 文件B绝对路径 -s 字符串C -o 要生成的证书位置的绝对路径

执行之后我们会在刚才设置的路径上获得一个.pem结尾的文件,这里起名 “文件C”,至此我们的准备工作已全部做完,然后我们去看轮子的接入文档 如下图

关于微信更新《企业打款到零钱》至《商户转账到零钱》

详情解析,如下

<?php

require_once('vendor/autoload.php');

use WeChatPay\Builder;
use WeChatPay\Crypto\Rsa;
use WeChatPay\Util\PemUtil;




$merchantId = '字符串B';

//注意此处一定要按照“file:///www/wwwroot/...pem”这种格式写,不然报错
$merchantPrivateKeyFilePath = 'file://'.'文件B的绝对路径'; 
$merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);


$merchantCertificateSerial = '字符串C';

//注意此处一定要按照“file:///www/wwwroot/...pem”这种格式写,不然报错
$platformCertificateFilePath = 'file://'.'文件C的绝对路径';
$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' => '小程序appid', //因为我这里接的是小程序业务绑定的用户
    'out_batch_no' => '订单号',
    'batch_name' => '佣金提现',
    'batch_remark' => '佣金提现',
    'total_amount' => '订单金额' * 100,
    'total_num' => 1,
    'transfer_detail_list' => [
       [
           'out_detail_no' =>'子订单号',
           'transfer_amount' => '订单金额' * 100,
           'transfer_remark' => '佣金提现',
           'openid' => '用户openid',
       ]
    ],
]]);

if($resp->getStatusCode() != 200){
    throw new RequestException("审核提现失败,请联系技术人员");
}

至此算是完成了,本人草草整理了个文档,方便被微信官方文档看的头疼的大家也方便自己看,如有错误或者哪里不清楚感谢留言指出

本作品采用《CC 协议》,转载必须注明作者和本文链接
从来不存在被埋没的努力。
本帖由系统于 1年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 13

获取字符串3出现false是什么原因,求大佬帮忙

1年前 评论
hard (楼主) 1年前
GULY (作者) 1年前
Yeardley 1年前

easywechat应该会更新吧

1年前 评论
hard (楼主) 1年前
我爱大可乐 (作者) 1年前

微信官方V3,php8.1,我们已经在使用了,如果安装出现问题,可以联系交流

1年前 评论
hard (楼主) 1年前
cighsen02 (作者) 1年前

你好,请问一下,微信企业转账到银行卡功能 是关闭了吗?

7个月前 评论

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