PHP 后台生成小程序二维码图片
<?php
namespace app\admin\model;
use think\Model;
use traits\model\SoftDelete;
class Treasure extends Model
{
//生成唯一标识
public static function guid($factor='',$prefix='',$suffix=''){
list($usec, $sec) = explode(" ", microtime());
$guid = $prefix. $factor. $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']
. $sec . $usec
. mt_rand(0,1000000).time(). mt_rand(0,1000000).$suffix;
$guid = substr(sha1($guid),8,32);
$guid = base_convert($guid,16,36);
return $prefix.$guid.$suffix;
}
//获取微信生成二维码 id(可以是调转小程序参数,也可以是唯一标识) JumpUrl(小程序跳转路径)
public static function wx_code($id,$JumpUrl){
$appid ='appid';
$secret ='AppSecret';
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
//开启session
// 保存2小时
$lifeTime = 2 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
if(empty($access_token)){
$access_token_data = self::getJson($url);
$access_token = $access_token_data['access_token'];
$_SESSION['access_token'] = $access_token;
}
$access_token = $_SESSION['access_token'];
if(!empty($access_token)){
$url = 'https://api.weixin.qq.com/wxa/getwxacode?access_token='.$access_token;
// $url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;
$data['path'] = $JumpUrl;
$data['scene'] =$id;//(接口为getwxacodeunlimit使用,传递小程序参数)
$data['width'] = 430;
$result = self::curlPost($url,$data,'POST');
$str = uniqid(mt_rand(),1);
$file='/uploads/qr_code/'.date('Ymd',time()).'/';
$file2=$_SERVER['DOCUMENT_ROOT'].$file;
if(!is_dir($file2))//检测目录是否存在
{
mkdir($file2,0777,true);
}
file_put_contents($file2.$id.md5($str).'.png', $result, true);
return $file.$id.md5($str).'.png';
}
}
public static function getJson($url,$data=array(),$method='GET'){
$ch = curl_init();//1.初始化
curl_setopt($ch, CURLOPT_URL, $url);//2.请求地址
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);//3.请求方式
//4.参数如下
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
if($method=="POST"){//5.post方式的时候添加数据
$data = json_encode($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
public static function curlPost($url,$data,$method){
$ch = curl_init(); //1.初始化
curl_setopt($ch, CURLOPT_URL, $url); //2.请求地址
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);//3.请求方式
//4.参数如下
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');//模拟浏览器
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate'));//gzip解压内容
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
if($method=="POST"){//5.post方式的时候添加数据
$data = json_encode($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);//6.执行
if (curl_errno($ch)) {//7.如果出错
return curl_error($ch);
}
curl_close($ch);//8.关闭
return $tmpInfo;
}
}
|