博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA微信开发-新手接入指南
阅读量:6984 次
发布时间:2019-06-27

本文共 7572 字,大约阅读时间需要 25 分钟。

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

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

 

 准备工作

 

 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     *      * 

接入连接生效验证

*/ 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 * *

用来接收微信公众平台的验证

*/ 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 * *

XML组装组件

*/ 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
业务转发组件

* */ 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("
"); revert.append("
"); revert.append("
"); revert.append("
"+jsonObject.get("CreateTime")+"
"); revert.append("
"); revert.append("
"); revert.append("
0
"); revert.append("
"); 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,申请成功,如下所示:

 

 

 

 

 

 

填入URL:http://外网IP/TestWeixin/weixin 【必须80端】

 

填入token :  test123【需要与代码中的token保持一致,Token的长度是有限制的,根据笔者的经验最好不超过10个字符。】

 

 

转载于:https://www.cnblogs.com/liangjq/p/4024481.html

你可能感兴趣的文章
元数据
查看>>
Web Essentials之Browser Link
查看>>
js修改后没反应-看看是不是取的缓存
查看>>
05. Web大前端时代之:HTML5+CSS3入门系列~H5 多媒体系
查看>>
使用GhostDoc为代码生成注释文档
查看>>
Kettle的设计
查看>>
零代码如何打造自己的实时监控预警系统
查看>>
一段关于写书的对话。
查看>>
分布式监控系统Zabbix-3.0.3-完整安装记录 - 添加shell脚本监控
查看>>
Android之查看外部依赖jar的源代码_android private libralies does not allow modifications to source...
查看>>
Redis中的关系查询(范围查询,模糊查询等...)
查看>>
Git常用命令总结【转】
查看>>
【转载】GUID vs INT Debate
查看>>
Hadoop Hive概念学习系列之hive里的分区(九)
查看>>
间歇性失业了
查看>>
【Xamarin.iOS】使用UrhoSharp将3D模型带入增强现实生活
查看>>
Linux 内核驱动--多点触摸接口【转】
查看>>
Button在android程序中的初始化思路
查看>>
iOS: 数据持久化方案
查看>>
iOS开发-UICollectionView实现瀑布流
查看>>