Java微信公众号开发之创建带参数二维码
生成带参数二维码接口文档:生成带参数二维码
一、介绍
1.1、目前有2种类型的二维码:
1. 临时二维码:临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量,主要用于帐号绑定等不要求二维码永久保存的业务场景
2. 永久二维码:永久二维码,是无过期时间的,但数量较少(目前为最多10万个),主要用于适用于帐号绑定、用户来源统计等场景
1.2、获取带参数的二维码有两种方式:
1. 如何获取:先获取二维码ticket,然后凭借ticket通过接口换取二维码图片,但是得到ticket之前首先得获取微信全局唯一接口调用凭据,根据微信返回二维码中url参数自行生成二维码
2. 二维码参数类型:
每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket 过程。
参数可以是整型scene_id,也可以是字符串类型scene_str两种,区别如下:
scene_id | 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000) |
scene_str | 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64 |
二、前期准备
渠道二维码的作用是方便公众号统计关注的来源,原理是用户扫描带参数的二维码,微信服务器会向开发者服务器推送一条带着EventKey参数消息:
EventKey :事件KEY值,qrscene_为前缀,后面为二维码的参数值
推送XML数据包示例:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_123123]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>
注: 上面的"123123" 为二维码标识参数值,在用户扫码关注后,会推送上方XML数据包到我们的后台,然后可以从上面推送的XML数据包中获取该带参数二维码的标识符,当然,在代码里肯定是将XML转化成对应的实体类了,也就是从实体类里取出这个标识符,接下来可以进行业务判断了;当然如果是该用户已经关注了公众号,当他扫描带参数二维码时,将会直接推送key值,其实这种情况的不用统计,大家知道一下就好,本来做这个带参数二维码主要是为了统计通过不同渠道二维码扫码关注进来的粉丝数据;已关注的我们忽略不统计此情况;
三、微信公众号开发框架
<!-- 微信框架 参考:https://github.com/Wechat-Group/weixin-java-tools --><dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>3.0.0</version></dependency>
四、扫描带参数二维码事件推送
这个推送的XML信息通过之前开发者中心处设置的服务器地址获得,因此需要现在微信开发者中心接入我们的服务器地址
开发者中心处设置的服务器地址如下图:
1.已关注推送XML示例
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName> //开发者微信号
<FromUserName><![CDATA[FromUser]]></FromUserName> //发送者账号(openid)
<CreateTime>123456789</CreateTime> //消息创建时间
<MsgType><![CDATA[event]]></MsgType> //消息类型event
<Event><![CDATA[SCAN]]></Event> //事件类型 event
<EventKey><![CDATA[SCENE_VALUE]]></EventKey> //事件key值,是一个32位无符号整数,即创建二维码时的二维码scene_id
<Ticket><![CDATA[TICKET]]></Ticket> //二维码的ticke,可以用来换取二维码图片
</xml>
EventKey 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id xml处理方式
2.未关注推送XML示例
<xml><ToUserName><![CDATA[toUser]]></ToUserName> //开发者微信号
<FromUserName><![CDATA[FromUser]]></FromUserName> //发送者账号(openid)
<CreateTime>123456789</CreateTime> //消息创建时间(整型)
<MsgType><![CDATA[event]]></MsgType> //消息类型 event
<Event><![CDATA[subscribe]]></Event> //事件类型(subscribe)
<EventKey><![CDATA[qrscene_123123]]></EventKey>//事件KEY值,qrscene_为前缀,后面为二维码参数值
<Ticket><![CDATA[TICKET]]></Ticket> //二维码ticke值,可以用来换取二维码图片
</xml>
EventKey 事件KEY值,qrscene_为前缀,后面为二维码的参数值
3. 演示对比,此处我设置带参数二维码的标识符为"123"
五、封装生成带参数二维码工具类
WeChatQrcodeUtils:
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.File;/*** <pre>* @Description: 生成带参数的二维码* @Aouth: cao_wencao* @Date: 2019-02-18 15:10* </pre>*/
@Slf4j
@Component
public class WeChatQrcodeUtils {@Autowiredprivate WxMpService wxMpService;/*** <pre>* 创建临时二维码ticket* @param sceneId 场景值ID,临时二维码时为32位非0整型* @param expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。* @auther: cao_wencao* @date: 2019/2/18 16:58* </pre>*/public WxMpQrCodeTicket qrCodeCreateTmpTicket(int sceneId, Integer expireSeconds) throws WxErrorException {WxMpQrCodeTicket wxMpQrCodeTicket = wxMpService.getQrcodeService().qrCodeCreateTmpTicket(sceneId, expireSeconds);return wxMpQrCodeTicket;}/*** <pre>* 创建临时二维码ticket* @param sceneStr 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64* @param expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。* @auther: cao_wencao* @date: 2019/2/18 17:01* </pre>*/public WxMpQrCodeTicket qrCodeCreateTmpTicket(String sceneStr, Integer expireSeconds) throws WxErrorException {WxMpQrCodeTicket wxMpQrCodeTicket = wxMpService.getQrcodeService().qrCodeCreateTmpTicket(sceneStr, expireSeconds);return wxMpQrCodeTicket;}/*** <pre>* 创建永久二维码ticket* @param sceneId 场景值ID,最大值为100000(目前参数只支持1--100000)* @auther: cao_wencao* @date: 2019/2/18 17:03* </pre>*/public WxMpQrCodeTicket qrCodeCreateLastTicket(int sceneId) throws WxErrorException {WxMpQrCodeTicket wxMpQrCodeTicket = wxMpService.getQrcodeService().qrCodeCreateLastTicket(sceneId);return wxMpQrCodeTicket;}/*** <pre>* 创建永久字符串二维码ticket* @param sceneStr 参数。字符串类型长度现在为1到64* @auther: cao_wencao* @date: 2019/2/18 17:05* </pre>*/public WxMpQrCodeTicket qrCodeCreateLastTicket(String sceneStr) throws WxErrorException {WxMpQrCodeTicket wxMpQrCodeTicket = wxMpService.getQrcodeService().qrCodeCreateLastTicket(sceneStr);return wxMpQrCodeTicket;}/*** <pre>* 换取二维码图片文件,jpg格式* @param ticket 二维码ticket* @auther: cao_wencao* @date: 2019/2/18 17:07* </pre>*/public File qrCodePicture(WxMpQrCodeTicket ticket) throws WxErrorException {File file = wxMpService.getQrcodeService().qrCodePicture(ticket);return file;}/*** <pre>* 换取二维码图片url地址(可以选择是否生成压缩的网址)* @param ticket 二维码ticket* @param needShortUrl 是否需要压缩的二维码地址* @auther: cao_wencao* @date: 2019/2/18 17:10* </pre>*/public String qrCodePictureUrl(String ticket, boolean needShortUrl) throws WxErrorException {String qrCodeUrl = wxMpService.getQrcodeService().qrCodePictureUrl(ticket, needShortUrl);return qrCodeUrl;}/*** <pre>* 换取二维码图片url地址* @param ticket 二维码ticket* @auther: cao_wencao* @date: 2019/2/18 17:11* </pre>*/public String qrCodePictureUrl(String ticket) throws WxErrorException {String url = wxMpService.getQrcodeService().qrCodePictureUrl(ticket);return url;}}
六、测试生成带参数二维码Controller
TestQrcodeController :
import com.thinkgem.jeesite.modules.wechat.commonUtil.WeChatQrcodeUtils;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** <pre>* @Desc: 测试生成带参数二维码, 2592000(有效期30天)* @Package: com.thinkgem.jeesite.modules.wechat.controller* @Author: cao_wencao* @Date: 2019-04-08 10:30* </pre>*/
@Controller
@RequestMapping("/wechat/qrcode")
public class TestQrcodeController {@Autowiredprivate WxMpService wxMpService;@Autowiredprivate WeChatQrcodeUtils weChatQrcodeUtils;/*** <pre>* @desc: 创建生成二维码* @auth: cao_wencao* @date: 2019/4/10 14:00* </pre>*/@RequestMapping("/createQrcode")@ResponseBodypublic Object createQrcode(String expireSeconds, int sceneId) throws WxErrorException {WxMpQrCodeTicket wxMpQrCodeTicket = weChatQrcodeUtils.qrCodeCreateTmpTicket(sceneId, Integer.valueOf(expireSeconds));return wxMpQrCodeTicket;}/*** <pre>* @desc: 通过ticket获取二维码(长链接URL)* @auth: cao_wencao* @date: 2019/4/10 14:00* </pre>*/@RequestMapping("/getQrcodeUrl")@ResponseBodypublic Object getQrcodeUrl(String ticket) throws WxErrorException {String url = weChatQrcodeUtils.qrCodePictureUrl(ticket);return url;}/*** <pre>* @desc: 通过ticket获取二维码(短链接URL)* @auth: cao_wencao* @date: 2019/4/10 14:01* </pre>*/@RequestMapping("/qrCodePictureUrl")@ResponseBodypublic Object qrCodePictureUrl(String ticket) throws WxErrorException {String urlPicture = weChatQrcodeUtils.qrCodePictureUrl(ticket,true);// String url= urlPicture.replace("\\/", "/");return urlPicture;}
}
七、通过postman创建、换取带参数二维码图片
1. 通过有效期 expireSeconds=2592000和场景标识 sceneId=123创建带参数二维码
2.通过返回的ticket换取二维码图片url地址
3.效果展示
Java微信公众号开发之创建带参数二维码相关推荐
- 微信公众平台开发(83) 生成带参数二维码
本文介绍在微信公众平台上如何使用高级接口开发生成带参数二维码的功能. 一.场景二维码 为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码, ...
- 基于OpenJWeb平台的微信服务号开发培训-生成带参数二维码
因为OpenJWeb平台已经集成了微信服务号接口,所以在OpenJWeb平台上开发微信服务号会起到事半功倍的作用.本文介绍如何使用微信公众号接口生成带参数二维码功能. 下面是开发及操作过程: (1)首 ...
- 哪个微信公众号第三方平台可以设置渠道二维码?
假如你分别在公交站台.地铁广告.电视媒体投放了一则广告,你可以通过渠道二维码将这三个推广渠道分别生成一个独立的二维码,通过不同二维码关注的粉丝,在微号帮平台可以清楚的知道粉丝来源,从而对推广渠道的效果 ...
- 微信小程序官方接口生成带参数二维码
最近在做一个点餐项目需要生成带参数的二维码供顾客扫码点餐,网上有用许多二维码生成器,比如"草料二维码生成器",但是我还是偏爱用微信小程序官方提供的接口来实现. 首先贴一个文档地址, ...
- 微信小程序 最全 生成带参数二维码
摸索了几天终于完成了,接口A B C 通用 ,接口B只能生成已发布的小程序 $appid='APPid'; $secret='你的小程序秘钥'; $tokenUrl="https://api ...
- 微信公众号开发(十)——扫描带参数二维码事件
我们通过微信扫码二维码已经是十分频繁的操作了,为了满足用户渠道推广分析和用户帐号绑定等场景的需要,微信公众平台提供了创建带参数二维码的接口,通过产生的ticket,去获取二维码图片.当用户扫描这个二维 ...
- 微信公众号带参数二维码的几个使用场景
微信公众号官方开放了 "带参数二维码" 的功能,根据官网文档的描述,有如下的特点: 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口. 通过 ...
- 实例:用C#.NET手把手教你做微信公众号开发(12)--带参数二维码裂变推广
为什么能裂变推广是营销学和心理学的范畴了,这里举个简单的例子来介绍.公众号有足以吸引粉丝的地方,要么是知识.要么是优惠.要么是服务,反正不同于其他人,能够吸引人关注:有了这个前提,怎么让更多的人知道这 ...
- 实例:用C#.NET手把手教你做微信公众号开发(11)--生成带参数二维码
上一篇讲了普通关注的各种情景,接下来准备详细讲解带参数的二维码的应用实例.在下一篇详解之前,这里先介绍一下如何下载二维码.生成二维码表,为后续的应用做好准备. 为了满足用户渠道推广分析和用户帐号绑定等 ...
最新文章
- 洛谷P1194 买礼物
- opencv-python实现马赛克油画漫画风格的图片
- 第三方工具生成密钥对连接GCP服务器(putty生成密钥远程连接服务器)
- 【Scratch】青少年蓝桥杯_每日一题_1.25_投球
- 海量数据下如何使用多线程的导出 Excel
- vue3.0js 非prop属性的值和setup函数的使用
- audio 上一首 下一首 自定义样式_被 iPhone 吹爆的最香功能,安卓也终于安排上了...
- 《ArcGIS Runtime SDK for Android开发笔记》——问题集:如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题(转载)...
- JavaScript变量的声明与使用以及命名规范(3)
- [leetcode]1293. 网格中的最短路径
- [转载] 在Python中使用Matplotlib绘制常见图表
- element tree不刷新视图_架构蓝图软件架构 quot;4+1quot; 视图模型
- 林家栋这三十年:深获万梓良、刘德华赏识,靠配角成为影帝
- notepad++中文版下载
- 【manjaro安装最新的搜狗输入法】2022年1月4号有效测试
- mti杂波抑制仿真 matlab,MTI+MTD+CFAR简单仿真
- Grunt (自动化项目构建的软件工具)
- Oracle | 初级-第二章 Oracle安装配置
- Fiddler抓包工具报:The system ptoxy changed. Click to reenable capturing
- java 日志门面_slf4j-日志门面担当
热门文章
- Blob 下载文件时 type 类型 大全
- 织梦 tags.php静态化,教你dedecms织梦tag标签页面怎么实现静态化
- discuz 直接在模板上定义伪静态链接,为论坛的绑定别名或拼音格式的目录名
- tcpdump命令使用详解
- 爱发4.2.8自动发卡去授权源码
- 美国大学特别重视的批判性思维,是如何培养出来的?
- 基于Vue实现电商SKU组合算法问题
- 011 Towards Byzantine-Resilient Federated Learning via Group-Wise Robust Aggregation(群体鲁棒聚合、拜占庭)
- Confluence JIRA 报表(JIRA Report)蓝图
- PMON分析(4)- 引导内核