如何获取小程序二维码
【摘要】
首先我们先获取到token,拿到token后再去调获取二维码的接口
这里需要注意的是,返回的图片是一堆乱码,需要使用base65_encode来解密,输出成图片即可
/* * author:咔咔 * wechat:fangkangfk * time:2018.9.13 * 获取小程序二维码 ...
首先我们先获取到token,拿到token后再去调获取二维码的接口
这里需要注意的是,返回的图片是一堆乱码,需要使用base65_encode来解密,输出成图片即可
/*
* author:咔咔
* wechat:fangkangfk
* time:2018.9.13
* 获取小程序二维码
* */
/**
* 获取 access_tonken
* @param string $token_file 用来存储token的临时文件
*/
private function _getToken($token_file='./access_token') {
// 考虑过期问题,将获取的access_token存储到某个文件中
$life_time = 7200;
if (file_exists($token_file) && time()-filemtime($token_file)<$life_time) {
// 存在有效的access_token
return file_get_contents($token_file);
}
// 目标URL:
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".Config::get('appid')."&secret=".Config::get('appsecret');
//向该URL,发送GET请求
$result = $this->request($url);
if (!$result) {
return false;
}
// 存在返回响应结果
$result_obj = json_decode($result);
// 写入
file_put_contents($token_file, $result_obj->access_token);
return $result_obj->access_token;
}
/*
获取二维码
*/
public function getQrcode(){
$userId = $this->request->param('user_id');
$member_app_id = $this->request->param('appid');
$token = $this->getToken($member_app_id);
$url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=".$token;
$data = [
'path' =>"pages/network/network?userId=".$userId,
'scene'=>'1001',
'width'=>430,
'auto_color'=>false,
];
$data=json_encode($data);
$res = $this->request($url,$data);
$data='image/png;base64,'.base64_encode($res);
$imageName = rand(1111,9999).'.png';
if (strstr($data,",")){
$image = explode(',',$data);
$image = $image[1];
}
$path = "/attachs/uploads/".date("Ymd",time());
if (!is_dir($path)){ //判断目录是否存在 不存在就创建
mkdir($path,0777,true);
}
$imageSrc= $path."/". $imageName; //图片名字
$r = file_put_contents(ROOT_PATH .$imageSrc, base64_decode($image));//返回的是字节数
if (!$r) {
// return json(['data'=>null,"code"=>1,"msg"=>"图片生成失败"]);
}else{
$send = ['code'=>200,'msg'=>'图片生成成功','path'=>'https://'.$_SERVER['HTTP_HOST'].$imageSrc];
// return json(['data'=>1,"code"=>0,"msg"=>"图片生成成功"]);
}
$this->result($send,200,'获取二维码成功','json');
}
//发起请求
public static function request($url, $data=array()){
$ch = curl_init();//初始化
//curl_setopt();//设置
//设置
curl_setopt($ch,CURLOPT_URL,$url); //需要获取的 URL 地址
curl_setopt($ch,CURLOPT_HEADER,0); //启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //获取的信息以字符串返回,而不是直接输出
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); //连接超时时间
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
//避免https 的ssl验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLVERSION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if($data){
curl_setopt($ch, CURLOPT_POST, 1); //post请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//post参数
}
//执行
$data = curl_exec($ch);//执行 不输出 内容返回给它
//判断是否请求成功
if(curl_errno($ch)){//错误码
echo 'curl error: '.curl_error($ch);//错误信息
}
$response = curl_getinfo($ch);
switch($response['http_code']){
case 200:
return $data;
break;
default:
exit('程序异常');
}
curl_close($ch);//关闭
}
//发起请求
public static function request($url, $data=array()){
$ch = curl_init();//初始化
//curl_setopt();//设置
//设置
curl_setopt($ch,CURLOPT_URL,$url); //需要获取的 URL 地址
curl_setopt($ch,CURLOPT_HEADER,0); //启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //获取的信息以字符串返回,而不是直接输出
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); //连接超时时间
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
//避免https 的ssl验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLVERSION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if($data){
curl_setopt($ch, CURLOPT_POST, 1); //post请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//post参数
}
//执行
$data = curl_exec($ch);//执行 不输出 内容返回给它
//判断是否请求成功
if(curl_errno($ch)){//错误码
echo 'curl error: '.curl_error($ch);//错误信息
}
$response = curl_getinfo($ch);
switch($response['http_code']){
case 200:
return $data;
break;
default:
exit('程序异常');
}
curl_close($ch);//关闭
}
那么问题来了怎么将获取二维码显示在小程序界面呢!
var array = wx.base64ToArrayBuffer(data);
var base64 = wx.arrayBufferToBase64(array);
that.setData({ kaka: "data:image/png;base64," + base64 });
上边的三段代码特别重要
saveImageToAlbum: function() {
var user_id = wx.getStorageSync('user_id');
var that = this;
wxb.Post('/api/automatic.manage/getQrcode',{
user_id: user_id
},function(data){
console.log(data)
var array = wx.base64ToArrayBuffer(data);
var base64 = wx.arrayBufferToBase64(array);
that.setData({ kaka: "data:image/png;base64," + base64 });
// that.setData({
// qrcode: data.data
// })
});
},
文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fangkang7/article/details/82688152
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)