JAVA微信开发-新手接入指南
相信很多人对微信开发已经不那么陌生,我也是从一个微信开发的菜鸟经过各种问题的折磨,然后去搜索引擎搜索各种文章阅读,但是基本都是零散的资料,没有一个统一、系统的阐述微信应用如何开发。作者结合自己的实际开发经验,归纳整理出来分享给微信开发的入门者或正在研究的开发者。
这篇文章主要阐述如何搭建一个微信开发平台。古人云:“磨刀不负砍才工”。我们开发应用也需要准备一些必要的条件。
准备工作
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;@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 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);//创建XMLlog.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
5 .申请成为开发者
访问 http://mp.weixin.qq.com ,开启开发者模式。填入URL和taken,申请成功,如下所示:
填入URL:http://外网IP/TestWeixin/weixin 【必须80端】
填入token : test123【需要与代码中的token保持一致,Token的长度是有限制的,根据笔者的经验最好不超过10个字符。】
提供微信教材与微信源码工程+一对一入门辅导,非诚勿扰:
咨询QQ:(928271079,提供优质的服务)
JAVA微信开发-新手接入指南相关推荐
- Java微信开发之接入验证
最近在做微信开发,最开始尝试了很多次都不成功.昨天尝试成功了,还没有开始进一步开发,想把昨天尝试成功的过程记录一下.我是查了很久的资料也尝试过很多方法,现在我把我遇到的问题和解决方法记录一下.我是部署 ...
- C#微信公众号开发系列教程二(新手接入指南)
此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...
- Java微信开发_00_资源汇总贴
1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) 2.微信企业号开发接口文档(ht ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- Java微信开发入门
前言: 1.先简单介绍一下微信公众号的开发者模式和编辑模式,玩过微信公众号的同志都知道,在微信公众号后台功能栏里面可以编辑消息自动回复,关键字回复,自定义菜单等功能,这些都是在视图页面下编辑的,叫编辑 ...
- java微信开发-消息接收和自动回复
0.前提条件 1.需要一个公众平台帐号(测试帐号也可以) 2.平台需要被人关注 1.导入jar commons-beanutils-1.8.0.jar commons-collections-3.1. ...
- oracle java认证_如何通过Oracle的Java认证-开发人员实用指南
oracle java认证 by javinpaul 由javinpaul 如何通过Oracle的Java认证-开发人员实用指南 (How to Pass Oracle's Java Certific ...
- C#微信开发小白成长教程二(新手接入指南,附视频)
距离第一讲又已经过去了一个多星期了,本打算一周更新一讲的,奈何实在太忙.最近也在群里发现有一部分人已经可以熟练调用微信的部分接口但却不是很清楚微信公众平台接收消息的一个处理机制.本讲就来介绍下怎么接入 ...
- java微信开发平台_Java微信公众平台开发(1) 接入微信公众平台
前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接! (一)接入流程解析 通 ...
最新文章
- Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能
- COCI CONTEST #3 29.11.2014 KAMIONI
- 服务器磁盘扩展容量操作流程
- 最热门的100个Web2.0网站
- 支付宝SDK ios快捷支付
- Java 线程池 Executor浅入浅出
- 明解C语言第四章习题
- 移动应用前端h5框架汇总
- php对联广告,js 左右悬浮对联广告代码示例
- 机器学习(周志华) 第七章贝叶斯分类器
- 希尔伯特变换(Hilbert Transform)的性质
- 去哪儿2017校园招聘笔试题——获得文件扩展名filename extension
- idea中启动vue项目
- 3-regexp-golang 爬虫基础正则的使用
- 外贸企业邮箱如何撤回已发送的邮件,发错的邮件怎么撤回?
- 【Alpha版本】冲刺阶段——Day 5
- iOS 知识-常用小技巧大杂烩
- 【目标检测】MMDetection专栏之MMDetection安装|一
- shopify 结账_是自我结账的机器邪恶化身
- HDU 1254推箱子