生成带参数的二维码

带参数的二维码
目前有两种二维码类型:一种是临时二维码,一种的永久二维码。因为永久二维码比较少,目前最多只有10万个,所以我们先来创建一个临时的二维码。
首先我们需要创建二维码ticket,然后凭借ticket去换取二维码。

第一步创建ticket:

那么我们就需要创建这样的post数据:

{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或者是
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
第一个参数代表有效时间,第二个参数就是临时二维码的标识,是一个常量,第三个参数就是我们要放进去的“scene_id”

这里要注意一下,scene_str,是创建字符串形式的。

第一步,我们将要获取ticket(这里我们用的是字符串形式!!!)

 $queryUrl = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$accessToken;

        $queryAction = 'POST';

        $template = array();

        if($type == 1){

            $template['expire_seconds'] = $expireSeconds;

            $template['action_name'] = 'QR_STR_SCENE';

        }else{

            $template['action_name'] = 'QR_LIMIT_STR_SCENE';

        }

        $template['action_info']['scene']['scene_str'] = $sceneStr;

        $template = json_encode($template,JSON_UNESCAPED_UNICODE);

$template将返回以下值

{"expire_seconds":"2592000","action_name":"QR_STR_SCENE","action_info":{"scene":{"scene_str":"你好"}}}

这样我们便创建好了一个符合要求的字符串,接下来只需要去调用接口就可以了。

return Curl::callWebServer($queryUrl, $template, $queryAction);

我的Curl::callwebserver方法中写的是调用外部url的方法。

如果正确的话就会返回

{"ticket":"gQFL8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyWHNFdjRPYU1kWm0xZXBPOGhyY0UAAgSZZeFaAwQAjScA","expire_seconds":2592000,"url":"http:\/\/weixin.qq.com\/q\/02XsEv4OaMdZm1epO8hrcE"}

我们将会得到ticket。

第二步,根据ticket去换取二维码。提醒这里ticket需要进行urlencode。

 $queryUrl = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.urlencode($ticket);//将字符串以url编码
        $queryAction = 'GET';
        $result = Curl::callWebServer($queryUrl, '', $queryAction, 0);

这样ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。

我们可以将图片下载到本地:

$filename='./Public/qrcode/' .time().'.jpg';

        file_put_contents($filename, $result);

然后就可以显示在页面上了。




猜你喜欢

转载自blog.csdn.net/CJiaJiaLe/article/details/80092430