微信模板消息发送
整个开发流程,我在“简书” 上看到了一个完整的开发流程。
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/**访问系统首页·微信版*@paramchangeMenu:切换菜单参数*@return*/@RequestMapping(value="/weixin_index")publicModelAndViewlogin_weixin_index(HttpServletRequestrequest,HttpServletResponseresponse){ModelAndViewmv=this.getModelAndView();PageDatapd=newPageData();pd=this.getPageData();try{Sessionsession=Jurisdiction.getSession();Useruser=(User)session.getAttribute(Const.sessionUser);//读取session中的用户信息(单独用户信息)if(user!=null&&user.getRole()!=null&&!user.getRole().getRights().trim().equals("")){session.setAttribute(Const.sessionUserName,user.getUserName());//放入用户名到sessionthis.getRemortIP(user.getUserName());//更新登录IPmv.setViewName("weixin/index/main");mv.addObject("user",user);/**登录后,如果openId为空,则保存openId到用户表中TODO*///StringweixinOpenId=user.getWeixinOpenId();//if(Tools.isEmpty(weixinOpenId)){//StringssString=WechatUtils.getUserAuthURL(true,//weixinConstant.wReturnPrefix+request.getContextPath()//+"/wechatLoginNoOpenId.do","0");//response.sendRedirect(ssString);//}//我的待办·待审核数量StringuserId=user.getId();List<DBTodo>todoList=newArrayList<>();//登录人待办}else{mv.setViewName("weixin/index/login");//session失效后跳转登录页面}}catch(Exceptione){mv.setViewName("weixin/index/login");logger.error(e.getMessage(),e);}mv.addObject("pd",pd);returnmv;}/***微信登录,没有openId*@return*/@RequestMapping(value="/wechatLoginNoOpenId")@ResponseBodypublicvoidwechatLoginNoOpenId(HttpServletRequestrequest,HttpServletResponseresponse){try{Stringcode=ServletRequestUtils.getStringParameter(request,"code");Stringresult=WechatUtils.getUserOpenId(code);if(result!=null){JSONObjectjSONObject=JSONObject.fromObject(result);StringopenId=jSONObject.getString("openid");System.err.println("======================当前登录用户登录微信openId:"+openId);Useruser=(User)Jurisdiction.getSession().getAttribute(Const.sessionUser);user.setWeixinOpenId(openId);userService.editU(user);//再次请求微信首页,这次openId已经有值了直接进入首页response.sendRedirect(weixinConstant.wReturnPrefix+request.getContextPath()+"/weixin_index.do");}}catch(Exceptione){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,";");
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。