如何用PHP实现微信企业付款到零钱接口调用?
- 内容介绍
- 文章标签
- 相关推荐
其实,


一、为何公司付款到零钱是你的痛点?
在实际项目中。常见的痛点包括:
- 不清楚公司付款功能是否已开通,导致调用接口一直报错。
-
签名算法实现错误,返回
Signature verification failed。 - 回调通知处理不当,导致业务状态无法同步。
- 证书管理混乱,HTTPS 请求频繁出现 SSL 错误。
- 金额、使用者标识校验不严,产生重复转账或资金损失。
二、开通公司付款前的准备工作
1. 微信支付商户号及 APIv3 密钥
登录 → 账户中心 → API安全 → APIv3密钥生成并记录下来。
2. 申请公司付款功能
在「产品中心」找到「公司付款」并提交申请。未通过审核前,所有接口将返回 {"errcode":40001。"errmsg":"invalid credential"}。
3. 下载并配置网站证书
在「API安全」页面下载 APIv3 证书放置在服务器安全目录,并确保 PHP 有读取权限。
三、PHP 环境要求与依赖库
- PHP>= 7.1
- CURL
- OpenSSL
四、主要代码实现步骤
4.1 安装 SDK
composer require wechatpay/wechatpay
4.2 创建支付客户端实例
withMerchant
->withWechatPay)
->build;$stack = HandlerStack::create;$stack->push;// Guzzle 客户端
$client = new Client();>
4.3 发起公司付款到零钱请求
post(
说到"https。//api.mch.weixin.qq.com/v3/transfer/batches",]
);// 解析返回结果
$statusCode = $response->getStatusCode;$responseBody = $response->getBody;if {
echo "发起成功:". $responseBody;} else {
echo "发起失败:". $responseBody;}
>
4.4 查询转账批次状态
get(
"https的观点是,//api.mch.weixin.qq.com/v3/transfer/batches/out-batch-no/{$outBatchNo}"
);
echo "查询结果:". $response->getBody;>
五、处理微信异步回调通知
回调地址必须使用 HTTPS 且能公网访问。
六、常见错误与排查技巧
- Error Code: 21000001 – 参数错误: 检查 JSON 参数是否符合官方文档字段顺序及必填项;金额必须为整数且大于等于1分。怎么说呢,
- Error Code: 20028 – 商户余额不足: 登录商户网站确认「基本账户」余额;公司付款会先扣除基本账户余额,再扣除「运营账户」。
- Error Code: 500 – 程序内部错误: 多半是证书方法错误或 OpenSSL 配置不兼容。建议使用 phpinfo 检查 OpenSSL 是否启用,并确认 PEM 文件换行符为 LF。
-
SIGNATURE VERIFICATION FAILED:
① 确认回调 URL 使用了正式域名而非内网 IP;② 时间戳与程序时间相差超过5分钟会导致验签失败;③ 公钥不匹配,请使用最新的
/v3/certificates接口获取最新公钥。 -
CURL SSL handshake failure:
确保 PHP 的
Curl.cainfo/Curl.capath指向程序根证书;或者在 Guzzle client 中显式指定'verify'=> '/path/to/wechatpay_rootca.pem'.
七、完整项目目录示例
.
├── certs/
│ ├── apiclientcert.pem # 商户 APIv3 证书
│ ├── apiclientkey.pem # 商户 APIv3 私钥
│ ├── wechatpayrootca.pem # 微信支付根证书
│ └── wechatpaypublickeyXXXXXX.pem # 动态获取的公钥文件,可缓存至此目录
├── src/
│ ├── Transfer.php # 公司付款业务封装类
│ └── NotifyHandler.php # 回调处理脚本示例
├── vendor/ # Composer 自动加载目录
├── composer.json
└── index.php # 示例入口文件
将上述文件放入服务器后在浏览器访问 /index.php?openid=xxxx&amount=100
八、上线前的必做检查清单
-
已经通过微信官方的公司付款功能审核。
-
所有 PEM 文件权限设置为
-rw------- ,防止泄漏。
-
将回调 URL 加入白名单,并使用可信任的域名证书。
-
在沙箱环境先完成全链路测试,确认签名、解密还有数据库事务一致性。
-
开启日志记录。捕获每一次请求/响应,以便后续审计。
-
设置每日转账上限监控,防止因代码缺陷导致异常批量转账。
其实,


