小程序二维码生成
/*
* TODO:生成二维码
*/
public function qrCode_post()
{
$username = $this->post('username');#登陆人
$grade = $this->post('grade');#登陆人身份
$page = $this->post('page');#对应的path pages/home/home
$parameter = $this->post('scene');#参数
#配置
$APPID = "wx5337e20023bd9c4e";## 标题
$APPSECRET = "ce13b67bf90d01e33375f265b42b6e3d";
#获取access_token
$access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";
//缓存access_token
session_start();
$_SESSION['access_token'] = "";
$_SESSION['expires_in'] = 0;
if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in']))
{
$json = file_get_contents( $access_token );
$json = json_decode($json,true);
$_SESSION['access_token'] = $json['access_token'];
$_SESSION['expires_in'] = time()+7200;
$ACCESS_TOKEN = $json["access_token"];
}
else{
$ACCESS_TOKEN = $_SESSION["access_token"];
}
#判断是否缓存access_token
if (!empty($ACCESS_TOKEN)){
$url = 'https://testminiprogram.anniekids.com';
$qr_path =IMAGE_UPLOAD_PATH;
$filename =time().uniqid().".jpg";
$savePath = $qr_path.'/'.$filename;
$returnPath = $url.'/asset/NetclassApi/upload/images/'.$filename;
$url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$ACCESS_TOKEN;
$data = array();
$data['scene'] = $parameter;//自定义信息,可以填写诸如识别用户身份的字段,注意用中文时的情况
$data['page'] = $page;//扫描后对应的path
$data['width'] = 240;//自定义的尺寸
$data['auto_color'] = false;//是否自定义颜色
$color = array(
"r"=>"221",
"g"=>"0",
"b"=>"0",
);
$data['line_color'] = $color;//自定义的颜色值
$result = $this->get_http_array($url,json_encode($data));
$errcode = json_decode($result,true)['errcode'];
$errmsg = json_decode($result,true)['errmsg'];
if($errcode) return array('status'=>0,'info'=>$errmsg);
$res = $this->base64_to_img($result,$savePath);//将获取到的二维码图片流保存成图片文件
#/var/www/html/public/asset/NetclassApi/upload/images/15597839155cf869eb4a05c.jpg"
#存储生成的二维码
#查询是否有存储记录
$sql_code = "
SELECT TOP 1 * FROM AnnieMiniProgram.dbo.OC_QRcode WHERE username = '{$username}'
";
$sql_data = $this->db->query($sql_code)->row_array();
if (empty($sql_data))
{
#没有,增加记录
$data_ins['username'] = $username;
$data_ins['grade'] = $grade;
$data_ins['code'] = $returnPath;
$data_ins['page'] = $page;
$data_ins['scene'] = $parameter;
$data_ins['createTime'] = date("Y-m-d H:i:s",time());
$this->db->insert('AnnieMiniProgram.dbo.OC_QRcode', $data_ins);
}
else
{
#如有,更新时间
$where_upd['username'] = $username;
$data_ins['grade'] = $grade;
$data_ins['code'] = $returnPath;
$data_ins['page'] = $page;
$data_ins['scene'] = $parameter;
$data_ins['updateTime'] = date("Y-m-d H:i:s",time());
$this->db->where($where_upd);
$this->db->update('AnnieMiniProgram.dbo.OC_QRcode', $data_ins);
}
$this->response($this::RE_OK,'生成成功',$data_ins);
}else{
$this->response($this::RE_OK,'生成失败,请重试');
}
}
注意:
拿到二维码的流, 是读到本地还是读到对象存储自己搞完事了, 需要注意的是几个post请求入参:
path: 跳转小程序的页面地址, 前面不要 “/”, 如果要带参数不可以在这里, 只能在第二个参数scene里添加
scene: 填放用户需要携带的参数
width: 尺寸
is_hyaline: 背景色要不要