閱讀653 返回首頁    go 阿裏雲 go 技術社區[雲棲]


百度雲和微信賬號接入

利用百度雲平台運行我們自己的服務端項目,在平台上線運行。利用這個項目對應的域名將其配置到微信公眾平台,並填寫token值。(這裏的token值是我們自定義的一個字符串,它配置在服務端項目)在手機微信客戶端搜索你的微信公眾平台公眾號(訂閱號),當然通過二維碼會更快速準確,嗬嗬。

下麵我們先重服務器端開始。

進入百度雲平台的管理控製台(請大家進入舊版--右上角)https://developer.baidu.com/dev點擊創建應用,並創建一個手機web應用。


出現以下頁麵後,點擊雲環境:


創建域名,選擇開發語言(我用的是Java),選著版本管理器(我用的是svn),點擊確定:


等待後彈出提示創建成功後,點擊確定,跳轉到如下頁麵---------創建版本:


點擊創建版本後,會出現兩種選擇,一種是在線創建項目,然後在線編輯發布,本人還是覺得第二種順手,上傳war包,即將本地建好的web項目發布為war包,然後上傳,在上線,我們就以上傳war包方式為例:這裏我們就暫且停下:開始來編輯我們需要的web項目。


在eclipse中心建一個web項目(tomcat服務器)新建MainServer.java

需要導入的jar包:大家沒有的可以到我的雲盤去下載:點擊打開鏈接

  1. <span style="font-family:SimHei;font-size:12px;">package com.weixin.zfeng.server;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.security.MessageDigest;  
  7. import java.util.Arrays;  
  8. import java.util.Date;  
  9.   
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.ServletInputStream;  
  12. import javax.servlet.http.HttpServlet;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import javax.servlet.http.HttpServletResponse;  
  15. import org.dom4j.Document;  
  16. import org.dom4j.DocumentHelper;  
  17. import org.dom4j.Element;  
  18.   
  19. import com.weixin.zfeng.utils.Weather;  
  20.   
  21.   
  22. public class MainServer extends HttpServlet{  
  23.     //這裏是你定義的token值  
  24.     private final String TOKEN = "haha";  
  25.     @Override  
  26.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  27.             throws ServletException, IOException {  
  28.         //取出隨機字符串  
  29.         String echostr=req.getParameter("echostr");    
  30.         if(null==echostr||echostr.isEmpty()){    
  31.             responseMsg(req,resp);    
  32.         }else{    
  33.             if(this.checkSignature(req)){    
  34.                 resp.getWriter().print(echostr);   
  35.             }else{    
  36.                 resp.getWriter().print("");                                                                                                                                                                                                                                                                                                                                             
  37.             }    
  38.         }    
  39.           
  40.     }  
  41.       
  42.     @Override  
  43.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  44.             throws ServletException, IOException {  
  45.         doPost(req, resp);  
  46.     }  
  47.       
  48.     //回複  
  49.     public void responseMsg(HttpServletRequest req,HttpServletResponse resp) throws IOException{    
  50.         String postStr=null;    
  51.         try{    
  52.             postStr=this.readStreamParameter(req.getInputStream());    
  53.         }catch(Exception e){    
  54.             e.printStackTrace();    
  55.         }    
  56.         //System.out.println(postStr);    
  57.         if (null!=postStr&&!postStr.isEmpty()){    
  58.             Document document=null;    
  59.             try{    
  60.                 document = DocumentHelper.parseText(postStr);   
  61.                 if(null==document){    
  62.                     resp.getWriter().print("");  
  63.                     return;    
  64.                 }    
  65.             }catch(Exception e){    
  66.                 e.printStackTrace();    
  67.             }    
  68.               
  69.             Element root=document.getRootElement();    
  70.             String fromUsername = root.elementText("FromUserName");    
  71.             String toUsername = root.elementText("ToUserName");    
  72.             String keyword = root.elementTextTrim("Content");    
  73.             String time = new Date().getTime()+"";    
  74.             String textTpl = "<xml>"+    
  75.                         "<ToUserName><![CDATA[%1$s]]></ToUserName>"+    
  76.                         "<FromUserName><![CDATA[%2$s]]></FromUserName>"+    
  77.                         "<CreateTime>%3$s</CreateTime>"+    
  78.                         "<MsgType><![CDATA[%4$s]]></MsgType>"+    
  79.                         "<Content><![CDATA[%5$s]]></Content>"+    
  80.                         "<FuncFlag>0</FuncFlag>"+    
  81.                         "</xml>";                 
  82.               
  83.               
  84.             //發送消息類型  
  85.             String msgType = "text";    
  86.             String contentStr = "";  
  87.             String resultStr="";//返回消息  
  88.               
  89.             //關注訂閱號後,返回的提示  
  90.             if(null==keyword||keyword.equals("")){    
  91.                 contentStr = "hi,how are you! I'm server and with baiduyun";  
  92.             }  
  93.           //微信客戶端發送time,服務器解析到後返回當前時間  
  94.             else if(keyword.equals("time")){  
  95.                 contentStr = new Date().toString();  
  96.             }  
  97.             resultStr = String.format(textTpl, fromUsername, toUsername, time, msgType, contentStr+"---zhaofeng");    
  98.             resp.getWriter().print(resultStr);  
  99.     
  100.         }else {    
  101.             resp.getWriter().print("");    
  102.         }    
  103.         resp.getWriter().flush();  
  104.         resp.getWriter().close();  
  105.     }    
  106.     //檢查請求  
  107.     public boolean checkSignature(HttpServletRequest request){    
  108.         //這裏是微信進行安全驗證的四個值,由於token為明文,所以前用前三個值進行加密計算後的值與token對比(不具體描述)  
  109.         String signature = request.getParameter("signature");    
  110.         String timestamp = request.getParameter("timestamp");    
  111.         String nonce = request.getParameter("nonce");    
  112.         String token=TOKEN;    
  113.           
  114.         String[] tmpArr={token,timestamp,nonce};    
  115.         Arrays.sort(tmpArr);    
  116.         String tmpStr=this.ArrayToString(tmpArr);    
  117.         tmpStr=this.SHA1Encode(tmpStr);    
  118.         if(tmpStr.equalsIgnoreCase(signature)){    
  119.             return true;    
  120.         }else{    
  121.             return false;    
  122.         }    
  123.     }    
  124.       
  125.     public String SHA1Encode(String sourceString) {    
  126.         String resultString = null;    
  127.         try {    
  128.            resultString = new String(sourceString);    
  129.            MessageDigest md = MessageDigest.getInstance("SHA-1");    
  130.            resultString = byte2hexString(md.digest(resultString.getBytes()));    
  131.         } catch (Exception ex) {    
  132.         }    
  133.         return resultString;    
  134.     }   
  135.       
  136.       
  137.     private String byte2hexString(byte[] bytes) {  
  138.         StringBuffer buf = new StringBuffer(bytes.length * 2);    
  139.         for (int i = 0; i < bytes.length; i++) {    
  140.             if (((int) bytes[i] & 0xff) < 0x10) {    
  141.                 buf.append("0");    
  142.             }    
  143.             buf.append(Long.toString((int) bytes[i] & 0xff16));    
  144.         }    
  145.         return buf.toString().toUpperCase();    
  146.     }  
  147.   
  148.     //  
  149.     public String ArrayToString(String [] arr){    
  150.         StringBuffer bf = new StringBuffer();    
  151.         for(int i = 0; i < arr.length; i++){    
  152.          bf.append(arr[i]);    
  153.         }    
  154.         return bf.toString();    
  155.     }    
  156.     
  157.     //流中讀取數據  
  158.     public String readStreamParameter(ServletInputStream in){    
  159.         StringBuilder buffer = new StringBuilder();    
  160.         BufferedReader reader=null;    
  161.         try{    
  162.             reader = new BufferedReader(new InputStreamReader(in));    
  163.             String line=null;    
  164.             while((line = reader.readLine())!=null){    
  165.                 buffer.append(line);    
  166.             }    
  167.         }catch(Exception e){    
  168.             e.printStackTrace();    
  169.         }finally{    
  170.             if(null!=reader){    
  171.                 try {    
  172.                     reader.close();    
  173.                 } catch (IOException e) {    
  174.                     e.printStackTrace();    
  175.                 }    
  176.             }    
  177.         }    
  178.         return buffer.toString();    
  179.     }    
  180. }  
  181. </span>  
