赞
踩
生成带参数二维码详见微信公众平台之生成带参数的二维码
具体步骤:可在微信测试平台https://mp.weixin.qq.com/debug进行生成
生成结果如下:
拿到ticket 请求 https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET(用获取到的ticket替换掉TICKET)
直接生成二维码图片,如下图所示
或者百度搜索二维码生成器,通过URL生成二维码,如图
把二维码下载下来就可以了。
用户扫描带场景值二维码时,可能推送以下两种事件:
1. 用户未关注时,进行关注后的事件推送
推送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>
参数说明:
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,subscribe |
EventKey | 事件KEY值,qrscene_为前缀,后面为二维码的参数值 |
Ticket | 二维码的ticket,可用来换取二维码图片 |
2. 用户已关注时的事件推送
推送XML数据包示例:
<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[FromUser] ]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType>< ![CDATA[event] ]></MsgType> <Event>< ![CDATA[SCAN] ]></Event> <EventKey>< ![CDATA[SCENE_VALUE] ]></EventKey> <Ticket>< ![CDATA[TICKET] ]></Ticket> </xml>
参数说明:
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,SCAN |
EventKey | 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id |
Ticket | 二维码的ticket,可用来换取二维码图片 |
代码如下:
- @Controller
- @RequestMapping("/wechat")
- public class WxController {
-
- private final static String MEDIATYPE_CHARSET_JSON_UTF8 = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8";
- private static Logger log = LoggerFactory.getLogger(WxController.class);
-
- @RequestMapping(value = "/chat", method = {RequestMethod.GET, RequestMethod.POST}, produces = MEDIATYPE_CHARSET_JSON_UTF8)
- public void get(HttpServletRequest request, HttpServletResponse response) throws Exception {
- //如果为get请求,则为开发者模式验证
- if ("get".equals(request.getMethod().toLowerCase())) {
- doGet();//在开发者模式验证中已处理,在此省略
- } else {
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- PrintWriter out = response.getWriter();
- try {
- Map<String, String> map = MessageUtil.xmlToMap(request);
- String ToUserName = map.get("ToUserName");
- String FromUserName = map.get("FromUserName");
- request.getSession().setAttribute("openid",FromUserName);
- String CreateTime = map.get("CreateTime");
- String MsgType = map.get("MsgType");
- String message = null;
- if (MsgType.equals(WXConstants.MESSAGE_EVENT)) {
- //从集合中,获取是哪一种事件传入
- String eventType = map.get("Event");
- //对获取到的参数进行处理
- String eventKey = map.get("EventKey");
- String[] params = eventKey.split("_");
- String code = "";
- if (params.length==2){
- log.info("二维码参数为-----name:"+params[0]+",code:"+params[1]);
- if (params[0].equalsIgnoreCase("bookshelf")){
- code = params[1];
- request.getSession().setAttribute(WXConstants.SCAN_NAME_SHELF,code);
- }
- }
- //扫描带参数的二维码,如果用户未关注,则可关注公众号,事件类型为subscribe;用户已关注,则事件类型为SCAN
- if (eventType.equals(WXConstants.MESSAGE_SUBSCRIBE)) {
- //返回注册图文消息(在上一节关注并返回图文消息中已讲解)
- message = MessageUtil.initNewsMessage(ToUserName, FromUserName);
- } else if (eventType.equals(WXConstants.MESSAGE_SCAN)) {
- //TODO 你自己的业务需求
- }
- }
- out.print(message); //返回转换后的XML字符串
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- out.close();
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。