第一步,获取参数:前端请求接口带给你的参数。
//拼接参数
$uid = 'uid='.$post['id']; //前端传递的用户id参数
$page = 'pages/pintuan/pintuan'; //小程序页面,必须是已经发布审核通过上线的小程序页面
$return['ewm'] = $this->get_unlimited($uid ,$page); //开始调用生成二维码的方法
第二步,开始调用获取小程序二维码方法
public function get_unlimited($scene_a,$page_b)
{
$scene = $scene_a; //参数
$page = $page_b; //小程序页面(必须真实,已发布的小程序页面地址)
$access_token1 = Cache::get('access_token'); //获取cache里面的access_token
if ($access_token1) { //判断是否过期
$accessToken= $access_token1; //没过期直接用
}else{
$accessToken = $this->get_access_token(); //获取了就重新获取
}
//拼接请求的url地址
$url="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=$accessToken";
//拼接请求参数
$data=[
'scene'=>$scene,
'page'=>$page,
'width'=>600,
'auto_color'=>false,
];
//参数转为json类型
$data=json_encode($data);
//开始请求拿到二维码
$result = $this->curl_post_https($url,$data);
//调用方法,将二维码转为base64返回给前端
$result=$this->data_uri($result,'image/png');
return $result;
}
获取accesstoken的方法
public function get_access_token()
{
if(Cache::get('access_token')){ //先判断缓存里面的是否过期
$a = Cache::get('access_token'); //没过期直接返回,不用重复再请求
return $a;
}else{
//过期了就重新请求accesstoken
$appid = '******';// 小程序appidd
$secret = '******'; // 小程序appsecret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
$user_obj = $this->curlHttp($url);
//请求到了之后存在缓存里面,最长时间7200秒,自动过期
Cache::set('access_token',$user_obj['access_token'],7100);
//返回access_token
return Cache::get('access_token');
}
}
二进制转base64图片的方法
//二进制转图片image/png
public function data_uri($contents, $mime)
{
$base64 = base64_encode($contents);
return ('data:' . $mime . ';base64,' . $base64);
}
curl get请求方法
/**
* 发送get请求
*/
public function curlHttp($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
return json_decode($output,true);
}
curl post 请求方法
public function curl_post_https($url,$data,$header=[]){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
|