1、准备工作,先自行申请微信支付的 商家转账到零钱 功能 网上找找攻略 准备好说明 申请个三四次咋也过审了!
2、其实《微信支付宝整合插件》把各种的方法已经写好了但是没给具体的实现代码,但是在接口处的对外连接实际已经写好了! 下面是我具体的实操讲解!
2.1 修改 /addons/epay/library/Service.php 文件 在最下方新增个方法!
/**
* 商家转账到零钱
* @param $user 用户信息
* @param $order_no 订单编号
* @param $detail_no 交易编号
* @param $money 金额
* @param $remarks 备注
* @param $url 回调地址
* @return bool
*/
public static function transfer($user ,$order_no,$detail_no, $money,$remarks,$url=null)
{
$config = Service::getConfig('wechat');
// 验证参数
if (empty($user) || empty($order_no) || empty($detail_no) || empty($money) || empty($remarks)) {
\think\Log::error('参数不完整');
return false;
}
$transferDetails = [
[
'out_detail_no' => $detail_no, //商家明细单号
'transfer_amount' => intval($money*100), //【转账金额】转账金额单位为“分”
'transfer_remark' => $user['nickname'].date('Y-m-d').'提现'.$money.'元',//【转账备注】单条转账备注(微信用户会收到该备注)
'openid' => $user['openid1'], //【收款Openid】收款Openid
]
];
// 构建请求参数
$params = [
'appid' => $config['wechat']['default']['miniapp_id'],
'out_batch_no' => $order_no,
'batch_name' => $remarks,
'batch_remark' => date('Y-m-d')."提现,金额:".$money,
'total_amount' => intval($money*100),
'total_num' => 1,
'transfer_detail_list' => $transferDetails,
];
if (!empty($url)) {
$params['notify_url'] = $url;
}
$result = Pay::wechat($config)->transfer($params);
return $result;
}
这步我因为我只需要做的是单笔不超过五百的提现功能,所以没有写transfer_detail_list 多条内容! 其实通俗点的理解就是,你需要转出去多少钱,然后同时转给几个人! 然后就在 transfer_detail_list 这个参数里面 拉个明细出来就好了! 这里还是按照我的实际情况走,还是就一笔哈! 需要修改的自行修改就行! 其次就是注意下$result = Pay::wechat($config)->transfer($params); 这个transfer()方法同时对应了 v2 和 v3 支付,但是v2 的接口实际情况下是已经失效了! 所以如果你在V2 的模式下调用 会报错!大概率会在 'appid' => $config['wechat']['default']['miniapp_id'], 这行报错!因为 在V2 的模式下的$config[配置和V3 不一样!
2.2 如何在 控制器中调用该方法!
先进行引用 微信支付 类
use addons\epay\library\Service as PayService;
在_initialize 方法中 加入代码
set_addon_config('epay', ['version'=>'v3'], false);
这个是关键转化点 把我们的微信支付从默认的 V2 转成 V3
然后 在需要的方法中 直接
$tixian = PayService::transfer($user,$order_no,$detail_no,$money,'测试提现');
调用即可! 至于返回了什么 自行参考文档吧!
跳转跳链 商家转账到零钱
2.3 注意事项!
在 微信支付中 产品 商家转账到零钱 页面中 找到
API发起 下面的
接口安全 把你的 ip 加入进去! 否则会报错!
另外就是 支付证书是必须要上传的!