微信扫码支付demo php,PHP微信扫码支付DEMO,thinkphp5+微信支付

* 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;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值