$cash = Db::name('cash')->where('id', $id)->find();
Db::startTrans();
try {
$order_no = $cash['order_no'];
$wxpay = new Wxpayv2();
$parm = [
'order_no' => $order_no,
'openid' => $cash['openid'],
'money' => $cash['real_money']
];
if(!empty($cash['type'])){
$bank_info=Db::name('bankcard')->where('id',$cash['bc_id'])->find();
$parm['enc_bank_no']=$bank_info['enc_bank_no'];// 收款方银行卡号
$parm['enc_true_name']=$bank_info['enc_true_name'];;
$parm['bank_code']=$bank_info['bank_code'];
}
$res = $wxpay->getCash($parm,$cash['type']);
write_log($res);
if ($res['result_code'] != 'SUCCESS') {
Db::name('cash_error_log')->insert([
'user_id' => $cash['user_id'],
'openid' => $cash['openid'],
'order_no' => $order_no,
'money' => $cash['real_money'],
'error' => $res['err_code_des'],
'status' => 1,
'create_time' => times()
]);
return json(['status' => 202, 'msg' => '打款失败']);
}
$insertData = [
'user_id' => $cash['user_id'],
'table' => 'cash',
'table_id' => $id,
'money' => $cash['real_money'],
'from' => '打款',
'type' => 2,
'create_time' => date('Y-m-d H:i:s'),
];
Db::name('balance_log')->insert($insertData);
Db::name('cash')->where('id', $id)->update(['is_payment'=>1,'pay_time'=>times()]);
Db::commit();
} catch (Exception $e) {
Db::rollback();
write_log('打款失败'.$cash['user_id'].'-' .$cash['real_money'].':'.date('Y-m-d H:i:s'));
$arr = ['status' => 202, 'msg' => '打款失败'];
return json($arr);
}
//封装提现方法
function getCash($parm, $type = 0)
{
if (empty($parm['order_no']) || empty($parm['money']) || empty($parm['openid'])) {
return false;
}
$arr = array();
$arr['nonce_str'] = $this->getRandChar(24);//随机字符串,不长于32位
$arr['partner_trade_no'] = $parm['order_no'];//商户订单号
$arr['amount'] = $parm['money'] * 100;//付款金额,单位为分
$arr['desc'] = '团长分成';//描述信息
if (!empty($type)) {
$arr['mch_id'] = $this->config['mch_id'];
$arr['enc_bank_no'] = $parm['enc_bank_no'];// 收款方银行卡号
$arr['enc_true_name'] = $parm['enc_true_name'];;
$arr['bank_code'] = $parm['bank_code'];
$url = 'https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank';
} else {
$arr['mchid'] = $this->config['mch_id'];
$arr['mch_appid'] = $this->config['appid'];
$arr['openid'] = $parm['openid'];
$arr['check_name'] = 'NO_CHECK';//是否验证用户真实姓名,这里不验证
$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
}
$arr['sign'] = $this->getSign($arr);//签名
write_log($arr);
$var = $this->arrayToXml($arr);
$xml = $this->postXmlCurl($var, $url);
return $this->xmlToArray($xml);
}
参考网址:
企业付款到零钱官方文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
企业付款到银行卡官方文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay_yhk.php?chapter=24_2
IP地址不允许调用接口处理:https://zhuanlan.zhihu.com/p/364139091