php教程

超轻量级php框架startmvc

Thinkphp 5.0实现微信企业付款到零钱

更新时间:2020-03-30 10:42:01 作者:startmvc
本文实例为大家分享了Thinkphp5.0微信企业付款到零钱的具体代码,供大家参考,具体内容如

本文实例为大家分享了Thinkphp 5.0 微信企业付款到零钱的具体代码,供大家参考,具体内容如下

【微信支付】企业付款到零钱:官方文档

注意:1,证书路径一定要写绝对路径,且使用函数getcwd()。


function transfer($data){
 //支付信息
 $wxchat['appid'] = WxPayConfig::$appid;
 $wxchat['mchid'] = WxPayConfig::$mchid;
 $webdata = array(
 'mch_appid' => $wxchat['appid'],//商户账号appid
 'mchid' => $wxchat['mchid'],//商户号
 'nonce_str' => md5(time()),//随机字符串
 'partner_trade_no'=> date('YmdHis'), //商户订单号,需要唯一
 'openid' => $data['openid'],//转账用户的openid
 'check_name'=> 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
 'amount' => $data['money']*100, //付款金额单位为分
 'desc' => '微信企业付款到零钱',//企业付款描述信息
 'spbill_create_ip' => request()->ip(),//获取IP
 );
 foreach ($webdata as $k => $v) {
 $tarr[] =$k.'='.$v;
 }
 sort($tarr);
 $sign = implode($tarr, '&');
 $sign .= '&key='.WxPayConfig::$key;
 $webdata['sign']=strtoupper(md5($sign));
 $wget = $this->ArrToXml($webdata);//数组转XML
 $pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';//api地址
 $res = $this->postData($pay_url,$wget);//发送数据
 if(!$res){
 return array('status'=>1, 'msg'=>"Can't connect the server" );
 }
 $content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
 if(strval($content->return_code) == 'FAIL'){
 return array('status'=>1, 'msg'=>strval($content->return_msg));
 }
 if(strval($content->result_code) == 'FAIL'){
 return array('status'=>1, 'msg'=>strval($content->err_code),':'.strval($content->err_code_des));
 }
 $rdata = array(
 'mch_appid' => strval($content->mch_appid),
 'mchid' => strval($content->mchid),
 'device_info' => strval($content->device_info),
 'nonce_str' => strval($content->nonce_str),
 'result_code' => strval($content->result_code),
 'partner_trade_no' => strval($content->partner_trade_no),
 'payment_no' => strval($content->payment_no),
 'payment_time' => strval($content->payment_time),
 );
 return $rdata;
}

//数组转XML
 function ArrToXml($arr)
 {
 if(!is_array($arr) || count($arr) == 0) return '';
 $xml = "<xml>";
 foreach ($arr as $key=>$val)
 {
 if (is_numeric($val)){
 $xml.="<".$key.">".$val."</".$key.">";
 }else{
 $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
 }
 }
 $xml.="</xml>";
 return $xml;
 }



//发送数据
 function postData($url,$postfields){
 $ch = curl_init();
 $params[CURLOPT_URL] = $url; //请求url地址
 $params[CURLOPT_HEADER] = false; //是否返回响应头信息
 $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
 $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
 $params[CURLOPT_POST] = true;
 $params[CURLOPT_POSTFIELDS] = $postfields;
 $params[CURLOPT_SSL_VERIFYPEER] = false;
 $params[CURLOPT_SSL_VERIFYHOST] = false;
 //以下是证书相关代码
 $params[CURLOPT_SSLCERTTYPE] = 'PEM';
 $params[CURLOPT_SSLCERT] = getcwd().'/plugins/payment/weixin/cert/apiclient_cert.pem';//绝对路径
 $params[CURLOPT_SSLKEYTYPE] = 'PEM';
 $params[CURLOPT_SSLKEY] = getcwd().'/plugins/payment/weixin/cert/apiclient_key.pem';//绝对路径
 curl_setopt_array($ch, $params); //传入curl参数
 $content = curl_exec($ch); //执行
 curl_close($ch); //关闭连接
 return $content;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

thinkphp5.0微信企业付款到零钱 thinkphp微信企业付款到零钱 php微信企业付款到零钱