微信公共平台 JAVA server 例子

这个微信公共平台是我很早之前写的,大概是去年的八月份吧. 网上很多开发的例子都是用PHP 直接写成的。

而现在网上都出现了免费的整体微信公共平台.........所以搭建成本越来越低。

本文只打算介绍 java Servlet 接入 微信公共平台, 很类似 一般的JAVA web工程.

下面是servlet 主类 

package org.luairan.weixin;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Weixin extends HttpServlet {

	private static final long serialVersionUID = -3351872544860340352L;
	private  static final String TOKEN="luairan";
	private static final String PUBLICUSER="";
	public Weixin() {
		super();
	}

	public 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");
		/*************************************************/
		StringBuilder sha1 = new StringBuilder();
		String[] ss = new String[] { TOKEN, timestamp, nonce };
		Arrays.sort(ss);
		for (String s : ss) {
			sha1.append(s);
		}
		/*************************************************/
		/*************************************************/
		SHA_1Coder sha = new SHA_1Coder();
		sha.setSourceString(sha1.toString());
		String result = sha.getResult();
		/*************************************************/
		/*************************************************/
		if (result.equals(signature))
			response.getWriter().write(echostr);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/************************************************/
		/************************************************/
		ServletInputStream sis = request.getInputStream();
		WeiXinTool weixintool=new WeiXinTool();
		weixintool.getInfoFromServletInputStream(sis);
		sis.close();
		/************************************************/
		/************************************************/
		
		weixintool.proceduer();
		
		/************************************************/
		/************************************************/
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		weixintool.writeTextMessage(out, PUBLICUSER);
		out.close();
	}
}



SHA_1Coder 类:

package org.luairan.weixin;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA_1Coder {
	private String source=null;
	private byte[] byteArray=null;
	private String target=null;
	private MessageDigest md=null;
	public void setSourceString(String source){
		this.source=source;
	}
	public String getResult(){
		procedure();
		return target;
	}
	public SHA_1Coder(){
		
	}
	private void procedure() {
			try {
				md = MessageDigest.getInstance("SHA-1");
			} catch (NoSuchAlgorithmException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			byteArray = md.digest(source.getBytes());
		 target = bytetoString(byteArray);
	}
	
	public  String bytetoString(byte[] digest) {
		StringBuilder sb = new StringBuilder();
		String tempStr = "";
		for (int i = 0; i < digest.length; i++) {
			tempStr = (Integer.toHexString(digest[i] & 0xff));
			if (tempStr.length() == 1) {
				sb.append("0" + tempStr);
			} else {
				sb.append(tempStr);
			}
		}
		return sb.toString().toLowerCase();
	}
}

WeiXinTool 类:

package org.luairan.weixin;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletInputStream;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.hibernate.Query;
import org.hibernate.Session;
import org.luairan.dao.Dao;
import org.luairan.dao.beam.HibernateSessionFactory;
import org.luairan.factory.DaoFactory;
import org.luairan.module.WeiXinDiscuss;

public class WeiXinTool {
	private Map<String, String> map = null;
	private String message=null;
	private Dao dao=DaoFactory.getDaoBean();
	public void getInfoFromServletInputStream(ServletInputStream sis) {
		map = null;
		SAXReader saxr = new SAXReader();
		try {
			map = new HashMap<String, String>();
			Document document = saxr.read(sis);
			Element er = document.getRootElement();
			Iterator<?> it = er.elementIterator();
			while (it.hasNext()) {
				Element temp = (Element) it.next();
				map.put(temp.getName(), temp.getText());
				System.out.println(temp.getName() + ":" + temp.getStringValue());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	public void writeTextMessage(PrintWriter out, String publicUser) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss",Locale.SIMPLIFIED_CHINESE);
		out.write("<xml>");
		out.write("<ToUserName><![CDATA[" + map.get("FromUserName")+ "]]></ToUserName>");
		out.write("<FromUserName><![CDATA[" + publicUser+ "]]></FromUserName>");
		out.write("<CreateTime>" + sdf.format(new Date()) + "</CreateTime>");
		out.write("<MsgType><![CDATA[text]]></MsgType>");
		out.write("<Content><![CDATA[" + message + "]]></Content>");
		out.write("</xml>");
		out.flush();
	}

	@SuppressWarnings("unchecked")
	public void proceduer() {
		String msgtype = map.get("MsgType");
		if (msgtype.equals("event")) {
			message="欢迎关注该公共账户号~想吐槽食堂请直接输入'餐厅(或窗口,菜品)'+空格+评分(1-100)+空格+评价 即可,输入'最好吃'查看其他同学的分享";
		}
		if (msgtype.equals("text")) {
			String content=map.get("Content");
			
			String input[] =content.split(" ");
			for(String temp:input){
				System.out.println(temp);
			}
			boolean flag=false;
			int point=0;
			try {
				point=Integer.parseInt(input[1]);
				if(point>0&&point<100){
					Session session = HibernateSessionFactory.getSession();
					Long a=0L;
					try {
						Date a2=new Date();
						Calendar ca1=Calendar.getInstance();
						ca1.setTime(a2);
						ca1.add(Calendar.HOUR_OF_DAY, -2);
						 Query q=session.createQuery("select count(*) from WeiXinDiscuss where usernum='"+map.get("FromUserName")+"' and date between ? and ?");
						 q.setParameter(0, ca1.getTime());
						 q.setParameter(1, a2);
						a= (Long) q.uniqueResult();
						
						System.out.println(a);
					} catch (Exception e) {
						e.printStackTrace();
					} finally {
						HibernateSessionFactory.closeSession();
					}
					if(a==0L) flag=true;
					else{
						message="对不起,您的操作过于频繁,请耐心等待";
					}
				}
			} catch (Exception e) {
				
			}
			if(input.length==3&&flag){
				WeiXinDiscuss temp=new WeiXinDiscuss();
				temp.setDate(new Date());
				temp.setDiscuss(input[2]);
				temp.setHead(input[0]);
				temp.setPoint(point);
				temp.setUsernum(map.get("FromUserName"));
				dao.save(temp);
				message="收到评论,谢谢你的评价O(∩_∩)O哈哈~";
			}
			if(content.equals("最好吃")){
				List<WeiXinDiscuss> list=(List<WeiXinDiscuss>) dao.getListFromHql("from WeiXinDiscuss order by point , date desc ", null, 5);
				
				StringBuilder sb=new StringBuilder();
				for(WeiXinDiscuss temp:list){
					sb.append(temp);
				}
				message=sb.toString();
			}
			
				if(message==null)
				message="对不起,您的输入有误,请重新输入";
			
			
		}

	}
}

WeiXinTool 这个类主要是用来接收处理数据。


其实大部分都是卡壳在SHA_1 加密上面。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值