這裏是一個最基本的骨架代碼,大家可以在上麵進行跟多豐富的擴展。接著我們將項目導出為war包。接著就是剛剛說到的上傳war包了,這裏就不再講了。上傳成功後點擊上線(哦這裏有個下提示,當然這裏不存在,免費用戶每次隻能上傳50M以內哦),等待提示“代碼已生效”後,出現:


接著我們就應該配置微信公眾平台了:(申請注冊微信公眾平台要求比較嚴格,需要審核幾天到N天不等)。https://mp.weixin.qq.com/

前不久我是借用別個的賬號進行測試的,我的公眾號都幾天了還沒有通過,哎~所以這裏沒法給大家截圖。其實微信裏邊配置很簡單,就是一個訪問項目的域名,和一個token值,填正確這兩個後就可以確定了,然後就是關注賬號進行測試了。我的上一個測試用的是return這個號,大家關注後發送time試下效果(相同代碼)

這裏的域名就是你創建web項目時寫的mytestserverforweixin.duapp.com注意這裏並不是完全正確的域名,還需要在前麵加上你的版本號:1.mytestserverforweixin.duapp.com。希望過幾天我的公眾號能夠通過,

到時候給大家截兩張圖更好。

最後更新:2017-04-03 12:53:44

  上一篇:go 調度子係統3_周期調度器
  下一篇:go Android獲取係統基本信息