wechat-0050,微信公众号,带参数的二维码获取与扫码事件推送
demo:https://github.com/wenrongyao/wechat-demo
摘要:这篇帖子讲述如何获取带参数的二维码,以及扫码带参数的二维码后的事件接收。
微信开发者文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542
1、二维码类型
临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。
2、带参数的二维码用处之一:可用于第三方登录
资源贴:扫码绑定https://blog.csdn.net/wrongyao/article/details/83963150
扫码登录https://blog.csdn.net/wrongyao/article/details/83963844
3、 获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。
3.1 获取ticket:先得到accessToken,拼凑参数(json数据,不同类型的二维码数据格式不同),调用微信接口获取ticket
3.1.1 access_token 项目统一管理,自动获取 参考:https://blog.csdn.net/wrongyao/article/details/80276888
3.1.2 json请求数据拼凑
临时二维码json数据
{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或(两者的区别在于场景值的表示方法不同,上面是数字,下面是字符串)
{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
永久二维码json数据(和临时的区别在于没有时间限制)
{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或(同上)
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
注意格式一定要确保正确,否则可能会造成可以获取二维码,但在扫码事件中无法获取场景值。
3.1.3 调用微信接口获取ticket
public class QrCodeServiceImpl implements IQrCodeService {// 获取ticketprivate static final String GET_QRCODE_URL = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={TOKEN}";// 换取二维码private static final String QR_CODE_URL = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={TICKET}";@Overridepublic String getTempQrcode() {QrCodeParam qrCodeParam = new QrCodeParam();QrCodeParam.ActionInfo actionInfo = qrCodeParam.new ActionInfo();QrCodeParam.ActionInfo.Scene scene = actionInfo.new Scene();//设置场景值scene.setSceneStr("temp_qrcode_test");actionInfo.setScene(scene);qrCodeParam.setActionInfo(actionInfo);qrCodeParam.setActionName("QR_STR_SCENE");qrCodeParam.setExpireSeconds(604800);String param = GsonUtil.toJson(qrCodeParam);String qrCodeUrl = QR_CODE_URL.replace("{TICKET}", getTicket(param));System.out.println(qrCodeUrl);return qrCodeUrl;}@Overridepublic String getPermanentQrCode() {QrCodeParam qrCodeParam = new QrCodeParam();QrCodeParam.ActionInfo actionInfo = qrCodeParam.new ActionInfo();QrCodeParam.ActionInfo.Scene scene = actionInfo.new Scene();//设置场景值scene.setSceneStr("permanent_qrcode_test");actionInfo.setScene(scene);qrCodeParam.setActionInfo(actionInfo);qrCodeParam.setActionName("QR_LIMIT_STR_SCENE");String param = GsonUtil.toJson(qrCodeParam);String qrCodeUrl = QR_CODE_URL.replace("{TICKET}", getTicket(param));System.out.println(qrCodeUrl);return qrCodeUrl;}/*** 获取ticket** @param param* @return*/private String getTicket(String param) {String url = GET_QRCODE_URL.replace("{TOKEN}", Constant.ACCESS_TOKEN);String jsonStr = HttpRequest.post(url, param, null, Constant.ContentType.APPLICATION_JSON, false);Map<String, Object> map = GsonUtil.fromJson(jsonStr, Map.class);return map.get("ticket").toString();}
}
这边的请求数据param的生成是采用gson生成的,实体类的封装可以下载demo查看,这边就不贴了。
3.1.4 返回信息
4、用ticket获取二维码
接口:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
ticket替换成自己获取的ticket(上为临时,下为永久)
5、扫码推送事件
事件推送参看:https://blog.csdn.net/wrongyao/article/details/86496549
5.1 用户已关注微信公众号扫码推送信息如下
打印推送信息:
临时二维码
key:Ticket-value:gQFJ8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAySFQ2RmdSSlJmM2sxaUxUOE5zY1AAAgQv-T5cAwSAOgkA
key:CreateTime-value:1547633478
key:EventKey-value:temp_qrcode_test
key:Event-value:SCAN
key:ToUserName-value:gh_b348cb411e6c
key:FromUserName-value:oLXXD1ElSeoNELQP1EhUkvlRF9SM
key:MsgType-value:event
永久二维码
key:Ticket-value:gQG08DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyc1FUVWdBSlJmM2sxMDAwME0wN2YAAgQd-j5cAwQAAAAA
key:CreateTime-value:1547633517
key:EventKey-value:permanent_qrcode_test
key:Event-value:SCAN
key:ToUserName-value:gh_b348cb411e6c
key:FromUserName-value:oLXXD1ElSeoNELQP1EhUkvlRF9SM
key:MsgType-value:event
5.2 事件处理
简单处理,扫临时二维码就回复临时二维码,扫永久二维码就回复永久二维码
else if (event.equals(Constant.Event.SCAN)) { // 扫码事件String eventKey = map.get("EventKey");if (eventKey.equals("temp_qrcode_test")) { //临时二维码result = msgService.returnText(map, "扫描临时二维码");} else if (eventKey.equals("permanent_qrcode_test")) {result = msgService.returnText(map, "扫描永久二维码");}}
5.3 结果
wechat-0050,微信公众号,带参数的二维码获取与扫码事件推送相关推荐
- 微信小程序生成带参数的二维码
微信小程序生成带参数的二维码 //写一个图片来写路径,好让二维码显示出来 <image style="width:500rpx;height:500rpx;" src=&qu ...
- 微信小程序生成带参数的二维码以及小程序码
微信小程序生成带参数的二维码 官方共给了三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口B和接口C. 官方文档地址 业务需求: 扫描二维码进入指定商品页面,需要的参数为商品id(go ...
- PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送
PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送 1. API接口的声明 2. PHP脚本代码 3. 运行结果 由于消息类型有多钟,本文中,"接收普通消息"我以 ...
- 微信公众号带参数二维码的几个使用场景
微信公众号官方开放了 "带参数二维码" 的功能,根据官网文档的描述,有如下的特点: 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口. 通过 ...
- 微信开发生成带参数的二维码的讲解
在微信公众号平台开发者那里,在"账号管理"那里,有一项功能是"生成带参数的二维码",通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 ...
- 渠道码是什么意思?微信公众号怎么设置渠道二维码?
渠道码是一种带参数的二维码,可以自动统计到渠道引流效果,可以对公众号的粉丝来源渠道进行统计. 渠道码的作用一般包括自定义回复.粉丝标签自定义管理.粉丝来源数据自动统计. 我们在公众号推广时可以使用渠道 ...
- laravel生成微信公众号带参数二维码并响应扫描带参数二维码
微信公众号后台ip白名单.网页接口域名之类的配置就不多说了,这里主要配置的是开发->基本配置->服务器配置(注:一旦启用改配置,公众号自动回复就会失效): 1.服务器地址(URL):这里要 ...
- 微信公众号开发,扫描二维码事件推送丢失参数问题
需求场景: 每个用户都有自己的推广二维码,分享自己推广二维码,别人扫码后跳转关注公众号,关注后绑定推荐关系. 用到技术点: 1.生成带参数二维码 2.接收事件推送,这里主要是关注和扫带参数二维码两个事 ...
- 微信公众号开发-----实现模板、图文、文本、音乐、图片推送
本篇文章实现模板.图文.文本.音乐.图片推送,前提是已经搭建了微信开发环境.读完本文后,实现的主要效果如下 在测试账号中配置模板 登录测试公众号/正式公众号(认证后的服务号),测试公众号:模板消息接口 ...
- 微信渠道二维码怎么做?微信公众号怎么做渠道二维码?
因为公众平台没有生成渠道二维码功能,如果想要实现公众号的渠道二维码,可以用第三方平台微号帮提供的渠道二维码生成在线功能实现,渠道二维码主要用于统计各个渠道来源的粉丝,为公众号实现精准化推广,为公众号节 ...
最新文章
- golang 值得注意的地方(2则)
- python写excel文件出错_【求教】xlutils修改中文Excel文件出错
- 建立在线社区:Numenta
- 计算机云客户端技术指标,云服务器技术指标
- 类的构造函数和析构函数、默认构造函数
- pytorch迁移学习--模型建立的代码实现
- 持续数据保护(CDP):Near-CDP vs. real-CDP
- 好用的 edge 插件有哪些?
- java象棋人机_Java版中国象棋人机对战源代码,作者将AI算法用得淋漓尽致JAVA游戏源码下载...
- Android C++ OpenGL教程课程总结
- 使用Composer部署laravel框架
- TortoiseGit解决冲突
- # responses[name] = response
- deepin系统怎么分区?deepin系统分区方法介绍
- 不能打开到主机的连接,在端口1521:连接失败的解决方法
- 人脸识别小区门禁系统_小区人脸识别门禁系统安全吗?
- 通过边界代理一路打到三层内网+后渗透通用手法
- 设置窗口颜色保护眼睛(win7/xp)
- java设计一个bank类实现银行_java定义一个类实现银行账户的概念。
- mcp2515 linux 设备树,mcp2515驱动的实现
热门文章
- Centos7 Certbot 常用命令相关总结
- 细说MATLAB中的MAX函数 (翻译Help文档而来)
- H分公司局域网络部署
- 基于RT_Thread连接中国移动onenet平台的RGB三色灯项目
- 【遇见Doris】寒冷冬日的一次温暖相聚 · Doris开发者沙龙
- yum到底是干什么的?
- 一次神坑:Qt的QFile新建文件
- 剑指offter笔记
- 【论文简述及翻译】FlowNet: Learning Optical Flow with Convolutional Networks(ICCV 2015)
- 《信息安全技术关键信息基础设施安全保护要求》获批准通过