这个功能与支付宝的批量付款到支付宝帐号功能类似。但是当前支付宝这个接口已经停止审核了。
当前很多提问平台就用到了这两个平台。比如[来问医生],你提的问题如果被人看了。医生得0.5元,你得0.5元。然后累积够1元后,[来问医生]就会通过微信的企业付款功能给你的微信余额增加1元。
代码调用
use Payment\TransferContext;
use Payment\Common\PayException;
use Payment\Config;
// 生成转款单号 便于测试
function createPayid()
{
return date('Ymdhis', time()).substr(floor(microtime()*1000),0,1).rand(0,9);
}
$wxconfig = [
'app_id' => 'wxa244db59a34996fc', // 公众账号ID
'mch_id' => '1331302101',// 商户id
'md5_key' => 'adslkfjiKQJLAIQLJ393201482333333',// md5 秘钥
'notify_url' => 'http://test.helei.com/pay-notify.html',
'time_expire' => '14',
// 涉及资金流动时 退款 转款,需要提供该文件
'cert_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem',
'key_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_key.pem',
];
// 转款数据
$transData = [
'trans_no' => createPayid(),
'trans_data' => [
[
'serial_no' => createPayid(),
'user_account' => 'otijfvr2oMz3tXnaQdKKbQeeBmhM',// 微信转款时,为用户所关注公众号的openid
'user_name' => '愚不可及',
'trans_fee' => '1',
'desc' => '测试批量转款',
]
],
];
$refund = new TransferContext();
try {
// 微信的企业付款, 仅支持单笔
$type = Config::WEIXIN;
$refund->initTransfer(Config::WEIXIN, $wxconfig);
$ret = $refund->transfer($transData);
} catch (PayException $e) {
echo $e->errorMessage();exit;
}
var_dump($ret);
请求参数
参数 | 参数名 | 参数说明 | 是否必须 |
---|---|---|---|
trans_no | 商户订单号 | 商户订单号,需保持唯一性 | 是 |
trans_data | 转账数据 | 转账数据详细信息,具体内容如下 | 是 |
trans_data数据
参数 | 参数名 | 参数说明 | 是否必须 |
---|---|---|---|
serial_no | 流水号 | 对于微信该参数不需要,但请保留,后期可能支持批量退款需要 | 否 |
user_account | 用户openid | 商户appid下,某用户的openid | 是 |
user_name | 收款用户姓名 | 收款用户真实姓名。 | 是 |
trans_fee | 金额 | 企业付款金额,单位为元 | 是 |
desc | 企业付款描述信息 | 企业付款操作说明信息。 | 是 |
返回数据
参数 | 参数名 | 参数说明 | 是否必须 |
---|---|---|---|
is_success | 是否成功 | 失败会返回错误原因。T:成功 F:失败 | 是 |
error | 错误原因 | 为T时有返回 | 否 |
response | 成功时数据 | 成功时返回的具体数据 | 否 |
response数据
参数 | 参数名 | 参数说明 | 是否必须 |
---|---|---|---|
trans_no | 商户订单号 | 商户订单号,需保持唯一性 | 是 |
trans_id | 微信订单号 | 企业付款成功,返回的微信订单号 | 否 |
payment_time | 微信支付成功时间 | 企业付款成功时间 | 否 |