微信模板消息發送

整個開發流程,我在「簡書」 上看到了一個完整的開發流程。
java

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

微信官方接口爲:微信

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


本身開發中總結了一下,以下,方便後續備查:app

①微信的模板消息,實際上是微信公衆號上推送給用戶的一條消息記錄。ide

在開發的時候,須要獲取到用戶的openId(用戶關注公衆號就會產生一個惟一的openId),而後經過openId 推送給對應的用戶,這樣用戶就能收到這條消息了。this

②訂閱號必須升級爲服務號才能獲取「模板消息」 的接口權限,而且必須經過認證。(服務號接功能更多,可是羣發消息由訂閱號的天天一條變成了一個月4條。)code

③開通模板消息的時候會讓咱們選擇2個行業,而且每個月只能修改一次。咱們能夠搜索模板,直接使用通用模板。若是咱們須要自定義模板,那麼就須要本身申請。orm

④微信公衆號的tokenId,有效期只有2個小時,因此咱們須要採用定時器每個小時50分鐘去獲取一次,同時,在程序啓動完成以後要獲取一次。xml

⑤系統用戶登陸的時候咱們就判斷是否有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<DBTodo> 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。

  <!-- 程序啓動完成執行-->
  <!-- <servlet>  
    <servlet-name>init</servlet-name>  
    <servlet-class>com.kentra.listener.WebAppInitListener</servlet-class>  
    <load-on-startup>3</load-on-startup>
  </servlet> -->


模板消息的發送示例,請參考 InformController.java 中的goSend方法

或WechatUtils.java 中的main方法。


將全部的 逗號,替換爲 分號

"lijianbo,yangmi,li".replace(/,/g, ";" );
相關文章
相關標籤/搜索