国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah applet WeChat pembangunan WeChat JAVA微信開發(fā)新手必看的接入指南介紹

JAVA微信開發(fā)新手必看的接入指南介紹

Mar 26, 2017 pm 01:54 PM

相信很多人對微信開發(fā)已經(jīng)不那么陌生,我也是從一個(gè)微信開發(fā)的菜鳥經(jīng)過各種問題的折磨,然后去搜索引擎搜索各種文章閱讀,但是基本都是零散的資料,沒有一個(gè)統(tǒng)一、系統(tǒng)的闡述微信應(yīng)用如何開發(fā)。作者結(jié)合自己的實(shí)際開發(fā)經(jīng)驗(yàn),歸納整理出來分享給微信開發(fā)的入門者或正在研究的開發(fā)者。

這篇文章主要闡述如何搭建一個(gè)微信開發(fā)平臺。古人云:“磨刀不負(fù)砍才工”。我們開發(fā)應(yīng)用也需要準(zhǔn)備一些必要的條件。

?準(zhǔn)備工作

?1.? 下載 Jdk1.7? 安裝

?2.? 下載 Tomcat 7.0

?3.? 下載 Myeclipse 6.5

?4.? 下載 Json-lib第三方j(luò)ar .

1.??????申請一個(gè)公網(wǎng)IP地址,發(fā)布自己的應(yīng)用。

例如: 192.168.1.102

2.??????打開myeclipse 創(chuàng)建一個(gè)工程

如下圖所示:

?JAVA微信開發(fā)新手必看的接入指南介紹

3.? 創(chuàng)建一個(gè)微信應(yīng)用接入Servlet類

?JAVA微信開發(fā)新手必看的接入指南介紹

JAVA實(shí)現(xiàn)類 :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>接入連接生效驗(yàn)證</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("服務(wù)器接入失敗.......");
			?return?;
		?}
		String?echostr=getEchostr();
		if(echostr!=null?&&?!"".equals(echostr)){
				log.info("服務(wù)器接入生效..........");
				response.getWriter().print(echostr);//完成相互認(rèn)證
		}
	}
	/**
	?*?@author?haibing.xiao
	?*?Date?2013-05-29
	?*?@return?boolean
	?*?@exception?ServletException,?IOException
	?*?@param
	?*
	?*<p>用來接收微信公眾平臺的驗(yàn)證</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();
			//?用于緩存每次讀取的數(shù)據(jù)
			byte[]?buffer?=?new?byte[size];
			//?用于存放結(jié)果的數(shù)組
			byte[]?xmldataByte?=?new?byte[size];
			int?count?=?0;
			int?rbyte?=?0;
			//?循環(huán)讀取
			while?(count?<?size)?{?
				//?每次實(shí)際讀取長度存于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>業(yè)務(wù)轉(zhuǎn)發(fā)組件</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?這是好友團(tuán)隊(duì)按鈕的標(biāo)志值
						?jsonObject.put("Content",?"歡迎使用好友團(tuán)隊(duì)菜單click按鈕.");
					?}
					
				?}
				?responseStr?=creatRevertText(jsonObject);//創(chuàng)建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.?? 本地部署應(yīng)用? 訪問http://localhost:端口號/上下文/wenxin?

?JAVA微信開發(fā)新手必看的接入指南介紹

5? .申請成為開發(fā)者

訪問 http://mp.weixin.qq.com?? ,開啟開發(fā)者模式。填入U(xiǎn)RL和taken,申請成功,如下所示:

JAVA微信開發(fā)新手必看的接入指南介紹



Atas ialah kandungan terperinci JAVA微信開發(fā)新手必看的接入指南介紹. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276