php实现微信企业转账功能
本文实例为大家分享了php实现微信企业转账的具体代码,供大家参考,具体内容如下
微信企业转账工具类:
_keys[$key]=$config[$key]; }catch(Exception$e){ thrownewException('参数缺失:'.$key); } } foreach($filesas$file){ try{ $cret_file=$config[$file]; if(is_file($cret_file)){ $this->_cert[$file]=$cret_file; } }catch(Exception$e){ thrownewException('证书错误'); } } } publicfunctiontransfers($parameters){ $this->log($parameters,'SEND_PARAM'); $this->setParameter('mchid',$this->_keys['mch_id']); $this->setParameter('mch_appid',$this->_keys['wxappid']); $must=array( 'openid', 'check_name', 're_user_name', 'amount', 'desc', 'spbill_create_ip', ); foreach($mustas$key){ if(isset($parameters[$key])&&$parameters[$key]){ $this->setParameter($key,$parameters[$key]); }else if(!isset($this->_parameters[$key])||!$this->_parameters[$key]){ $this->error='参数缺损:'.$key; returnfalse; } } if(!isset($parameters['partner_trade_no'])){ $parameters['partner_trade_no']=$this->getPartnerTradeNo(); } $this->setParameter('partner_trade_no',$parameters['partner_trade_no']); $this->setParameter('nonce_str',$this->getRand(30,3)); $postXml=$this->_createXml(); if(!$postXml){ returnfalse; } $this->log($postXml,'SEND_XML'); $result=$this->curl_post_ssl(self::TRANSFERS_URL,$postXml); $this->log($result,'RESULT_XML'); if(!$result){ returnfalse; } $resultObj=simplexml_load_string($result,'SimpleXMLElement',LIBXML_NOCDATA); $this->_lastResult=$resultObj; if($resultObj->return_code=='SUCCESS'){//成功标识 if($resultObj->result_code=='SUCCESS'){ return$resultObj->send_listid; } if($resultObj->return_msg){ $this->error=(string)$resultObj->return_msg; returnfalse; } $this->error=(string)$resultObj->err_code_des; returnfalse; } if($resultObj->return_code!='FAIL'){ $this->error='返回信息格式异常'; returnfalse; } $this->error=(string)$resultObj->return_msg; returnfalse; } /** *获取转账信息 *@paramunknown$partner_trade_no *@returnboolean|SimpleXMLElement */ publicfunctiongetInfo($partner_trade_no){ $param=array( 'nonce_str'=>$this->getRand(30,3), 'partner_trade_no'=>$partner_trade_no, 'mch_id'=>$this->_keys['mch_id'], 'appid'=>$this->_keys['wxappid'], ); ksort($param); $unSignParaString=$this->_formatQueryParaMap($param,false); $param['sign']=$this->_sign($unSignParaString,$this->_keys['key']); $xml=$this->arrayToXml($param); $this->log($xml,'GETINFO_XML'); $result=$this->curl_post_ssl(self::GETINFO_URL,$xml); if(!$result){ returnfalse; } $this->log($result,'RESULT_XML'); $resultObj=simplexml_load_string($result,'SimpleXMLElement',LIBXML_NOCDATA); $this->_lastResult=$resultObj; if($resultObj->return_code=='SUCCESS'){//成功标识 if($resultObj->result_code=='SUCCESS'){ return$resultObj; } if($resultObj->return_msg){ $this->error=$resultObj->return_msg; returnfalse; } $this->error=$resultObj->err_code_des; returnfalse; } if($resultObj->return_code!='FAIL'){ $this->error='返回信息格式异常'; returnfalse; } $this->error=$resultObj->return_msg; returnfalse; } /** *设置所需要的参数 *@param$parameter键值数组/键 *@param$value值 *@returnWxBonusApi */ publicfunctionsetParameter($parameter,$value=null) { if(!is_array($parameter)){ return$this->setParameter(array( $parameter=>$value )); } foreach($parameteras$key=>$value){ $key=trim($key); $value=trim($value); $this->_parameters[$key]=$value; } return$this; } /** *获取参数值 *@param$parameter键名 *@returnmultitype: */ publicfunctiongetParameter($parameter) { return$this->_parameters[$parameter]; } /** *获取随机数 *@paramnumber$len随机数的位数 *@paramnumber$type取值范围1表示数字2小写字母4大写字母 *@returnstring */ publicfunctiongetRand($len=30,$type=0) { $str=''; $max=-1; if(!$type){ $type=3; } if($type&1){ $str.='1234567890'; $max+=10; } if($type&2){ $str.='abcdefghijklmnopqrstuvwxyz'; $max+=26; } if($type&4){ $str.='ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $max+=26; } $rand=''; for($i=0;$i<$len;$i++){ $rand.=$str[rand(0,$max)]; } return$rand; } /** *生成商户的订单号 *@returnstring */ publicfunctiongetPartnerTradeNo() { $this->_lastPartnerTradeNo=$this->_parameters['mch_id'].date('YmdHis').$this->getRand(4,1);//$this->getRandNum(); return$this->_lastPartnerTradeNo; } /** *获取最后一次创建生成的订单号 *@returnstring */ publicfunctiongetLastPartnerTradeNo() { return$this->_lastPartnerTradeNo; } /** *创建XML的方法 *@paramnumber$retcode *@paramstring$reterrmsg *@returnboolean|string */ privatefunction_createXml() { try{ $sign=$this->_getSign(); if(!$sign){ returnfalse; } $this->setParameter('sign',$sign); return$this->arrayToXml($this->_parameters); }catch(Exception$e){ $this->error=$e->getMessage(); returnfalse; } } /** *参数转换成XML *@paramarray$arr参数数组 *@returnstring */ publicfunctionarrayToXml($arr) { $xml=""; foreach($arras$key=>$val){ if(is_numeric($val)){ $xml.="<".$key.">".$val."".$key.">"; }else{ $xml.="<".$key.">".$key.">"; } } $xml.=" "; return$xml; } /** *获得签名结果 *@returnboolean|Ambigous*/ protectedfunction_getSign() { try{ if($this->_checkSign()==false){//检查生成签名参数 $this->error='生成签名参数缺失!'; $this->log(json_encode($this->_parameters,JSON_UNESCAPED_UNICODE),'ERROR_Sign_XML'); returnfalse; } ksort($this->_parameters); $unSignParaString=$this->_formatQueryParaMap($this->_parameters,false); return$this->_sign($unSignParaString,$this->_keys['key']); }catch(Exception$e){ $this->error=$e->getMessage(); returnfalse; } } /** *检查签名所需参数是否齐全 *@returnboolean */ privatefunction_checkSign() { //returntrue; if($this->_parameters["mch_appid"]==null|| $this->_parameters["mchid"]==null|| //$this->_parameters["device_info"]==null||设备id $this->_parameters["nonce_str"]==null|| $this->_parameters["partner_trade_no"]==null|| $this->_parameters["openid"]==null|| $this->_parameters["check_name"]==null|| $this->_parameters["re_user_name"]==null|| $this->_parameters["desc"]==null|| $this->_parameters["spbill_create_ip"]==null){ returnfalse; } returntrue; } /** * *@param$paraMap *@param$urlencode *@returnstring */ privatefunction_formatQueryParaMap($paraMap,$urlencode) { $buff=""; ksort($paraMap); foreach($paraMapas$k=>$v){ if(null!=$v&&"null"!=$v&&"sign"!=$k){ if($urlencode){ $v=urlencode($v); } $buff.=$k."=".$v."&"; } } $reqPar; if(strlen($buff)>0){ $reqPar=substr($buff,0,strlen($buff)-1); } return$reqPar; } /** *签名 *@param$content签名的字符串 *@param$key密钥 *@throwsException *@returnstring|boolean */ privatefunction_sign($content,$key) { try{ if(null==$key){ $this->error='签名key不能为空!'; returnfalse; } if(null==$content){ $this->error='签名内容不能为空'; returnfalse; } $signStr=$content."&key=".$key; returnstrtoupper(md5($signStr)); }catch(Exception$e){ $this->error=$e->getMessage(); returnfalse; } } /** *cURL抓取 * *@param$url链接地址 *@param$vars参数 *@param *$second *@param *$aHeader *@returnmixed|boolean */ functioncurl_post_ssl($url,$data,$second=30,$aHeader=array()) { $ch=curl_init(); //超时时间 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //这里设置代理,如果有的话 curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //cert与key分别属于两个.pem文件 curl_setopt($ch,CURLOPT_SSLCERT,$this->_cert['api_cert']); curl_setopt($ch,CURLOPT_SSLKEY,$this->_cert['api_key']); curl_setopt($ch,CURLOPT_CAINFO,$this->_cert['rootca']); if(count($aHeader)>=1){ curl_setopt($ch,CURLOPT_HTTPHEADER,$aHeader); } curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $data=curl_exec($ch); if($data){ curl_close($ch); return$data; }else{ $this->log(json_encode($this->_cert)); $this->error='aa:'.curl_errno($ch); curl_close($ch); returnfalse; } } /** *获取服务器ip * *@returnstring */ publicfunctiongetServerIp() { $server_ip='127.0.0.1'; if(isset($_SERVER)){ if(isset($_SERVER['SERVER_ADDR'])&&$_SERVER['SERVER_ADDR']){ $server_ip=$_SERVER['SERVER_ADDR']; }elseif(isset($_SERVER['LOCAL_ADDR'])&&$_SERVER['LOCAL_ADDR']){ $server_ip=$_SERVER['LOCAL_ADDR']; } }else{ $server_ip=getenv('SERVER_ADDR'); } return$server_ip; } /** *设置日志目录文件 * *@paramunknown$file */ publicfunctionsetLogFile($file) { $this->log_file=$file; } /** *写日志 * *@param$msg写入的信息 *@param$type日志类型作为查询标示 */ publicfunctionlog($msg,$type) { if($this->log_file){ $log=str_replace(array( "\r\n", "\r", "\n" ),array( "", "", "" ),$msg); error_log($type.''.date('Y-m-dH:i:s').''.json_encode($log,JSON_UNESCAPED_UNICODE)."\r\n",3,$this->log_file); } } } setLogFile('D:\\transfers.log');//日志地址 //转账 $data=array( 'openid'=>'',//openid 'check_name'=>'NO_CHECK',//是否验证真实姓名参数 're_user_name'=>'11',//姓名 'amount'=>100,//最小1元也就是100 'desc'=>'企业转账测试',//描述 'spbill_create_ip'=>$wxtran->getServerIp(),//服务器IP地址 ); var_dump(json_encode($wxtran->transfers($data),JSON_UNESCAPED_UNICODE)); var_dump($wxtran->error); //获取转账信息 var_dump($wxtran->getInfo('11111111')); var_dump($wxtran->error); } }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。