微信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;
}
}
相关推荐
微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台小程序微信小程序项目实例源码-本地电商平台...
C#版微信项目利用了微信的SDK来实现对微信接口的调用。 3. **扫码登录机制**:扫码登录涉及到微信服务器、用户手机端微信应用以及目标应用三者之间的交互。用户扫描二维码后,微信服务器会向目标应用发送一个授权码...
爬虫+数据分析实战项目 本代码为《爬虫+数据分析》的源代码,以及Python有趣系列代码,涵盖的内容有。 - 微信 - 豆瓣 - POI - 手机微博 - 简书 - 知乎 - 网络爬虫 - 数据分析 - 机器学习 - 深度学习 供大家学习和...
本项目实例是“微信商城小程序源码”,旨在为开发者提供一个完整的纯前端项目,适合于进行毕业设计或者作为学习微信小程序开发的基础。 这个项目涉及到的技术栈主要包括: 1. **CSS**:层叠样式表(Cascading ...
微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例——家居团购微信小程序项目实例...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
微信小程序项目实例——备忘录小程序项目实例源码(95分以上课设大作业项目).zip 高分必过项目,需要小程序项目实战和课程设计大作业的可以放心下载,代码完整下载即用,无需修改确保可以运行。 微信小程序项目...
微信小程序项目实例—微信小程序音乐播放器源码(毕业设计).zip 已获导师指导并通过的高分项目,代码完整下载即用,无需修改确保可以运行。也可作为期末大作业和课程设计。 微信小程序项目实例—微信小程序音乐...
微信小程序Demo-新闻客户端实例-附完整源代码.rar,是一个专为微信小程序开发者设计的新闻客户端示例项目。该项目不仅提供了完整的源代码,还包含了一套详细的设计文档和开发指南,帮助开发者快速理解项目结构,实现...
在这个“微信商城小程序”项目实例中,开发者可以深入理解微信小程序的开发流程和核心功能。 首先,我们来看"shangcheng.rar"和"小程序商城.rar"这两个文件。它们很可能包含了商城小程序的前端源代码。在微信小程序...
Python项目-实例-25 微信好友头像墙.zip
微信小程序项目实例—物业交费缴费小程序项目源码+教程.zip 纯手打高分项目,可作为毕业设计、课程设计和期末大作业等等,下载即用确保可以运行。 微信小程序项目实例—物业交费缴费小程序项目源码+教程.zip 纯手...
在实际使用时,首先要在ThinkPHP5.*的配置文件中设置好企业微信的AppID和AppSecret,然后通过extend类库加载SDK,创建实例,调用相应的方法。例如,获取access_token的代码可能如下: ```php use Extend\Weworkapi\...
微信小程序项目实例——五子棋微信小程序源码(95分以上课程设计).zip 高分必过项目,需要小程序项目实战和课程设计的可以放心下载,代码完整下载即用,无需修改确保可以运行。 微信小程序项目实例——五子棋微信...
【微信小程序项目实例——今日美食】是一个以移动开发技术为核心,专注于美食分享的应用。这个小程序旨在为用户带来丰富的美食制作教程,提供详细的食材配料和步骤指导,让用户在家中也能轻松制作出美味佳肴。 首先...
这个压缩包文件“wechat”很可能包含了多个微信小程序的实例项目,提供完整的源代码,非常适合学习和参考。 微信小程序的开发涉及以下几个核心知识点: 1. **框架结构**:微信小程序基于一套自定义的XML-like语法...
这个项目实例是关于“烘焙电商小程序”的源码,非常适合那些想要学习微信小程序开发或者进行毕业设计的学生。下面将详细探讨这个项目中涉及的技术栈、开发流程以及可能的学习要点。 首先,我们要了解的是微信小程序...
微信小程序项目实例—酒店预约微信小程序源码(95分以上课设).zip 高分小程序课程设计,代码完整下载即用,无需修改确保可以运行,也可以作为小程序毕业设计和期末大作业。高分必备项目,小程序实战项目。 微信小...
本项目实例“智能用电”是微信小程序在实际生活场景中的应用,旨在帮助用户实现家电的智能配置,优化电能使用,提高节能效果。 1. **微信小程序开发环境** 微信小程序的开发需要用到微信开发者工具,它提供了代码...
【微信小程序项目实例-摇色子】是一款基于微信平台的小型游戏应用,旨在提供一个简单有趣的用户体验。在这款小程序中,用户能够模拟摇动色子并得到1到9之间的随机数字,增加了线上互动的乐趣。接下来,我们将深入...