* To change this template file, choose Tools | Templates
* and open the template in the editor.*/
namespacetools;
use think\Config;/**
* Description of WxPay
*
* @author admin*/
classWxPay {/**
* 获取签名
* @param type $arr
* @return type*/
publicfunction getSign($arr)
{//去除数组的空值
array_filter($arr);if(isset($arr['sign'])){
unset($arr['sign']);
}//排序
ksort($arr);//组装字符
$str = $this->arrToUrl($arr) . '&key=' . Config::get('wx_pay')['key'];//使用md5 加密 转换成大写
returnstrtoupper(md5($str));
}/**
* 校验签名
* @param type $arr
* @return boolean*/
publicfunction checkSign($arr){//生成新签名
$sign = $this->getSign($arr);//和数组中原始签名比较
if($sign == $arr['sign']){return true;
}else{return false;
}
}/**
* 获取带签名的数组
* @param array $arr
* @return type*/
publicfunction setSign($arr)
{
$arr['sign'] = $this->getSign($arr);return$arr;
}/**
* 数组转URL字符串 不带key
* @param type $arr
* @return type*/
publicfunction arrToUrl($arr)
{returnurldecode(http_build_query($arr));
}/**
* 记录到文件
* @param type $file
* @param type $data*/
publicfunction logs($file,$data)
{
$data= is_array($data) ? print_r($data,true) : $data;
file_put_contents('./public/paylogs/'.$file, $data);
}/**
* 接收POST推送
* @return type*/
publicfunction getPost()
{return file_get_contents('php://input');
}/**
* Xml 文件转数组
* @param type $xml
* @return string*/
publicfunction XmlToArr($xml)
{if($xml == '') return '';
libxml_disable_entity_loader(true);
$arr= json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);return$arr;
}/**
* 数组转XML
* @param type $arr
* @return string*/
publicfunction ArrToXml($arr)
{if(!is_array($arr) || count($arr) == 0) return '';
$xml= "";foreach ($arr as $key=>$val)
{if(is_numeric($val)){
$xml.="".$val."".$key.">";
}else{
$xml.="".$key.">";
}
}
$xml.="";return$xml;
}/**
* 发送POST请求
* @param type $url
* @param type $postfields
* @return type*/
publicfunction postStr($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_SSL_VERIFYPEER] = false;//禁用证书校验
$params[CURLOPT_SSL_VERIFYHOST] = false;
$params[CURLOPT_POSTFIELDS] =$postfields;
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return$content;
}/**
* 统一下单
* @param type $params
* @return boolean*/
public function unifiedorder($params)
{//获取到带签名的数组
$params = $this->setSign($params);//数组转xml
$xml = $this->ArrToXml($params);//发送数据到统一下单API地址
$data = $this->postStr(Config::get('wx_pay')['uourl'], $xml);
$arr= $this->XmlToArr($data);if($arr['result_code'] == 'SUCCESS' && $arr['return_code'] == 'SUCCESS'){return$arr;
}else{
$this->logs('error.txt', $data);return false;
}
}
}