一、为何公司付款到零钱是你的痛点?
在实际项目中。常见的痛点包括:
- 不清楚公司付款功能是否已开通,导致调用接口一直报错。
-
签名算法实现错误,返回
Signature verification failed。 - 回调通知处理不当,导致业务状态无法同步。
- 证书管理混乱,HTTPS 请求频繁出现 SSL 错误。
- 金额、使用者标识校验不严,产生重复转账或资金损失。
二、开通公司付款前的准备工作
1. 微信支付商户号及 APIv3 密钥
登录 → 账户中心 → API安全 → APIv3密钥生成并记录下来。
2. 申请公司付款功能
在「产品中心」找到「公司付款」并提交申请。未通过审核前,所有接口将返回 {"errcode":40001。"errmsg":"invalid credential"}。
3. 下载并配置网站证书
在「API安全」页面下载 APIv3 证书放置在服务器安全目录,并确保 PHP 有读取权限。
三、PHP 环境要求与依赖库
- PHP>= 7.1
- CURL
- OpenSSL
四、主要代码实现步骤
4.1 安装 SDK
composer require wechatpay/wechatpay
4.2 创建支付客户端实例
withMerchant
->withWechatPay)
->build;$stack = HandlerStack::create;$stack->push;// Guzzle 客户端
$client = new Client();>
4.3 发起公司付款到零钱请求
post(
说到"https。//api.mch.weixin.qq.com/v3/transfer/batches",]
);// 解析返回结果
$statusCode = $response->getStatusCode;$responseBody = $response->getBody;if {
echo "发起成功:". $responseBody;} else {
echo "发起失败:". $responseBody;}
>
4.4 查询转账批次状态
get(
"https的观点是,//api.mch.weixin.qq.com/v3/transfer/batches/out-batch-no/{$outBatchNo}"
);
echo "查询结果:". $response->getBody;>
五、处理微信异步回调通知
回调地址必须使用 HTTPS 且能公网访问。
六、常见错误与排查技巧
- Error Code: 21000001 – 参数错误: 检查 JSON 参数是否符合官方文档字段顺序及必填项;金额必须为整数且大于等于1分。怎么说呢,
- Error Code: 20028 – 商户余额不足: 登录商户网站确认「基本账户」余额;公司付款会先扣除基本账户余额,再扣除「运营账户」。
- Error Code: 500 – 程序内部错误: 多半是证书方法错误或 OpenSSL 配置不兼容。建议使用 phpinfo 检查 OpenSSL 是否启用,并确认 PEM 文件换行符为 LF。
-
SIGNATURE VERIFICATION FAILED:
① 确认回调 URL 使用了正式域名而非内网 IP;② 时间戳与程序时间相差超过5分钟会导致验签失败;③ 公钥不匹配,请使用最新的
/v3/certificates接口获取最新公钥。 -
CURL SSL handshake failure:
确保 PHP 的
Curl.cainfo/Curl.capath指向程序根证书;或者在 Guzzle client 中显式指定'verify'=> '/path/to/wechatpay_rootca.pem'.
七、完整项目目录示例
.
├── certs/
│ ├── apiclientcert.pem # 商户 APIv3 证书
│ ├── apiclientkey.pem # 商户 APIv3 私钥
│ ├── wechatpayrootca.pem # 微信支付根证书
│ └── wechatpaypublickeyXXXXXX.pem # 动态获取的公钥文件,可缓存至此目录
├── src/
│ ├── Transfer.php # 公司付款业务封装类
│ └── NotifyHandler.php # 回调处理脚本示例
├── vendor/ # Composer 自动加载目录
├── composer.json
└── index.php # 示例入口文件
将上述文件放入服务器后在浏览器访问 /index.php?openid=xxxx&amount=100
八、上线前的必做检查清单
-
已经通过微信官方的公司付款功能审核。
-
所有 PEM 文件权限设置为
-rw------- ,防止泄漏。
-
将回调 URL 加入白名单,并使用可信任的域名证书。
-
在沙箱环境先完成全链路测试,确认签名、解密还有数据库事务一致性。
-
开启日志记录。捕获每一次请求/响应,以便后续审计。
-
设置每日转账上限监控,防止因代码缺陷导致异常批量转账。

