微信公众平台开发(83) 生成带参数二维码-阿里云开发者社区

开发者社区> 方倍工作室> 正文

微信公众平台开发(83) 生成带参数二维码

简介: 本文介绍在微信公众平台上如何使用高级接口开发生成带参数二维码的功能。   一、场景二维码 为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
+关注继续查看

本文介绍在微信公众平台上如何使用高级接口开发生成带参数二维码的功能。

 

一、场景二维码

为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。

目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000)。两种二维码分别适用于帐号绑定、用户来源统计等场景。

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

 

二、创建二维码ticket

每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket过程。

临时二维码请求说明

http请求URL

https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

POST数据格式

1 {
2     "expire_seconds": 1800,
3     "action_name": "QR_SCENE",
4     "action_info": {
5         "scene": {
6             "scene_id": 100000
7         }
8     }
9 }

返回格式:

{
    "ticket": "gQFK8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL3kweXE0T3JscWY3UTltc3ZPMklvAAIEG9jUUgMECAcAAA==",
    "expire_seconds": 1800
}

永久二维码请求说明

http请求URL

https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

POST数据格式

{
    "action_name": "QR_LIMIT_SCENE",
    "action_info": {
        "scene": {
            "scene_id": 1000
        }
    }
}

返回格式

{
    "ticket": "gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA=="
}

提交数据参数说明:

返回结果参数说明

程序实现

 

三、通过ticket换取二维码

获取二维码ticket后,开发者可用ticket换取二维码图片。无须登录态即可调用。

HTTPS GET请求说明(TICKET必需UrlEncode)

https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET

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

HTTP头示例如下:

 1 {
 2     "url": "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA%3D%3D",
 3     "content_type": "image/jpg",
 4     "http_code": 200,
 5     "header_size": 162,
 6     "request_size": 181,
 7     "filetime": -1,
 8     "ssl_verify_result": 20,
 9     "redirect_count": 0,
10     "total_time": 0.509,
11     "namelookup_time": 0,
12     "connect_time": 0.058,
13     "pretransfer_time": 0.343,
14     "size_upload": 0,
15     "size_download": 28497,
16     "speed_download": 55986,
17     "speed_upload": 0,
18     "download_content_length": 28497,
19     "upload_content_length": 0,
20     "starttransfer_time": 0.481,
21     "redirect_time": 0
22 }

下面是二种场景二维码的URL及生成的图片

https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQFK8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL3kweXE0T3JscWY3UTltc3ZPMklvAAIEG9jUUgMECAcAAA%3d%3d

https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA%3d%3d

 

四、下载二维码

二维码生成以后,可以在浏览器中右键另存为本地图片,但如果有很多二维码的时候,用程序来下载就比较方便。

我们使用CURL获取图片的所有信息,并将图片数据保存为一个文件。一个完整的下载代码如下:

这样,在程序当前目录就会生成一个包含二维码的图片文件。

 

五、扫描带参数二维码事件

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。

1. 用户未关注时,进行关注后的事件推送

<xml>
<ToUserName><![CDATA[gh_45072270791c]]></ToUserName>
<FromUserName><![CDATA[o7Lp5t6n59DeX3U0C7Kric9qEx-Q]]></FromUserName>
<CreateTime>1389684286</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_1000]]></EventKey>
<Ticket><![CDATA[gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==]]></Ticket>
</xml>

参数说明

2. 用户已关注时的事件推送

<xml>
<ToUserName><![CDATA[gh_45072270791c]]></ToUserName>
<FromUserName><![CDATA[o7Lp5t6n59DeX3U0C7Kric9qEx-Q]]></FromUserName>
<CreateTime>1389684184</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[1000]]></EventKey>
<Ticket><![CDATA[gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==]]></Ticket>
</xml>

参数说明

事件代码:

以下代码判定了扫描带参数二维码的两种情形

private function receiveEvent($object)
{
    $contentStr = "";
    switch ($object->Event)
    {
        case "subscribe":
            $contentStr = "欢迎关注方倍工作室 ";
            if (isset($object->EventKey)){
                $contentStr = "关注二维码场景 ".$object->EventKey;
            }
            break;
        case "SCAN":
            $contentStr = "扫描 ".$object->EventKey;
             //要实现统计分析,则需要扫描事件写入数据库,这里可以记录 EventKey及用户OpenID,扫描时间
            break;
        default:
            break;      
 
    }
    $resultStr = $this->transmitText($object, $contentStr);
    return $resultStr;
}

 

六、渠道统计分析

后台将获得所有二维码关注情况,数据如下所示:

对其进行简单统计分析后,效果如图

 

七、内容更新及源码下载

本节最新的教程说明及源代码已在《微信公众平台开发最佳实践(第3版)》一书中发布,欢迎购买。

点此购买《微信公众平台开发最佳实践(第3版)》

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架【值得收藏】
Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架【值得收藏】
2 0
无影云桌面让你无处不在
云桌面,让你不再为了没有电脑发愁。手把手教你玩通无影~~~
36 0
Golang中的Defer必掌握的7知识点
defer作为Golang比较特殊的语法,在实际开发使用过程中会有一些盲区知识点容易让开发者陷入困境之中,本章将详细的罗列冲defer的一些使用场景中细节的问题和案例代码分析。
12 0
docker安装教程(windows和linux[centos8])
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。
7 0
Docker的安装和Redis容器
Docker的安装和Redis容器 Docker安装,环境:虚拟机CentOS 8;阿里云镜像加速;Redis容器创建。 CentOS 8的安装就不在这里演示了
6 0
是什么让 Gear 与众不同? 在 Gear 上部署有什么好处?
Gear 是一个智能合约平台,任何人都可以在去中心化网络以及 Polkadot 生态系统中开发和部署 dApp,就像在 Layer-1 区块链网络中一样,但效果更胜一筹!
5 0
android11开启无线调试
目录 配对步骤 步骤一:在手机上启用**开发者模式 & USB 调试** 步骤二: 手机开启开发者选项,打开无线调试 步骤三:点击无线调试,使用配对码配对设备 电脑上的操作:电脑打开cmd命令行 步骤一:检查adb版本 步骤二:按图输入下一个命令 步骤三
9 0
Python 函数详解| 学习笔记
快速学习 Python 函数详解
8 0
Python 初识 | 学习笔记
快速学习 Python 初识
6 0
+关注
方倍工作室
CSDN博客技术专家。已出版《微信公众平台开发最佳实践》第一版、第二版及第三版,《企业微信公众平台开发实战》等书籍。
541
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载