微信 开发生成带参数的二维码的实例


Posted in PHP onNovember 23, 2016

微信开发生成带参数的二维码的讲解

在微信公众号平台开发者那里,在“账号管理”那里,有一项功能是“生成带参数的二维码”,通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上

用微信扫一扫推送到开发者网址那儿的数据如下:

<xml><ToUserName><![CDATA[gh_452****b0f2]]></ToUserName>
<FromUserName><![CDATA[oz1fVs4d****7FmFrCbc57o]]></FromUserName>
<CreateTime>1429416610</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[155120hzw]]></EventKey>
<Ticket><![CDATA[gQH17zoAAAAAAAAAASxodHR****S9xL28waUNrM1BsV1ZJZ0VJcE8tbUFMAAIEcCozVQMEAAAAAA==]]></Ticket>
</xml>

可以看出是一个xmlstk格式的数据,Event里SCAN表示扫描,EventKey是生成二维码时在json设置的数值,EventKey是可以自己指定的,其它都是微信平台内定的。。。通过自定义EventKey的数据,可以做到自动回复指定的数据

比如:我要做一个猜谜的游戏,每个猜谜都有一个唯一的编号,这个编号可以设置为EventKey值,然后别人扫描带参数的二维码时,会把谜语的编号(EventKey)传递过来,然后根据编号自动回复谜底给用户。。。。即做拿出微信扫一扫就知道谜底。

更多的应用场景请自由发挥,比如:扫一扫,领取红包等功能也是可以实现的。

微信官方开发文档:

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

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

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

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。
获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

ticket 单词的意思我查了一下百度字典,表示“票、入场券”的意思,即通过入场券来换取二维码。

换取的时候,其实就是把ticket加到URL的最后面,即xxxx.com/xxx.php?ticket=xxxx的形式

真实的效果如下:

其中ticket=xxx  后面的就是获取到的ticket数值。

微信官方文档如下:

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

scene_id最大值是10万,请求的方式为post,被请求的网址都是一样的。

POST数据格式:json
POST数据例子:{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

expire_seconds表示过期的秒数,如果含有这个参数,表示临时的二维码,即长3分钟后过期。

永久二维码的请求示例:

POST数据格式:json
POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或者也可以使用以下POST数据创建字符串形式的二维码参数:
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "123"}}}

这里要注意一下,scene_str表求字符串,即推送的数据中EventKey的值是字符串,字符串要加双引号,可以发送英文字符。

如果scene_id永久二维码最大值是10万,只能是数字,不要加双引号

还有请求是post,数据格式为json

参数说明

参数 说明
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过1800。
action_name 二维码类型,QR_SCENE为临时,QR_LIMIT_SCENE为永久,QR_LIMIT_STR_SCENE为永久的字符串参数值
action_info 二维码详细信息
scene_id 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
scene_str 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64,仅永久二维码支持此字段

返回说明

正确的Json返回结果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm3sUw==","expire_seconds":60,"url":"http:\/\/weixin.qq.com\/q\/kZgfwMTm72WWPkovabbI"}

参数 说明
ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
expire_seconds 二维码的有效时间,以秒为单位。最大不超过1800。
url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

错误的Json返回示例:

{"errcode":40013,"errmsg":"invalid appid"}

通过ticket换取二维码

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

提醒:TICKET记得进行UrlEncode

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
PHP+DBM的同学录程序(4)
Oct 09 PHP
php中日期加减法运算实现代码
Dec 08 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
Jun 27 PHP
PHP中加密解密函数与DES加密解密实例
Oct 17 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 PHP
微信 getAccessToken方法详解及实例
Nov 23 #PHP
Yii核心验证器api详解
Nov 23 #PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 #PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 #PHP
php 数组处理函数extract详解及实例代码
Nov 23 #PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 #PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 #PHP
You might like
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python操作CouchDB的方法
2014/10/08 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
就业协议书的作用
2014/04/11 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
小学亲子活动总结
2014/07/01 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
2014年教研室工作总结
2014/12/06 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
Python数据类型最全知识总结
2021/05/31 Python