基于springboot框架的微信公众号基础开发(三)----生成带参数的二维码和分别进行不同的消息推送

基于springboot框架的微信公众号基础开发(三)----生成带参数的二维码和分别进行不同的消息推送(核心内容如下,可根据自己的需求,添加或者修改代码。)
转载需注明:https://blog.csdn.net/juan1997/article/details/90647634
一、创建一个类名为(WeChatController)

@RestController
		@RequestMapping("/wechat")
		@Slf4j
		public class WeChatController {
			@Autowired
			private WxMpService wxMpService;
			@Autowired
			private WechatService wechatService;
			@GetMapping("/createTicket")
			//1、生成带参数的二维码
			public String createTitcket() throws WxErrorException {
				WxMpQrCodeTicket ticket = wxMpService.getQrcodeService().qrCodeCreateLastTicket("123456");//携带了场景值123456
				String pictueUrl = wxMpService.getQrcodeService().qrCodePictureUrl(ticket.getTicket());
				return pictueUrl;

			}
			//2、消息和事件推送
			@RequestMapping("/wx")
			public void checkToken(HttpServletRequest request, HttpServletResponse response)
				throws IOException, DocumentException, WxErrorException {
				response.setContentType("text/html;charset=UTF-8");
				log.info(" 入参-------------");
				String signature = request.getParameter("signature");
				String timestamp = request.getParameter("timestamp");
				String nonce = request.getParameter("nonce");
				String echostr = request.getParameter("echostr");
				log.info("signature为:{}", signature);
				log.info("timestamp为:{}", timestamp);
				log.info("nonce为:{}", nonce);
				log.info("echostr为{}", echostr);
				if (wxMpService.checkSignature(timestamp, nonce, signature)) {
					// WxMpXmlMessage
					// 判断请求是否事件类型.
					Map<String, String> map = MessageUtil.xmlToMap(request);
					wechatService.sendMsg(map);
					log.info("结束了小仙女 ");
				}
			}
			
		}

二、创建一个接口实现类名为(WechatService)

@Service("wechatService")
		@Slf4j
		public class WechatService {
			@Autowired
			private WxMpService wxMpService;

			public void sendMsg(Map<String, String> map) throws WxErrorException {
				String toUserName = map.get("ToUserName");// 开发者微信号
				log.info("toUserName为{}", toUserName);
				String fromUserName = map.get("FromUserName");// 发送方账号
				log.info("fromUserName为{}", fromUserName);
				String msgType = map.get("MsgType");// 消息类型,有:event
				log.info("MsgType为{}", msgType);
				if (WxConsts.XmlMsgType.TEXT.equals(msgType)) {// 文本消息
					log.info("发送文本消息");
				} else if (WxConsts.XmlMsgType.IMAGE.equals(msgType)) {// 图片消息
					log.info("发送图片消息");
				} else if (WxConsts.XmlMsgType.VOICE.equals(msgType)) {// 语音消息
					log.info("发送语音消息");
				} else if (WxConsts.XmlMsgType.VIDEO.equals(msgType)) {// 视频消息
					log.info("发送视频消息");
				} else if (WxConsts.XmlMsgType.SHORTVIDEO.equals(msgType)) {// 小视频消息
					log.info("发送小视频消息");
				} else if (WxConsts.XmlMsgType.LOCATION.equals(msgType)) {// 地理位置消息
					log.info("发送地理位置消息");
				} else if (WxConsts.XmlMsgType.LINK.equals(msgType)) {// 链接消息
					log.info("发送链接消息");
				} else if (WxConsts.XmlMsgType.EVENT.equals(msgType)) {// 接受事件推送
					String event = map.get("Event");// 事件类型,subscribe(订阅)、unsubscribe(取消订阅)
					log.info("event为{}", event);
					if (event.equals(WxConsts.EventType.UNSUBSCRIBE)) {// 取消订阅
						log.info("event【取消关注】为{}", event);
						log.info("我取消关注了,不要忧伤哦~~~~有时间 再加~~~");
					} else if (event.equals(WxConsts.EventType.SUBSCRIBE)) {// 扫描带参数二维码事件
						String EventKey = map.get("EventKey");// 扫描二维码时所带的scene_id
						log.info("EventKey为{}", EventKey);
						log.info("event【关注公众号】为{}", event);
						if (EventKey.equals("qrscene_123456")) {// 用户未关注时,进行关注后的事件推送
							log.info("如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。");
						} else if (EventKey.equals("123456")) {
							log.info("如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者");
						}
					} else if (event.equals(WxConsts.EventType.LOCATION)) {
						log.info("上报地理位置事件");
					} else if (event.equals(WxConsts.EventType.CLICK)) {
						String EventKey = map.get("EventKey");// 事件KEY值,与自定义菜单接口中KEY值对应
						log.info("EventKey为{}", EventKey);
						log.info("点击菜单拉取消息时的事件推送");
					} else if (event.equals(WxConsts.EventType.VIEW)) {
						String EventKey = map.get("EventKey");// 事件KEY值,设置的跳转URL
						log.info("EventKey为{}", EventKey);
						log.info("点击菜单跳转链接时的事件推送");
					}
				}

			}
		}

三、在上面用到了一个工具类。

public class MessageUtil {
			/**
			 * xml转为map
			 * 
			 * @param request
			 * @return
			 * @throws DocumentException
			 * @throws IOException
			 */
			public static Map<String, String> xmlToMap(HttpServletRequest request) throws DocumentException, IOException {
				 Map<String, String> map = new HashMap<String, String>();
				 InputStream ins = request.getInputStream();
				 SAXReader reader = new SAXReader();
				 Document doc = reader.read(ins);
				 Element root = doc.getRootElement();
				 List<Element> list = root.elements();
				 for (Element e : list) {
				 map.put(e.getName(), e.getText());
				 }
				 ins.close();
				 return map;
			}
		}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值