站内搜索

JAVA微信开发新手必看的接入指南介绍

相信很多人对微信开发已经不那么陌生,我也是从一个微信开发的菜鸟经过各种问题的折磨,然后去搜索引擎搜索各种文章阅读,但是基本都是零散的资料,没有一个统一、系统的阐述微信应用如何开发。作者结合自己的实际开发经验,归纳整理出来分享给微信开发的入门者或正在研究的开发者。

这篇文章主要阐述如何搭建一个微信开发平台。古人云:“磨刀不负砍才工”。我们开发应用也需要准备一些必要的条件。

准备工作

1. 下载 Jdk1.7 安装

2. 下载 Tomcat 7.0

3. 下载 Myeclipse 6.5

4. 下载 Json-lib第三方jar .

1. 申请一个公网IP地址,发布自己的应用。

例如: 192.168.1.102

2. 打开myeclipse 创建一个工程

如下图所示:

JAVA微信开发新手必看的接入指南介绍

3. 创建一个微信应用接入Servlet类

JAVA微信开发新手必看的接入指南介绍

JAVA实现类 :WeixinServlet

package com.wx.servlet;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Arrays;import java.util.logging.Logger;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;import net.sf.json.xml.XMLSerializer; /** * @author haibing.xiao * @since jdk1.6 * @version 1.0 */public class WeixinServlet extends HttpServlet{	private Logger log =Logger.getLogger(this.getClass().getName());	private static final long serialVersionUID = 1L;	private   String Token;	private   String echostr;	@Override	protected void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		 connect(request,response);	}	@Override	protected void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		message(request,response);	}	 		/**	 *@author haibing.xiao	 *@return  	 *@exception 	 *@param	 * 	 * <p>接入连接生效验证</p>	 */	private void connect(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{		log.info("RemoteAddr: "+ request.getRemoteAddr());		log.info("QueryString: "+ request.getQueryString());		 if(!accessing(request, response)){			 log.info("服务器接入失败.......");			 return ;		 }		String echostr=getEchostr();		if(echostr!=null && !"".equals(echostr)){				log.info("服务器接入生效..........");				response.getWriter().print(echostr);//完成相互认证		}	}	/**	 * @author haibing.xiao	 * Date 2013-05-29	 * @return boolean	 * @exception ServletException, IOException	 * @param	 *	 *<p>用来接收微信公众平台的验证</p> 	 */	private boolean accessing(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");		if( isEmpty(signature)){			return false;		}		if(isEmpty(timestamp)){			return false;		}		if(isEmpty(nonce)){			return false;		}		if(isEmpty(echostr)){			return false;		}		String[] ArrTmp = { Token, timestamp, nonce };		Arrays.sort(ArrTmp);		StringBuffer sb = new StringBuffer();		for (int i = 0; i < ArrTmp.length; i++) {			sb.append(ArrTmp[i]);		}		String pwd = Encrypt(sb.toString());		 	    log.info("signature:"+signature+"timestamp:"+timestamp+"nonce:"+nonce+"pwd:"+pwd+"echostr:"+echostr);	    	    if(trim(pwd).equals(trim(signature))){	    	this.echostr =echostr;	    	return true;	    }else{	    	return false;	    }	}	private String Encrypt(String strSrc) {		MessageDigest md = null;		String strDes = null;		byte[] bt = strSrc.getBytes();		try {			md = MessageDigest.getInstance("SHA-1");			md.update(bt);			strDes = bytes2Hex(md.digest()); //to HexString		} catch (NoSuchAlgorithmException e) {			System.out.println("Invalid algorithm.");			return null;		}		return strDes;	}	public String bytes2Hex(byte[] bts) {		String des = "";		String tmp = null;		for (int i = 0; i < bts.length; i++) {			tmp = (Integer.toHexString(bts[i] & 0xFF));			if (tmp.length() == 1) {				des += "0";			}			des += tmp;		}		return des;	}		 	public String getEchostr(){		return echostr;	}	/**	 *@author haibing.xiao	 *@return  	 *@exception ServletException, IOException	 *@param	 * 	 * <p>XML组装组件</p>	 */	 private void message(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{		 			InputStream is = request.getInputStream();			// 取HTTP请求流长度			int size = request.getContentLength();			// 用于缓存每次读取的数据			byte[] buffer = new byte[size];			// 用于存放结果的数组			byte[] xmldataByte = new byte[size];			int count = 0;			int rbyte = 0;			// 循环读取			while (count < size) { 				// 每次实际读取长度存于rbyte中				rbyte = is.read(buffer); 				for(int i=0;i<rbyte;i++) {					xmldataByte[count + i] = buffer[i];				}				count += rbyte;			}			is.close();			String requestStr = new String(xmldataByte, "UTF-8");									try{				manageMessage(requestStr,request,response);			}catch(Exception e){				e.printStackTrace();			}					} 	 	/**	 * @author haibing.xiao	 * @return 	 * @exception ServletException, IOException	 * @param	 * 	 * <p>业务转发组件</p>	 * 	 */	  private void  manageMessage(String requestStr,HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{		    		    String responseStr;		   			try {				 XMLSerializer xmlSerializer=new XMLSerializer();				 JSONObject jsonObject =(JSONObject) xmlSerializer.read(requestStr);				 String event =jsonObject.getString("Event");				 String msgtype =jsonObject.getString("MsgType");				 if("CLICK".equals(event) && "event".equals(msgtype)){ //菜单click事件					 String eventkey =jsonObject.getString("EventKey");					 if("hytd_001".equals(eventkey)){ // hytd_001 这是好友团队按钮的标志值						 jsonObject.put("Content", "欢迎使用好友团队菜单click按钮.");					 }									 }				 responseStr =creatRevertText(jsonObject);//创建XML				 log.info("responseStr:"+responseStr);				 OutputStream os =response.getOutputStream();				 os.write(responseStr.getBytes("UTF-8"));			}   catch (Exception e) {				e.printStackTrace();			}				}	private String creatRevertText(JSONObject jsonObject){	    	StringBuffer revert =new StringBuffer();	    	revert.append("<xml>");	    	revert.append("<ToUserName><![CDATA["+jsonObject.get("ToUserName")+"]]></ToUserName>");	    	revert.append("<FromUserName><![CDATA["+jsonObject.get("FromUserName")+"]]></FromUserName>");	    	revert.append("<CreateTime>"+jsonObject.get("CreateTime")+"</CreateTime>");	    	revert.append("<MsgType><![CDATA[text]]></MsgType>");	    	revert.append("<Content><![CDATA["+jsonObject.get("Content")+"]]></Content>");	    	revert.append("<FuncFlag>0</FuncFlag>");	    	revert.append("</xml>");	    	return revert.toString();	    }	@Override	public void init() throws ServletException {		Token="test123";	}	 	private boolean isEmpty(String str){		return null ==str || "".equals(str) ? true :false;	}	private String trim(String str){		return null !=str  ? str.trim() : str;	}	}

4. 本地部署应用 访问http://localhost:端口号/上下文/wenxin

JAVA微信开发新手必看的接入指南介绍

5 .申请成为开发者

访问 http://mp.weixin.qq.com ,开启开发者模式。填入URL和taken,申请成功,如下所示:

JAVA微信开发新手必看的接入指南介绍

以上就是JAVA微信开发新手必看的接入指南介绍的详细内容,更多请关注php中文网其它相关文章!

  • 上一篇:ES6新特性开发微信小程序(3)
  • 下一篇:详解微信jsapi开发如何获取jsapi_ticket