微信公众号开发------生成二维码

<?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);
            }
        }
    }
    /**
     * 扫描带参数二维码事件
       用户扫描带场景值二维码时,可能推送以下两种事件:
       如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
       如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
     */


}

猜你喜欢

转载自blog.csdn.net/weixin_38615720/article/details/81812327