微信模板消息发送
admin
2023-02-10 11:40:15
0

整个开发流程,我在“简书” 上看到了一个完整的开发流程。

https://www.jianshu.com/p/eb0e9c4dcdfe

微信官方接口为:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277


自己开发中总结了一下,如下,方便后续备查:

①微信的模板消息,其实是微信公众号上推送给用户的一条消息记录。

在开发的时候,需要获取到用户的openId(用户关注公众号就会产生一个唯一的openId),然后通过openId 推送给对应的用户,这样用户就能收到这条消息了。

②订阅号必须升级为服务号才能获取“模板消息” 的接口权限,并且必须通过认证。(服务号接功能更多,但是群发消息由订阅号的每天一条变成了一个月4条。)

③开通模板消息的时候会让我们选择2个行业,并且每月只能修改一次。我们可以搜索模板,直接使用通用模板。如果我们需要自定义模板,那么就需要自己申请。

④微信公众号的tokenId,有效期只有2个小时,所以我们需要采用定时器每一个小时50分钟去获取一次,同时,在程序启动完成之后要获取一次。

⑤系统用户登录的时候我们就判断是否有openId,如果没有,那么就去获取openId 。(我们OA系统是开发在微信公众号里面的,所以用户登录系统前就已经关注了公众号)

登录接口调用成功后,调用首页接口,接口中判断如果没有openId,那么就跳转到A接口(微信需要的接口去获取openId,然后存入表中),A接口最后再次请求首页,这时已经有OpenId了,那么直接展示首页内容。

微信模板消息开发流程:
①微信用户点击登录调用loginController中的login_login_wechat
成功后调用weixin_index

 /**访问系统首页·微信版
	 * @param changeMenu:切换菜单参数
	 * @return
	 */
	@RequestMapping(value="/weixin_index")
	public ModelAndView login_weixin_index(HttpServletRequest request,HttpServletResponse response){
		ModelAndView mv = this.getModelAndView();
		PageData pd = new PageData();
		pd = this.getPageData();
		try{
			Session session = Jurisdiction.getSession();
			User user = (User)session.getAttribute(Const.sessionUser);				//读取session中的用户信息(单独用户信息)
			if (user != null && user.getRole()!=null && !user.getRole().getRights().trim().equals("")) {
				session.setAttribute(Const.sessionUserName, user.getUserName());				//放入用户名到session
				this.getRemortIP(user.getUserName());	//更新登录IP
				mv.setViewName("weixin/index/main");
				mv.addObject("user", user);
				
				/*
				 * 登录后,如果openId为空,则保存openId到用户表中 TODO
				 */
//				String weixinOpenId = user.getWeixinOpenId();
//				if(Tools.isEmpty(weixinOpenId)){
//					String ssString = WechatUtils.getUserAuthURL(true,
//							weixinConstant.wReturnPrefix + request.getContextPath()
//							+ "/wechatLoginNoOpenId.do","0");
//					response.sendRedirect(ssString);
//				}
				
				// 我的待办·待审核数量
				String userId = user.getId();
				List todoList  = new ArrayList<>();
				//登录人待办
 				
			}else {
				mv.setViewName("weixin/index/login");//session失效后跳转登录页面
			}
		} catch(Exception e){
			mv.setViewName("weixin/index/login");
			logger.error(e.getMessage(), e);
		}
		
		mv.addObject("pd",pd);
		return mv;
	}



/**
	 * 微信登录,没有openId
	 * @return
	 */
	@RequestMapping(value="/wechatLoginNoOpenId")
	@ResponseBody
	public void wechatLoginNoOpenId(HttpServletRequest request,HttpServletResponse response){
		try {
			String code = ServletRequestUtils.getStringParameter(request, "code");
			String result = WechatUtils.getUserOpenId(code);
			if (result != null) {
				JSONObject jSONObject = JSONObject.fromObject(result);
				String openId = jSONObject.getString("openid");
				System.err.println("======================当前登录用户登录微信openId:"+openId);
				User user =(User)Jurisdiction.getSession().getAttribute(Const.sessionUser);
				user.setWeixinOpenId(openId);
				userService.editU(user);
				//再次请求微信首页,这次openId已经有值了直接进入首页
				response.sendRedirect(weixinConstant.wReturnPrefix + request.getContextPath()
				+ "/weixin_index.do");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

web.xml 中
系统系统完成后获取一次微信的tokenId。

  
  


模板消息的发送示例,请参考 InformController.java 中的goSend方法

或WechatUtils.java 中的main方法。


将所有的 逗号,替换为 分号

"lijianbo,yangmi,li".replace(/,/g, ";" );





相关内容

热门资讯

多地官宣结婚生娃发钱,最高20... 近日,广东佛山顺德陈村镇大都村通过股东会议表决,将生育结婚奖励政策纳入《佛山市顺德区陈村镇大都村股份...
蒋万安、卢秀燕、谢国梁开记者会... 海峡导报综合报道 民进党当局核准台湾“中联”19批油品即日起重新上架,台“食药署”23日首度公布共计...
西门子洗衣机不工作了什么原因 西门子洗衣机不工作了什么原因1、可能是使用时间太久了,导致洗衣机内部零件出现了问题。2、可能是长时间...
不工作时西门子洗衣机一直响 1、洗衣机的电源电压过低导致西门子洗衣机一直响。2、洗衣机的电容器故障。3、洗衣机的转子卡住导致西门...
博世洗衣机泡沫过多机器不转了 可能是系统部分堵塞。要立即修复单次洗涤,在分配器抽屉上加一顶织物调节剂即可,最好在机器下次用水冲洗时...
14名残疾人用AI做了部爆款短... 执笔 王波日前,宁波众闻道软件科技有限公司负责人龙杰收到了6月份AI短剧收益报告。在公司当月上线的4...
小米洗衣机不运转了怎么修 小米洗衣机不运转,可能是由于多种原因引起的,可能是由于电源问题、电机损坏、控制面板故障等原因。下面是...
杂牌洗衣机不转了怎么办 如果杂牌洗衣机出现不转的故障,可能会造成很多麻烦。无法使用洗衣机会影响我们的日常生活,但是针对这个问...
晒出317万年终奖后,腾讯一员... 近日,有网友晒出疑似腾讯内部发布的通报:WXG某项目组负责人叶某在职期间,因私自泄露公司敏感信息,被...
公安部:国际打击电信网络诈骗联... 今天(24日)上午,国务院新闻办公室举行“开局起步‘十五五’”系列主题新闻发布会,公安部相关负责人介...