当前位置:   article > 正文

微信公众号开发之生成并扫描带参数的二维码_微信 showqrcode

微信 showqrcode

生成带参数二维码详见微信公众平台之生成带参数的二维码

具体步骤:可在微信测试平台https://mp.weixin.qq.com/debug进行生成


生成结果如下:


拿到ticket 请求 https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET(用获取到的ticket替换掉TICKET)

直接生成二维码图片,如下图所示


或者百度搜索二维码生成器,通过URL生成二维码,如图


把二维码下载下来就可以了。

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

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

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,可用来换取二维码图片

代码如下:

  1. @Controller
  2. @RequestMapping("/wechat")
  3. public class WxController {
  4. private final static String MEDIATYPE_CHARSET_JSON_UTF8 = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8";
  5. private static Logger log = LoggerFactory.getLogger(WxController.class);
  6. @RequestMapping(value = "/chat", method = {RequestMethod.GET, RequestMethod.POST}, produces = MEDIATYPE_CHARSET_JSON_UTF8)
  7. public void get(HttpServletRequest request, HttpServletResponse response) throws Exception {
  8. //如果为get请求,则为开发者模式验证
  9. if ("get".equals(request.getMethod().toLowerCase())) {
  10. doGet();//在开发者模式验证中已处理,在此省略
  11. } else {
  12. request.setCharacterEncoding("UTF-8");
  13. response.setCharacterEncoding("UTF-8");
  14. PrintWriter out = response.getWriter();
  15. try {
  16. Map<String, String> map = MessageUtil.xmlToMap(request);
  17. String ToUserName = map.get("ToUserName");
  18. String FromUserName = map.get("FromUserName");
  19. request.getSession().setAttribute("openid",FromUserName);
  20. String CreateTime = map.get("CreateTime");
  21. String MsgType = map.get("MsgType");
  22. String message = null;
  23. if (MsgType.equals(WXConstants.MESSAGE_EVENT)) {
  24. //从集合中,获取是哪一种事件传入
  25. String eventType = map.get("Event");
  26. //对获取到的参数进行处理
  27. String eventKey = map.get("EventKey");
  28. String[] params = eventKey.split("_");
  29. String code = "";
  30. if (params.length==2){
  31. log.info("二维码参数为-----name:"+params[0]+",code:"+params[1]);
  32. if (params[0].equalsIgnoreCase("bookshelf")){
  33. code = params[1];
  34. request.getSession().setAttribute(WXConstants.SCAN_NAME_SHELF,code);
  35. }
  36. }
  37. //扫描带参数的二维码,如果用户未关注,则可关注公众号,事件类型为subscribe;用户已关注,则事件类型为SCAN
  38. if (eventType.equals(WXConstants.MESSAGE_SUBSCRIBE)) {
  39. //返回注册图文消息(在上一节关注并返回图文消息中已讲解)
  40. message = MessageUtil.initNewsMessage(ToUserName, FromUserName);
  41. } else if (eventType.equals(WXConstants.MESSAGE_SCAN)) {
  42. //TODO 你自己的业务需求
  43. }
  44. }
  45. out.print(message); //返回转换后的XML字符串
  46. } catch (DocumentException e) {
  47. e.printStackTrace();
  48. }
  49. out.close();
  50. }
  51. }
  52. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/854669
推荐阅读
相关标签
  

闽ICP备14008679号