接入微信公衆平臺開發

接入微信公衆平臺開發
1.開發好的程序在自己電腦通過瀏覽器是可以直接訪問的;
另外一臺電腦是沒有辦法訪問的,我們可以讓這些電腦連接
到同一個局域網中,然後通過ip訪問;
2.在互聯網上其他的人是看不到我們開發的程序的,出發把程序發到到雲服務器上;
在開發的過程中我們需要程序需要和微信服務器做對接,
如果微信服務器不能找到我們程序就沒有辦法對接,所以在開發時,
我們首先需要做內網穿透;
3.內網穿透目的時爲了讓我們的項目可以被互聯網上的其他電腦訪問;
內網穿透軟件:花生殼,nat123,ngrok(免費,不是很穩定)
內網穿透原理:
4.ngrok:http://www.ngrok.cc/
1.下載,註冊賬號;
2.開通隧道
協議:http
名稱:隨便寫;
前置域名:隨便寫;
本地端口: localhost:80(本地項目訪問端口)
其他不需要填寫;
3.複製隧道id,啓動ngrok客戶端;
c.開發接入
1.開發接入準備
a.登錄微信公衆號平臺(需要修改開發》基本配置);
b.個人賬號下很多的功能都無法使用,微信提供了測試賬號申請
(微信公衆號平臺–>服務號–》開發文檔–》開始開發—》接口測試號申請);
c. 接入微信公衆平臺開發,開發者需要按照如下步驟完成:
1、填寫服務器配置
2、驗證服務器地址的有效性
3、依據接口文檔實現業務邏輯
2.url 內網穿透的url+項目名+方法名
token:需要和代碼中的一致;

@RequestMapping("/index")
public String index(HttpServletRequest request) {	
    String signature = request.getParameter("signature");
    String timestamp = request.getParameter("timestamp");
    String nonce = request.getParameter("nonce");
    String echostr = request.getParameter("echostr");
    System.out.println(signature+"\n"+timestamp+"\n"+nonce+"\n"+echostr);   
    if(check(timestamp,nonce,signature,TOKEN)) {
    	 System.out.println("接入成功");
         PrintWriter writer = response.getWriter();
	    	writer.write(echostr);
	    	writer.flush();
	    	writer.close();
    }else {
    	 System.out.println("接入失敗");
    }
    
	return "index";
}
/**
 * 校驗參數
 * @param timestamp
 * @param nonce
 * @param signature
 * @param token
 * @return
 */
private boolean check(String timestamp, String nonce, String signature,String token) {
	//1.將token、timestamp、nonce三個參數進行字典序排序   
	  String [] str = {token,timestamp,nonce};
	  Arrays.sort(str);
	  //2)將三個參數字符串拼接成一個字符串進行sha1加密 
	  String strs = str[0]+str[1]+str[2];
	  String mysig= sha1(strs);
	  System.out.println("mysig:---->"+mysig);
	  //3)開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信
	 return mysig.equals(signature);
}

private String sha1(String strs) {
	// TODO Auto-generated method stub
	try {
		//獲取加密對象
		MessageDigest md = MessageDigest.getInstance("sha1");
		//加密處理
	    byte[] digest = md.digest(strs.getBytes());
	    //處理加密結果
	    char [] chars = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
	    StringBuilder sb = new StringBuilder();
	    for (byte b : digest) {
		 sb.append((chars)[(b>>4)&15]);
		 sb.append(chars[b&15]);
		}
	    return sb.toString();
	} catch (NoSuchAlgorithmException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return null;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章