href mode ssa shu from ole on() pin 申请
整个开发流程,我在 "简书" 上看到了一个完整的开发流程。
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")
- publicModelAndView login_weixin_index(HttpServletRequest request,HttpServletResponse response){
- ModelAndView mv =this.getModelAndView();
- PageData pd =newPageData();
- 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 =newArrayList<>();
- //登录人待办
- }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
- publicvoid 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方法。
来源: http://www.bubuko.com/infodetail-2450408.html