java微信開發平台
『壹』 如何用java開發微信
說明:
本次的教程主要是對微信公眾平台開發者模式的講解,網路上很多類似文章,但很多都讓初學微信開發的人一頭霧水,所以總結自己的微信開發經驗,將微信開發的整個過程系統的列出,並對主要代碼進行講解分析,讓初學者盡快上手。
在閱讀本文之前,應對微信公眾平台的官方開發文檔有所了解,知道接收和發送的都是xml格式的數據。另外,在做內容回復時用到了圖靈機器人的api介面,這是一個自然語言解析的開放平台,可以幫我們解決整個微信開發過程中最困難的問題,此處不多講,下面會有其詳細的調用方式。
1.1 在登錄微信官方平台之後,開啟開發者模式,此時需要我們填寫url和token,所謂url就是我們自己伺服器的介面,用WechatServlet.java來實現,相關解釋已經在注釋中說明,代碼如下:
[java]view plain
- packagedemo.servlet; 
- importjava.io.BufferedReader; 
- importjava.io.IOException; 
- importjava.io.InputStream; 
- importjava.io.InputStreamReader; 
- importjava.io.OutputStream; 
- importjavax.servlet.ServletException; 
- importjavax.servlet.http.HttpServlet; 
- importjavax.servlet.http.HttpServletRequest; 
- importjavax.servlet.http.HttpServletResponse; 
- importdemo.process.WechatProcess; 
- /** 
- *微信服務端收發消息介面 
- * 
- *@authorpamchen-1 
- * 
- */ 
- { 
- /** 
- *ThedoGetmethodoftheservlet.<br> 
- * 
- *. 
- * 
- *@paramrequest 
- * 
- *@paramresponse 
- * 
- *@throwsServletException 
- *ifanerroroccurred 
- *@throwsIOException 
- *ifanerroroccurred 
- */ 
- publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) 
- throwsServletException,IOException{ 
- request.setCharacterEncoding("UTF-8"); 
- response.setCharacterEncoding("UTF-8"); 
- /**讀取接收到的xml消息*/ 
- StringBuffersb=newStringBuffer(); 
- InputStreamis=request.getInputStream(); 
- InputStreamReaderisr=newInputStreamReader(is,"UTF-8"); 
- BufferedReaderbr=newBufferedReader(isr); 
- Strings=""; 
- while((s=br.readLine())!=null){ 
- sb.append(s); 
- } 
- Stringxml=sb.toString();//次即為接收到微信端發送過來的xml數據 
- Stringresult=""; 
- /**判斷是否是微信接入激活驗證,只有首次接入驗證時才會收到echostr參數,此時需要把它直接返回*/ 
- Stringechostr=request.getParameter("echostr"); 
- if(echostr!=null&&echostr.length()>1){ 
- result=echostr; 
- }else{ 
- //正常的微信處理流程 
- result=newWechatProcess().processWechatMag(xml); 
- } 
- try{ 
- OutputStreamos=response.getOutputStream(); 
- os.write(result.getBytes("UTF-8")); 
- os.flush(); 
- os.close(); 
- }catch(Exceptione){ 
- e.printStackTrace(); 
- } 
- } 
- /** 
- *ThedoPostmethodoftheservlet.<br> 
- * 
- * 
- *post. 
- * 
- *@paramrequest 
- * 
- *@paramresponse 
- * 
- *@throwsServletException 
- *ifanerroroccurred 
- *@throwsIOException 
- *ifanerroroccurred 
- */ 
- publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) 
- throwsServletException,IOException{ 
- doGet(request,response); 
- } 
- } 
- <?xmlversion="1.0"encoding="UTF-8"?> 
- <web-appversion="2.5" 
- xmlns="http://java.sun.com/xml/ns/javaee" 
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
- <servlet> 
- <description></description> 
- <display-name></display-name> 
- <servlet-name>WechatServlet</servlet-name> 
- <servlet-class>demo.servlet.WechatServlet</servlet-class> 
- </servlet> 
- <servlet-mapping> 
- <servlet-name>WechatServlet</servlet-name> 
- <url-pattern>/wechat.do</url-pattern> 
- </servlet-mapping> 
- <welcome-file-list> 
- <welcome-file>index.jsp</welcome-file> 
- </welcome-file-list> 
- </web-app> 
- packagedemo.process; 
- importjava.util.Date; 
- importdemo.entity.ReceiveXmlEntity; 
- /** 
- *微信xml消息處理流程邏輯類 
- *@authorpamchen-1 
- * 
- */ 
- publicclassWechatProcess{ 
- /** 
- *解析處理xml、獲取智能回復結果(通過圖靈機器人api介面) 
- *@paramxml接收到的微信數據 
- *@return最終的解析結果(xml格式數據) 
- */ 
- publicStringprocessWechatMag(Stringxml){ 
- /**解析xml數據*/ 
- ReceiveXmlEntityxmlEntity=newReceiveXmlProcess().getMsgEntity(xml); 
- /**以文本消息為例,調用圖靈機器人api介面,獲取回復內容*/ 
- Stringresult=""; 
- if("text".endsWith(xmlEntity.getMsgType())){ 
- result=newTulingApiProcess().getTulingResult(xmlEntity.getContent()); 
- } 
- /**此時,如果用戶輸入的是「你好」,在經過上面的過程之後,result為「你也好」類似的內容 
- *因為最終回復給微信的也是xml格式的數據,所有需要將其封裝為文本類型返回消息 
- **/ 
- result=newFormatXmlProcess().formatXmlAnswer(xmlEntity.getFromUserName(),xmlEntity.getToUserName(),result); 
- returnresult; 
- } 
- } 
- packagedemo.entity; 
- /** 
- *接收到的微信xml實體類 
- *@authorpamchen-1 
- * 
- */ 
- publicclassReceiveXmlEntity{ 
- privateStringToUserName=""; 
- privateStringFromUserName=""; 
- privateStringCreateTime=""; 
- privateStringMsgType=""; 
- privateStringMsgId=""; 
- privateStringEvent=""; 
- privateStringEventKey=""; 
- privateStringTicket=""; 
- privateStringLatitude=""; 
- privateStringLongitude=""; 
- privateStringPrecision=""; 
- privateStringPicUrl=""; 
- privateStringMediaId=""; 
- privateStringTitle=""; 
- privateStringDescription=""; 
- privateStringUrl=""; 
- privateStringLocation_X=""; 
- privateStringLocation_Y=""; 
- privateStringScale=""; 
- privateStringLabel=""; 
- privateStringContent=""; 
- privateStringFormat=""; 
- privateStringRecognition=""; 
- publicStringgetRecognition(){ 
- returnRecognition; 
- } 
- publicvoidsetRecognition(Stringrecognition){ 
- Recognition=recognition; 
- } 
- publicStringgetFormat(){ 
- returnFormat; 
- } 
- publicvoidsetFormat(Stringformat){ 
- Format=format; 
- } 
- publicStringgetContent(){ 
- returnContent; 
- } 
- publicvoidsetContent(Stringcontent){ 
- Content=content; 
- } 
- publicStringgetLocation_X(){ 
- returnLocation_X; 
- } 
- publicvoidsetLocation_X(StringlocationX){ 
- Location_X=locationX; 
- } 
- publicStringgetLocation_Y(){ 
- returnLocation_Y; 
- } 
- publicvoidsetLocation_Y(StringlocationY){ 
- Location_Y=locationY; 
- } 
- publicStringgetScale(){ 
- returnScale; 
- } 
- publicvoidsetScale(Stringscale){ 
- Scale=scale; 
- } 
- publicStringgetLabel(){ 
- returnLabel; 
- } 
- publicvoidsetLabel(Stringlabel){ 
- Label=label; 
- } 
- publicStringgetTitle(){ 
- returnTitle; 
- } 
- publicvoidsetTitle(Stringtitle){ 
- Title=title; 
- } 
- publicStringgetDescription(){ 
- returnDescription; 
- } 
- publicvoidsetDescription(Stringdescription){ 
- Description=description; 
- } 
- publicStringgetUrl(){ 
- returnUrl; 
- } 
- publicvoidsetUrl(Stringurl){ 
- Url=url; 
- } 
- publicStringgetPicUrl(){ 
- returnPicUrl; 
- } 
- publicvoidsetPicUrl(StringpicUrl){ 
- PicUrl=picUrl; 
- } 
- publicStringgetMediaId(){ 
- returnMediaId; 
- } 
- publicvoidsetMediaId(StringmediaId){ 
- MediaId=mediaId; 
- } 
- publicStringgetEventKey(){ 
- returnEventKey; 
- } 
- publicvoidsetEventKey(StringeventKey){ 
- EventKey=eventKey; 
- } 
- publicStringgetTicket(){ 
- returnTicket; 
- } 
- publicvoidsetTicket(Stringticket){ 
- Ticket=ticket; 
- } 
- publicStringgetLatitude(){ 
- returnLatitude; 
- } 
- publicvoidsetLatitude(Stringlatitude){ 
- Latitude=latitude; 
- } 
- publicStringgetLongitude(){ 
- returnLongitude; 
- } 
- publicvoidsetLongitude(Stringlongitude){ 
- Longitude=longitude; 
- } 
- publicStringgetPrecision(){ 
- returnPrecision; 
- } 
- publicvoidsetPrecision(Stringprecision){ 
- Precision=precision; 
- } 
- publicStringgetEvent(){ 
- returnEvent; 
- } 
- publicvoidsetEvent(Stringevent){ 
- Event=event; 
- } 
- publicStringgetMsgId(){ 
- returnMsgId; 
- } 
- publicvoidsetMsgId(StringmsgId){ 
- MsgId=msgId; 
- } 
- publicStringgetToUserName(){ 
- returnToUserName; 
- } 
- publicvoidsetToUserName(StringtoUserName){ 
1.2 相應的web.xml配置信息如下,在生成WechatServlet.java的同時,可自動生成web.xml中的配置。前面所提到的url處可以填寫例如:http;//伺服器地址/項目名/wechat.do
[html]view plain
1.3 通過以上代碼,我們已經實現了微信公眾平台開發的框架,即開通開發者模式並成功接入、接收消息和發送消息這三個步驟。
下面就講解其核心部分——解析接收到的xml數據,並以文本類消息為例,通過圖靈機器人api介面實現智能回復。
2.1 首先看一下整體流程處理代碼,包括:xml數據處理、調用圖靈api、封裝返回的xml數據。
[java]view plain
2.2 解析接收到的xml數據,此處有兩個類,ReceiveXmlEntity.java和ReceiveXmlProcess.java,通過反射的機制動態調用實體類中的set方法,可以避免很多重復的判斷,提高代碼效率,代碼如下:
[java]view plain
『貳』 微信公眾平台有 java sdk 嗎
微信公眾平台有自己的java sdk的,微信公眾平台也是一個開發平台,他們對第三方開發企業開放介面,讓更多微信公眾平台運營人員使用第三方的工具,如活動推送工具,可以對接【活動盒子】的java sdk,支付工具,客服工具這些的sdk也都可以對接。
『叄』 怎麼搭建微信公眾平台java開發環境
這個比較復雜,首先需要申請一個微信公眾的訂閱好或服務號,還要開通各種介面,然後在本地安裝java開發環境,包括開發工具如eclipse,myeclipse。最重要的是能在公網有一個地址映射到本地,如果是在區域網,則需要藉助第三方工具,推薦使用花生殼、nat123,其中nat123是個比較好的工具,很好的解決了運營商80埠封鎖的問題,因為微信公眾平台配置伺服器的URL只能是80埠。
『肆』 Java 開發 微信公眾平台開發 URL驗證

和訂閱號和服務號不一樣,企業號只有企業通信錄員工才能關
注,同時,一個企業號可以配置多個類似的服務號應用,發送信息
的條數無限制,還能對信息進行安全設置,確保信息的安全性和私密
性。
企業號申請和訂閱號以及服務號申請的前期准備和步驟相
同。比如,准備好一個注冊郵箱,然後進行郵箱驗證。但是從驗證之後
的申請步驟就有所區別了。在郵箱激活後,用戶進入選擇賬號類型,選
擇點擊「企業號」,會彈出溫馨提示對話框,提醒選擇企業號後不可更
改,是否繼續操作,點擊「確認」,進入用戶信息登記頁面。
『伍』 如何使用java開發微信公眾平台介面
1、首先,要在微信公眾平台給你的賬號申請到「高級功能」 ;前台也就是菜單要想個性化設置必須要有這個功能,不然你只能添加菜單和關閉,但不能刪除,還有自動回復也是。
2、後台要看你自己了。
『陸』 微信公眾平台可以用java寫嗎
可以,我現在的項目就是java後台開發的微信公眾平台,唯一要注意的就是公眾平台openid的使用
『柒』 微信開發平台中有個介面是上傳多媒體文件,我用的是java 開發的,我怎麼樣才能在後台實現呢代碼如下:
/**
*文件上傳到微信伺服器
*@paramfileType文件類型
*@paramfilePath文件路徑
*@returnJSONObject
*@throwsException
*/
publicstaticJSONObjectsend(StringfileType,StringfilePath)throwsException{
Stringresult=null;
Filefile=newFile(filePath);
if(!file.exists()||!file.isFile()){
thrownewIOException("文件不存在");
}
/**
*第一部分
*/
URLurlObj=newURL("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token="+getAccess_token()+"&type="+fileType+"");
HttpURLConnectioncon=(HttpURLConnection)urlObj.openConnection();
con.setRequestMethod("POST");//以Post方式提交表單,默認get方式
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);//post方式不能使用緩存
//設置請求頭信息
con.setRequestProperty("Connection","Keep-Alive");
con.setRequestProperty("Charset","UTF-8");
//設置邊界
StringBOUNDARY="----------"+System.currentTimeMillis();
con.setRequestProperty("Content-Type","multipart/form-data;boundary="+BOUNDARY);
//請求正文信息
//第一部分:
StringBuildersb=newStringBuilder();
sb.append("--");//必須多兩道線
sb.append(BOUNDARY);
sb.append(" ");
sb.append("Content-Disposition:form-data;name="file";filename=""+file.getName()+"" ");
sb.append("Content-Type:application/octet-stream ");
byte[]head=sb.toString().getBytes("utf-8");
//獲得輸出流
OutputStreamout=newDataOutputStream(con.getOutputStream());
//輸出表頭
out.write(head);
//文件正文部分
//把文件已流文件的方式推入到url中
DataInputStreamin=newDataInputStream(newFileInputStream(file));
intbytes=0;
byte[]bufferOut=newbyte[1024];
while((bytes=in.read(bufferOut))!=-1){
out.write(bufferOut,0,bytes);
}
in.close();
//結尾部分
byte[]foot=(" --"+BOUNDARY+"-- ").getBytes("utf-8");//定義最後數據分隔線
out.write(foot);
out.flush();
out.close();
StringBufferbuffer=newStringBuffer();
BufferedReaderreader=null;
try{
//定義BufferedReader輸入流來讀取URL的響應
reader=newBufferedReader(newInputStreamReader(con.getInputStream()));
Stringline=null;
while((line=reader.readLine())!=null){
//System.out.println(line);
buffer.append(line);
}
if(result==null){
result=buffer.toString();
}
}catch(IOExceptione){
System.out.println("發送POST請求出現異常!"+e);
e.printStackTrace();
thrownewIOException("數據讀取異常");
}finally{
if(reader!=null){
reader.close();
}
}
JSONObjectjsonObj=newJSONObject(result);
returnjsonObj;
}
『捌』 在微信公共平台 java怎麼開發
用java編寫後台服務端,之後把服務端進行部署,把部署後的url填寫到微信公眾號開發者中心的相應位置。
