重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

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

时间:2020-09-14 19:00:07 作者:重庆seo小潘 来源:
相信很多人对微信开发已经不那么陌生,我也是从一个微信开发的菜鸟经过各种问题的折磨,然后去搜索引擎搜索各种文章阅读,但是基本都是零散的资料,没有一个统一、系统的阐述微信应用如何开发。作者结合自己的实际开发经验,归纳整理出来分享给微信开发的入

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

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

准备工作

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;privateString Token;privateString echostr;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { connect(request,response);}@Overrideprotected 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 voidmanageMessage(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();}@Overridepublic 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微信开发新手必看的接入指南介绍的详细内容,更多请关注小潘博客其它相关文章!