当前位置: 首页 > 后端技术 > PHP

微信商户支付给用户零钱和用户银行卡

时间:2023-03-29 16:15:05 PHP

appId;$params['mchid']=$this->mchid;$params['nonce_str']=$this->createNoncestr();$params['partner_trade_no']=$data['out_trade_no'];$params['openid']=$data['openid'];$params['check_name']='NO_CHECK';$params['金额']=$data['total_fee'];$params['desc']='取款';$params['spbill_create_ip']=$_SERVER["REMOTE_ADDR"];$params['sign']=$this->getSign($pa公羊);$postXml=$this->arrayToXml($params);$resXml=$this->postXmlCurl('https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers',$postXml,30,true);$resData=$this->xmlToArray($resXml);如果(!$resData||$resData['return_code']!='SUCCESS'||$resData['result_code']!='SUCCESS')返回假;//var_dump($resData);return$resData;}/*商户支付给用户银行卡out_trade_no国外订单号total_fee操作金额enc_bank_no收款人银行卡号enc_true_name收款人姓名bank_code微信文档获取银行号对应*/publicfunctionpayToBank($data){$params=array();$params['mch_id']=$this->mchid;$params['nonce_str']=$this->createNoncestr();$params['partner_trade_no']=$data['out_trade_no'];$params['enc_bank_no']=$data['enc_bank_no'];$params['enc_true_name']=$data['enc_true_name'];$params['金额']=$data['total_fee'];$params['bank_code']=$data['bank_code'];$params['sign']=$this->getSign($params);$postXml=$this->arrayToXml($params);$resXml=$this->postXmlCurl('https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank',$postXml,30);$resData=$this->xmlToArray($resXml);如果(!$resData||$resData['return_code']!='SUCCESS'||$resData['result_code']!='SUCCESS')返回假;返回$resData;}//功能:生成签名privatefunctiongetSign($Obj){$Parameters=array();foreach($Objas$k=>$v){$Parameters[$k]=$v;}//签名步骤一:按照字典顺序对参数进行排序ksort($Parameters);$String=$this->formatBizQueryParaMap($Parameters,false);//签名步骤2:在字符串String=$String后添加KEY$。“&键=”。$这个->键;//签名步骤3:MD5加密$String=md5($String);//签名步骤4:将所有字符转换为大写$result_=strtoupper($String);return$result_;}///函数:格式化参数,签名过程需要用到私有函数formatBizQueryParaMap($paraMap,$urlencode){$buff="";ksort($paraMap);foreach($paraMapas$k=>$v){if($urlenc)ode){$v=urlencode($v);}$buff.=$k.“=”。$v。"&";}if(strlen($buff)>0){$reqPar=substr($buff,0,strlen($buff)-1);}return$reqPar;}//将数组转为xml格式privatefunctionarrayToXml($arr){$xml="";foreach($arras$key=>$val){if(is_numeric($val))$xml.='<'.$键。'>'。$瓦尔。'';else$xml.="<".$key.">";}$xml.="";return$xml;}//将xml转换为数组privatefunctionxmlToArray($xml){//禁止引用外部xml实体libxml_disable_entity_loader(true);$xmlstring=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);$val=json_decode(json_encode($xmlstring),true);return$val;}//函数:生成一个随机字符串,不超过32个字符privatefunctioncreateNoncestr($length=32){$chars="abcdefghijklmnopqrstuvwxyz0123456789";$str="";对于($i=0;$i<$length;$i++){$str.=substr($chars,mt_rand(0,strlen($chars)-1),1);}return$str;}//发送请求privatefunctionpostXmlCurl($url,$xml,$second=30){$ch=curl_init();//设置超时curl_setopt($ch,CURLOPT_TIMEOUT,$second);curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格验证//设置headercurl_setopt($ch,CURLOPT_HEADER,FALSE);//要求结果为字符串,输出到屏幕上的curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);//设置证书//使用证书:cert和key分别属于两个.pem文件//默认格式为PEM,可以注释curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLCERT,$this->CertPem);//默认格式为PEM,可以注释curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLKEY,$this->KeyPem);//post提交方法curl_setopt($ch,CURLOPT_POST,TRUE);curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);curl_setopt($ch,CURLOPT_TIMEOUT,40);设置时间限制(0);//运行curl$data=curl_exec($ch);//返回结果if($data){curl_close($ch);返回$数据;}else{$error=curl_errno($ch);var_dump($错误);curl_close($ch);返回假;}}}//支付给用户变化$obj=newmchPay();$params=array('out_trade_no'=>date('YmdHis'),'openid'=>'ouD2222222228','total_fee'=>100,);$res=$obj->payToChange($params);?>商户需要使用证书向用户付款,证书的申请可以在商户后台一步步申请。还有,如果一直报签名错误,可以先去签名工具验证签名。如果签名工具中验证签名正确,则很有可能是apikey有问题。在商家后台重新设置apikey,一般会正常。