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

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

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

准备工作

1. 下载 Jdk1.7 安装

2. 下载 Tomcat 7.0

3. 下载 Myeclipse 6.5

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

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

例如: 192.168.1.102

2. 打开myeclipse 创建一个工程

如下图所示:

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

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

5 .申请成为开发者

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

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

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: Java微信开发
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:ES6新特性开发微信小程序(3)

相关资讯