微信扫码支付模式二-快速实现
2019-01-17 本文已影响0人
表弟_212
开发者编号APPID: 在【微信公众平台】->开发->基本配置中获取
开发者密钥APPSECRET:在【微信公众平台】->开发->基本配置中获取
商户号MCHID: 在【商户平台】->产品中心->开发配置中获取
商户支付密钥KEY:在【商户平台】->账户中心->API安全中获取
证书文件: 在【商户平台】->账户中心->API安全中下载证书
image.png image.png
<?php
class Util
{
/**
* PHP发送请求
* @param string $api 接口地址
* @param mixed $postData POST请求数据
*/
public static function httpRequest($api, $postData)
{
//1.初始化
$ch = curl_init();
//2.配置
//2.1设置请求地址
curl_setopt($ch, CURLOPT_URL, $api);
//2.2数据流不直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//2.3POST请求
if ($postData) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}
//curl注意事项,如果发送的请求是https,必须要禁止服务器端校检SSL证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//3.发送请求
$data = curl_exec($ch);
//4.释放资源
curl_close($ch);
return $data;
}
/**
* 将XML文档转化为数组
* @param string $xml XML文档
* @return array
*/
public static function 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 array $arr 数组
* @return string
*/
public static 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;
}
}
class Wxpay
{
const APPID =想要吗》私聊我 QQ 1152596875 //开发者编号
const SECRET =想要吗》私聊我 QQ 1152596875 ;//开发者密钥
const MCHID = 想要吗》私聊我 QQ 1152596875 ; //商户号
const KEY = //支付秘钥
const NOTIFY_URL = //支付成功回调的url
public function getSign($params)
{
//0.移除sign
if (isset($params['sign'])) unset($params['sign']);
//1.参数名ASCII码从小到大排序(字典序)
ksort($params);
//2.组装字符串,键值对形式 & md5加密 & 转化为大写
$str = http_build_query($params) . '&key=' . self::KEY;
$str = strtoupper(md5(urldecode($str)));
//3.返回签名
return $str;
}
public function getUrl($pid, $price = 1)
{
$params = [
'appid' => self::APPID,
'mch_id' => self::MCHID,
'nonce_str' => md5(time()),
'body' => '扫码支付模式二',
'out_trade_no' => date('YmdHis'),
'total_fee' => $price,
'spbill_create_ip'=> $_SERVER['SERVER_ADDR'],
'notify_url' => self::NOTIFY_URL,
'trade_type' => 'NATIVE',
'product_id' => $pid
];
$params['sign'] = $this->getSign($params);
//数组转xml
$xml = Util::ArrToXml($params);
//发送数据到统一下单API地址
$data = Util::httpRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);
$arr = Util::XmlToArr($data);
//判断结果
if($arr['result_code'] == 'SUCCESS' && $arr['return_code'] == 'SUCCESS')
{
return $arr['code_url'];
}else{
return false;
}
}
}
//1.引入PHP生成二维码类库
include './phpqrcode/phpqrcode.php';
//2.获取要生成二维码的文本
$url = (new Wxpay)->getUrl(1);
//3.生成二维码
QRcode::png($url);
比较原生,不懂可以在下面评论区留言,看到我会回复
---转载的话记得加上来自来哪!!!!