如果需要转账到用户的零钱里,需要先获取用户的open_id,也就是在公众号里登录过并保存的open_id,然后就可以实现企业付款到零钱的功能了,以下是代码详解:
publicfunctionindex(){
$transfer['payment_id']='202303221552123458';//订单号,可以自定义,但不能重复使用
$transfer['open_id']=session('login_weixin');//用户的open_id
$transfer['real_name']='张三';//用户的真实姓名
$transfer['amount']=0.3;//要付款的金额;
$this-dotransfer($transfer);//调用接口
}
/*
*付款给用户的接口(直接调用即可完成付款)
**/
publicfunctiondotransfer($transfer,$msg=''){
$url=https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers;
$parameters=array(
'mch_appid'=C('APPID'),//绑定支付的APPID
'mchid'=C('MCHID'),//商户号
'nonce_str'=$this-create_noncestr(32),//生成32位的随机字符串,见图1
'partner_trade_no'=$transfer['payment_id'],//商户订单号,不能重复使用
'openid'=$transfer['open_id'],//用户的open_id
'check_name'='OPTION_CHECK',//是否检查姓名
're_user_name'=$transfer['real_name'],//真实姓名
'amount'=bcmul($transfer['amount'],100,0),//企业付款金额,单位为分最低1元
'desc'='分销',//备注
'spbill_create_ip'=strval($_SERVER['SERVER_ADDR']),//服务器I
);
$parameters['sign']=$this-getSign($parameters,C('KEY'));//getSign函数见图2,C('KEY'):商户支付密钥
$xml=$this-arrayToXml($parameters);//函数见图3
$response=$this-postXmlCurl($xml,$url,true);//函数见图4
$result=$this-xmlToArray($response);//函数见图片5
if($result['return_code']=='SUCCESS'){
if($result['result_code']=='SUCCESS'){
$this-success($transfer['payment_id'].'=payment_id付款成功');
returntrue;
}else{
$this-error($result['err_code_des'].'付款失败');
returnfalse;
}
}else{
$this-error('付款失败,微信接口出现异常');
returnfalse;
}
}