<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/8/16
* Time: 20:37
*/
namespace Home\Controller;
use Think\Controller;
class QrcodeController extends Controller{
/**
* 微信公众号------生成二维码
*/
//1临时二维码请求说明
public function getQrcode(){
//a)获取ticket票据 全局票据access_token 微信网页授权access_token 微信jssdk票据 jsapi_ticket
//1 获取全局的access_token
$access_token = $this->getWxAccessToken();
//2 组装数据 {"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
$arr = array(
'expire_seconds'=>604800,//24*60*60*7
'action_name'=>'QR_SCENE',
'action_info'=>array(
'scene'=>array(
'scene_id'=>2000
)
)
);
$arr_json = json_encode($arr);
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$access_token;
$arr_rs = $this->http_curl($url,'post',$arr_json);
$ticket = $arr_rs['ticket'];
//3通过ticket换取二维码
$ticket = urlencode($ticket);
$img_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket;
//4 为空 直接输出到页面就行
echo "<img src='".$img_url."' />";
}
//永久二维码
public function getForeverQrcode(){
//a)获取ticket票据 全局票据access_token 微信网页授权access_token 微信jssdk票据 jsapi_ticket
//1 获取全局的access_token
$access_token = $this->getWxAccessToken();
//2 组装数据 {"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
$arr = array(
'action_name'=>'QR_LIMIT_STR_SCENE',
'action_info'=>array(
'scene'=>array(
'scene_str'=>"3000"
)
)
);
$arr_json = json_encode($arr);
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$access_token;
$arr_rs = $this->http_curl($url,'post',$arr_json);
$ticket = $arr_rs['ticket'];
//3通过ticket换取二维码
$ticket = urlencode($ticket);
$img_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket;
//4 为空 直接输出到页面就行
echo "<img src='".$img_url."' />";
}
/**
* 获取access_token
*/
public function getWxAccessToken(){
//缓存access_token
if($_SESSION['access_token'] && $_SESSION['access_token_expire_time']>time()){
$rs = $_SESSION['access_token'];
}else{
$appid = 'wxd2fd7766fd677a7c';
$secret = '56fce5e4cd6fd651a435c13400d1290a';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
$res = $this->http_curl($url);
$rs = $res['access_token'];
$_SESSION['access_token'] = $rs;
$_SESSION['access_token_expire_time'] = time()+7000;
}
return $rs;
}
/**
* 封装curl
*/
public function http_curl($url, $type = 'get', $arr = '',$res = 'json'){
$cl = curl_init();
curl_setopt($cl, CURLOPT_URL, $url);
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);
if($type == 'post'){
curl_setopt($cl, CURLOPT_POST, 1);
curl_setopt($cl, CURLOPT_POSTFIELDS, $arr);
}
$output = curl_exec($cl);
curl_close($cl);
if($res == 'json'){
if( curl_error($cl)){
return curl_error($cl);
}else{
return json_decode($output, true);
}
}
}
/**
* 扫描带参数二维码事件
用户扫描带场景值二维码时,可能推送以下两种事件:
如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
*/
}