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

编程入门 行业动态 更新时间:2024-10-12 12:28:05

微信开发 php java,JAVA微信开发新手<a href=https://www.elefans.com/category/jswz/34/1769817.html style=必看的接入指南介绍"/>

微信开发 php java,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实现类 :WeixinServletpackage 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

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

*

*

业务转发组件

*

*/

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 .申请成为开发者

访问 ,开启开发者模式。填入URL和taken,申请成功,如下所示:

更多推荐

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

本文发布于:2024-03-10 06:12:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727194.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:必看   新手   指南   php   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!