`
2277259257
  • 浏览: 515227 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

微信----项目实例

 
阅读更多

 

微信servlet开发

 

一、web.xml中注册servlet类

<!--微信信息拦截 -->
 <servlet>
  <servlet-name>wxServlet</servlet-name>
  <servlet-class>com.outsource.weixin.client.servlet.WxServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>wxServlet</servlet-name>
  <url-pattern>/wxServlet.php</url-pattern>
 </servlet-mapping>

 

二、处理业务的servlet类

package com.outsource.weixin.client.servlet;

/**

  *微信信息控制层

*/

public class WxServlet extends HttpServlet {
 private static final long serialVersionUID = -2776902810130266533L;
 private static Logger log = Logger.getLogger(WxServlet.class.getName());

 // 自定义 token
 private String TOKEN = "weixin_kz";
 
 public static String wsUrl="http://115.29.49.7";

 private WxService wxService;
 private StatUserService statUserService;


 @Override
 public void init() throws ServletException {
           super.init();
           ServletContext servletContext = this.getServletContext();    
           WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);    
           wxService = (WxService)ctx.getBean("wxService");
           statUserService = (StatUserService)ctx.getBean("statUserService");
 }

 @Override
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  String xmlReceive = null;
  String xmlSend = null;
  String msgContent=null;
  
  response.setContentType("application/xml");
  response.setCharacterEncoding("UTF-8");
  request.setCharacterEncoding("UTF-8");
  PrintWriter out = response.getWriter();
  String openId=null;
  
  try {
   xmlReceive = WxUtil.inputStream2String(request.getInputStream());----获取xml形式的参数
   try {
    Map map = WxUtil.xml2Map(xmlReceive);                                        ----把xml形式的参数转换成map键值对形式
    openId=(String) map.get("FromUserName");
    SysUser user=statUserService.getSysUser(openId);

    //证明学生没有绑定系统账号
    if(user==null || user.getSysUserId().equals("")){
     xmlSend=wxService.sendText(map,"欢迎关注论文系统微信公众号,请立即绑定认证学生信息," +
       "点击<a href='"+wsUrl+"/vsm/weixin/stuwx/jsp/stuUserBound.jsp?openId="+openId+"'>绑定认证.</a>"); 
    }else{
     if(map.get("Content")!=null &&!"".equals(map.get("Content")))
      map.put("Content", map.get("Content").toString().trim().toLowerCase());
      
      if (map.get("MsgType").equals("text")) {
        msgContent=map.get("Content").toString();
      }else if(map.get("MsgType").equals("event")){
       //订阅
       if(map.get("Event").equals("subscribe")){
        xmlSend=wxService.sendText(map,"欢迎 "+user.getRealName()+"同学\n登录论文系统微信公众号");
       }
       //取消订阅
       else if(map.get("Event").equals("unsubscribe")){
        statUserService.Unbind(openId);
       }
       else if(map.get("Event").equals("LOCATION")){
        xmlSend=wxService.getBaiduAddress(wxService.getBaiduGeocoding(map),map);
       }else if(map.get("Event").equals("SCAN")){
        System.out.println(map);
       }else if(map.get("Event").equals("CLICK")){
        //我的信息
        if(map.get("EventKey").equals("me")){
         xmlSend=wxService.sendText(map,"【学号】:"+user.getLoginName()+"\n" + "【姓名】:"+user.getRealName());
        }//上传周记
        else if(map.get("EventKey").equals("sczj")){
         IsWeeklyEntity iwe=statUserService.getIsWeekly(openId);
         //不能写周记
         if(iwe.getStatus()==0){
          xmlSend=wxService.sendText(map,"实习未开始不能上传周记!");
         }else if(iwe.getStatus()==1){
          List<Article>  articleList=new ArrayList();
          Article a=new Article();
          a.setTitle("上传第"+iwe.getWeeklyCount()+"周记");
          a.setDescription("请按时上传周记!");
          a.setPicUrl(wsUrl+"/vsm/upload/image/zj.jpg");
          a.setUrl(wsUrl+"/vsm/weixin/stuwx/jsp/uploadWeekly.jsp?openId="+openId+"&weeklyCount="+iwe.getWeeklyCount());
          articleList.add(a);
          xmlSend=wxService.sendArticle(map, articleList);
         }else if(iwe.getStatus()==2){
          xmlSend=wxService.sendText(map,"实习已结束!");
         }
        }
        
        //周记评分查看
        else if(map.get("EventKey").equals("zjpfck")){
         List<Article>  articleList=new ArrayList();
         Article a=new Article();
         a.setTitle("周记评分查看");
         a.setDescription("周记评分查看");
         a.setPicUrl(wsUrl+"/vsm/upload/image/zj.jpg");
         a.setUrl(wsUrl+"/vsm/upwk.do?getPageWeeklyNotes&openId="+openId);
         articleList.add(a);
         xmlSend=wxService.sendArticle(map, articleList);
        }//学生评教
        else if(map.get("EventKey").equals("xspj")){
         XspjEntity xj = statUserService.getGuide(openId);
         if(xj.getStatus()==0){
          xmlSend=wxService.sendText(map,"未分配指导老师,不能评教!");
         }else if(xj.getStatus()==1){
          List<Article>  articleList=new ArrayList();
          Article a=new Article();
          a.setTitle("学生评教");
          a.setDescription("学生评教");
          a.setPicUrl(wsUrl+"/vsm/upload/image/pj.jpg");
          a.setUrl(wsUrl+"/vsm/weixin/stuwx/jsp/teachingEvaluation.jsp?openId="+openId+"&guideId="+xj.getGuideId()+"&guideName="+xj.getGuideName()+"&studentId="+xj.getStudentId());
          System.out.println(wsUrl+"/vsm/weixin/stuwx/jsp/teachingEvaluation.jsp?openId="+openId+"&guideId="+xj.getGuideId()+"&guideName="+xj.getGuideName()+"&studentId="+xj.getStudentId());
          articleList.add(a);
          xmlSend=wxService.sendArticle(map, articleList);
         }else if(xj.getStatus()==2){
          xmlSend=wxService.sendText(map,"你已对指导老师【"+xj.getGuideName()+"】评教过了,评分为"+xj.getScore()+"分");
         }
        }
        //成绩查看
        else if(map.get("EventKey").equals("sxcjck")){
         UserPracticeEntity upe=statUserService.getUserPractice(openId);
         if(upe!=null && !upe.getStudent().equals("")){
          xmlSend=wxService.sendText(map,"【指导老师】:"+upe.getTeacherName()+
            "\n" +"【周记成绩】:"+upe.getWeeklyScore()+
            "\n" +"【实习成绩】:"+upe.getReportScore()+
            "\n" +"【总成绩】:"+upe.getTotalGrade()+
            "\n" +"【总评价】:"+upe.getGradeLabel());
         }else{
          xmlSend=wxService.sendText(map,"暂无");
         }
        }
        //答辩安排查看
        else if(map.get("EventKey").equals("dbap")){
         ReplyPlanEntity replyPlan = statUserService.getReplyPlan(openId);
         if(replyPlan!=null && !replyPlan.getGroupName().equals("")){
          xmlSend=wxService.sendText(map,"【小组名称】:"+replyPlan.getGroupName()+
            "\n" +"【答辩时间】:"+replyPlan.getReplyDateTimeChina()+
            "\n" +"【答辩地址】:"+replyPlan.getReplyAddress()+
            "\n" +"【组长】:"+replyPlan.getStudentLeaderName()+
            "\n" +"【联系电话】:"+replyPlan.getStudentLeaderTel()+
            "\n" +"【答辩人数】:"+replyPlan.getReplyCount());
         }else{
          xmlSend=wxService.sendText(map,"暂无");
         }
        }//论文成绩查看
        else if(map.get("EventKey").equals("lwcjck")){
         StatUserEntity statUserEntity = statUserService.getStatUser(openId);
         if(statUserEntity!=null && !statUserEntity.getRealName().equals("")){
         xmlSend=wxService.sendText(map,"【姓名】:"+statUserEntity.getRealName()+
           "\n" +"【课题名称】:"+statUserEntity.getTopicName()+
           "\n" +"【论文成绩】:"+statUserEntity.getThesisGrade()+
           "\n" +"【答辩成绩】:"+statUserEntity.getReplyGrade()+
           "\n" +"【总成绩】:"+statUserEntity.getTotalGrade());
         }else{
          xmlSend=wxService.sendText(map,"暂无");
         }
        }//中期检查成绩查看
        else if(map.get("EventKey").equals("zqjccjck")){
         ThesisCheckEntity thesisCheckEntity = statUserService.getCheck(openId);
         if(thesisCheckEntity!=null && !thesisCheckEntity.getStudentName().equals("")){
         xmlSend=wxService.sendText(map,"【姓名】:"+thesisCheckEntity.getStudentName()+
           "\n" +"【课题名称】:"+thesisCheckEntity.getTopicName()+
           "\n" +"【评价成绩】:"+thesisCheckEntity.getTotalEvaluate()+" 分"+
           "\n" +"【评价建议】:"+thesisCheckEntity.getSuggest());
         }else{
          xmlSend=wxService.sendText(map,"暂无");
         }
        }
        else{
         xmlSend=wxService.sendText(map,"暂无");
        }
       }
      }else if(map.get("MsgType").equals("location")){
      }else if(map.get("MsgType").equals("image")){
//       xmlSend=wxService.setMakefriends(map);
      }else if(map.get("MsgType").equals("voice")){
      }
      
    }
    System.out.println(xmlSend);
    out.write(xmlSend);
   } catch (Exception e) {
    e.printStackTrace();
    log.error(e.getMessage());
    
   }
  } finally {
   if (out != null) {
    out.flush();
    out.close();
    out = null;
   }
  }

 }

 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {

  String signature = request.getParameter("signature");     ----微信加密签名
  String timestamp = request.getParameter("timestamp");  ----时间戳
  String nonce = request.getParameter("nonce");               ----随机数
  String echostr = request.getParameter("echostr");           ----随机字符串

  // 重写totring方法,得到三个参数的拼接字符串
  List<String> list = new ArrayList<String>(3) {
   private static final long serialVersionUID = 2621444383666420433L;

   public String toString() {
    return this.get(0) + this.get(1) + this.get(2);
   }
  };
  list.add(TOKEN);
  list.add(timestamp);
  list.add(nonce);
  Collections.sort(list);// 排序
  String tmpStr = WxUtil.Encrypt(list.toString());// SHA-1加密
  Writer out = response.getWriter();
  if (signature.equals(tmpStr)) {
   out.write(echostr);// 请求验证成功,返回随机码
  } else {
   out.write("");
  }
  out.flush();
  out.close();
  out = null;
 }

}

分享到:
评论

相关推荐

    1-微信小程序项目实例源码-本地电商平台小程序.zip

    微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台...

    C#版微信 - 框架完整 - 已实现扫码登录.zip

    C#版微信项目利用了微信的SDK来实现对微信接口的调用。 3. **扫码登录机制**:扫码登录涉及到微信服务器、用户手机端微信应用以及目标应用三者之间的交互。用户扫描二维码后,微信服务器会向目标应用发送一个授权码...

    微信爬虫项目实例.zip

    爬虫+数据分析实战项目 本代码为《爬虫+数据分析》的源代码,以及Python有趣系列代码,涵盖的内容有。 - 微信 - 豆瓣 - POI - 手机微博 - 简书 - 知乎 - 网络爬虫 - 数据分析 - 机器学习 - 深度学习 供大家学习和...

    微信小程序项目实例-微信商城小程序源码纯前端项目

    本项目实例是“微信商城小程序源码”,旨在为开发者提供一个完整的纯前端项目,适合于进行毕业设计或者作为学习微信小程序开发的基础。 这个项目涉及到的技术栈主要包括: 1. **CSS**:层叠样式表(Cascading ...

    微信小程序项目实例——家居团购

    微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例...

    【微信小程序-毕设期末大作业】班夫旅游实例源码微信小程序源码.zip

    【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...

    微信小程序项目实例-备忘录小程序项目实例源码(95分以上课设大作业项目).zip

    微信小程序项目实例——备忘录小程序项目实例源码(95分以上课设大作业项目).zip 高分必过项目,需要小程序项目实战和课程设计大作业的可以放心下载,代码完整下载即用,无需修改确保可以运行。 微信小程序项目...

    微信小程序项目实例-微信小程序音乐播放器源码(毕业设计).zip

    微信小程序项目实例—微信小程序音乐播放器源码(毕业设计).zip 已获导师指导并通过的高分项目,代码完整下载即用,无需修改确保可以运行。也可作为期末大作业和课程设计。 微信小程序项目实例—微信小程序音乐...

    微信小程序Demo-新闻客户端实例-附完整源代码.rar

    微信小程序Demo-新闻客户端实例-附完整源代码.rar,是一个专为微信小程序开发者设计的新闻客户端示例项目。该项目不仅提供了完整的源代码,还包含了一套详细的设计文档和开发指南,帮助开发者快速理解项目结构,实现...

    微信小程序开发项目实例-微信商城小程序(源码).zip

    在这个“微信商城小程序”项目实例中,开发者可以深入理解微信小程序的开发流程和核心功能。 首先,我们来看"shangcheng.rar"和"小程序商城.rar"这两个文件。它们很可能包含了商城小程序的前端源代码。在微信小程序...

    Python项目-实例-25 微信好友头像墙.zip

    Python项目-实例-25 微信好友头像墙.zip

    微信小程序项目实例-物业交费缴费小程序项目源码+教程.zip

    微信小程序项目实例—物业交费缴费小程序项目源码+教程.zip 纯手打高分项目,可作为毕业设计、课程设计和期末大作业等等,下载即用确保可以运行。 微信小程序项目实例—物业交费缴费小程序项目源码+教程.zip 纯手...

    企业微信PHP-SDK(ThinkPHP5.*版本)

    在实际使用时,首先要在ThinkPHP5.*的配置文件中设置好企业微信的AppID和AppSecret,然后通过extend类库加载SDK,创建实例,调用相应的方法。例如,获取access_token的代码可能如下: ```php use Extend\Weworkapi\...

    微信小程序项目实例-五子棋微信小程序源码(95分以上课程设计).zip

    微信小程序项目实例——五子棋微信小程序源码(95分以上课程设计).zip 高分必过项目,需要小程序项目实战和课程设计的可以放心下载,代码完整下载即用,无需修改确保可以运行。 微信小程序项目实例——五子棋微信...

    微信小程序项目实例——今日美食

    【微信小程序项目实例——今日美食】是一个以移动开发技术为核心,专注于美食分享的应用。这个小程序旨在为用户带来丰富的美食制作教程,提供详细的食材配料和步骤指导,让用户在家中也能轻松制作出美味佳肴。 首先...

    微信小程序 实例汇总 完整项目源代码

    这个压缩包文件“wechat”很可能包含了多个微信小程序的实例项目,提供完整的源代码,非常适合学习和参考。 微信小程序的开发涉及以下几个核心知识点: 1. **框架结构**:微信小程序基于一套自定义的XML-like语法...

    微信小程序项目实例-烘焙电商小程序源码纯前端项目

    这个项目实例是关于“烘焙电商小程序”的源码,非常适合那些想要学习微信小程序开发或者进行毕业设计的学生。下面将详细探讨这个项目中涉及的技术栈、开发流程以及可能的学习要点。 首先,我们要了解的是微信小程序...

    微信小程序项目实例-酒店预约微信小程序源码(95分以上课设).zip

    微信小程序项目实例—酒店预约微信小程序源码(95分以上课设).zip 高分小程序课程设计,代码完整下载即用,无需修改确保可以运行,也可以作为小程序毕业设计和期末大作业。高分必备项目,小程序实战项目。 微信小...

    微信小程序项目实例-智能用电

    本项目实例“智能用电”是微信小程序在实际生活场景中的应用,旨在帮助用户实现家电的智能配置,优化电能使用,提高节能效果。 1. **微信小程序开发环境** 微信小程序的开发需要用到微信开发者工具,它提供了代码...

    微信小程序项目实例-摇色子

    【微信小程序项目实例-摇色子】是一款基于微信平台的小型游戏应用,旨在提供一个简单有趣的用户体验。在这款小程序中,用户能够模拟摇动色子并得到1到9之间的随机数字,增加了线上互动的乐趣。接下来,我们将深入...

Global site tag (gtag.js) - Google Analytics