使用JAVA開發微信公眾平臺(一)——環境搭建與開發接入

一、初始微信公眾平臺

微信公眾平臺,即我們平時所說的“公眾號”,曾用名“官方平臺”、“媒體平臺”,但最終命名為“公眾平臺”。從微信的命名我可以發現,公眾平臺不只是官方、媒體使用的平臺,而是對所有公眾都開放的統一平臺。

喜歡本文,請點擊下方喜歡按鈕唄!??

微信公眾平臺地址:https://mp.weixin.qq.com/

微信公眾平臺公分4大板塊:訂閱號、服務號、小程序、企業號。按照微信2016年公開課規劃,企業號后續將與企業微信合并,因此我們主要針對前三部分開始講解:

微信平臺四大板塊

簡單的對比一下前三者的區別以及本次課程即后續課程的講解重點:

1、訂閱號和服務號均為傳統意義的“公眾號”,具有消息群發能力,詳細區別可在官方平臺查看:http://kf.qq.com/faq/140806zARbmm140826M36RJF.html我們將注重于服務能力開發,而在服務方面,兩者開發模式完全相同,只不過服務號可以使用更多的服務接口,而訂閱號則是“閹割版”的服務號。因此,后續課程我們將使用服務號為案例進行操作。

2、微信小程序,原本為“微信應用號”,即一個根植在微信生態系統內的APP。因蘋果和谷歌的限制,“應用號”未上線便已夭折,取而代之的是適度閹割功能的“微信小程序”,而其堪比原生APP的操作體驗,也使得小程序成為時下大火的開發方向。而杰瑞教育全新的H5開發課程,也將加入時下火爆的微信小程序開發。

二、開發賬號準備

1、賬號注冊

進入微信公眾平臺https://mp.weixin.qq.com,點擊右上角立即注冊,選擇“服務號”或“訂閱號”注冊(服務號僅限機構用戶注冊,個人用戶只能選擇訂閱號)

注冊時需填寫一系列信息,根據提示填寫即可,此處不做贅述。

2、測試賬號申請

如果暫時不想注冊賬號,或者無法注冊服務號,可選擇官方提供的測試賬號申請。申請地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login點擊后掃描二維碼,即可獲得一個測試賬號,擁有服務號全部權限。

測試賬號界面

三、開發環境準備

1、外網映射工具

微信公眾平臺在訪問后臺時,必須提供能夠正確訪問的外網地址,微信平臺對后臺URL的要求有兩點:

①必須能夠用公網訪問②必須使用80端口

要實現以上兩點,我們可以選擇購買外網服務器,例如:阿里云、百度云、騰訊云…都是不錯的選擇。如果沒有服務器,可以選擇用外網映射工具,將我們的內網鏈接映射為公網,比較不錯的映射軟件有:花生殼、ngrok、nat123等…

這幾款軟件都可以百度很容易搜索到并下載,下面簡單講解一下用法:

① Ngrock:

進入dos環境,切換到ngrock所在盤符,輸入ngrock8080回車:

ngrock操作

回車后等待一會,即可得到公網鏈接,下圖所示陰影區域給出的鏈接,即可直接訪問本機127.0.0.1:8080下的鏈接內容,分別是http協議和https協議對應的地址:

ngrock操作成功界面

②花生殼、nat123,均可安裝軟件后,在軟件中操作,詳情可查看百度經驗:http://jingyan.baidu.com/article/363872ec361d3f6e4ba16ff9.html此處不做贅述

四、微信公眾平臺數據交互原理

搭建好公網訪問地址后,我們自己開發的后臺代碼就可以放到公網地址了,那么用戶是怎么樣訪問到我們的代碼呢?

下面我們來看一下微信公眾平臺的數據交互原理:

從上圖可以看到,微信公眾平臺實際只是起到一個橋梁作用,實際處理業務、提供服務的代碼,依然是放在我們自己的服務器或者公網映射上面。

那么,我們就可以在我們自己的電腦(服務器)上面編寫后臺代碼,并通過映射工具提供公網能夠訪問的URL,然后將此URL綁定到微信后臺即可。

五、開發模式接入

下面將進入實際開發過程,我們可以參考官方提供的開發文檔:https://mp.weixin.qq.com/wiki

1、填寫服務器配置

進入微信公眾平臺,點擊左側【開發——基本配置】,選擇【服務器配置】。即可進入配置頁面:

微信平臺服務器配置

其中:

URL:即我們上述所說的后臺服務器公網訪問地址

Token:開發者自定的驗證口令

EncodingAESKey:隨機字符串,如果消息加解密方式采用安全模式才需驗證

2、驗證消息是否有效

當我們點擊提交時,微信服務器將會發送一個Get請求,到我們上述地址,同時傳遞四個參數:

微信服務器Get請求參數

我們通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。加密/校驗流程如下:

下面,我們實現代碼操作。

六、開發接入后臺代碼

1、使用MyEclipse創建Web項目,并新建一個servlet:

新建一個servlet

2、在servlet的doGet方法中,獲取上述四個校驗參數:

獲取上述四個校驗參數

3、編寫工具類,進行校驗方法的操作:

編寫工具類

校驗步驟,參考上述【五-2】三大步操作流程

校驗步驟

使用sha1加密方法↓

sha1加密方法

4、 Servlet中調用校驗方法,并驗證結果,如果檢驗成功,將得到的隨機字符串eahostr原路返回結果給微信平臺:

Servlet中調用校驗方法

至此,Servlet及Check工具類,編寫完成。

5、啟動Tomcat,將Servlet的本地地址(例如本機為:localhost:8080/WeiXin/servlet/WeiXinServlet)進行公網映射,參照上述第三大部分內容,進行公網映射,確定公網地址能夠正確訪問。

我將直接將將代碼放到公網服務器進行訪問。獲得如下地址:http://www.jredu100.com/WeiXin/servlet/WeiXinServlet

七、配置公眾平臺后臺

進入微信后臺配置相關信息:

微信后臺配置相關信息

點擊提交,微信將發送Get指令到Servlet,并調用doGet方法,進行我們編寫的驗證操作,最后如果順利返回隨機字符串,則綁定成功。

八、源碼共享

1、 Servlet源碼(只保留doGet部分):

public void doGet(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");

PrintWriter out = response.getWriter();

if(CheckUtil.checkSignature(signature, timestamp, nonce)){

//如果校驗成功,將得到的隨機字符串原路返回

out.print(echostr);

}

}

2、 CheckUtil源碼(可直接Copy其中的getSha1加密方法):

package com.jredu.util;

import java.security.MessageDigest;

import java.util.Arrays;

public class CheckUtil {

public static final String ?tooken = "jredu100"; //開發者自行定義Tooken

public static boolean checkSignature(String signature,String timestamp,String nonce){

//1.定義數組存放tooken,timestamp,nonce

String[] arr = {tooken,timestamp,nonce};

//2.對數組進行排序

Arrays.sort(arr);

//3.生成字符串

StringBuffer sb = new StringBuffer();

for(String s : arr){

sb.append(s);

}

//4.sha1加密,網上均有現成代碼

String temp = getSha1(sb.toString());

//5.將加密后的字符串,與微信傳來的加密簽名比較,返回結果

return temp.equals(signature);

}

public static String getSha1(String str){

if(str==null||str.length()==0){

return null;

}

char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

try {

MessageDigest mdTemp = MessageDigest.getInstance("SHA1");

mdTemp.update(str.getBytes("UTF-8"));

byte[] md = mdTemp.digest();

int j = md.length;

char buf[] = new char[j*2];

int k = 0;

for (int i = 0; i < j; i++) {

byte byte0 = md[i];

buf[k++] = hexDigits[byte0 >>> 4 & 0xf];

buf[k++] = hexDigits[byte0 & 0xf];}

char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9',

'a','b','c','d','e','f'};

try {

MessageDigest mdTemp = MessageDigest.getInstance("SHA1");

mdTemp.update(str.getBytes("UTF-8"));

byte[] md = mdTemp.digest();

int j = md.length;

char buf[] = new char[j*2];

int k = 0;

for (int i = 0; i < j; i++) {

byte byte0 = md[i];

buf[k++] = hexDigits[byte0 >>> 4 & 0xf];

buf[k++] = hexDigits[byte0 & 0xf];

}

return new String(buf);

} catch (Exception e) {

// TODO: handle exception

return null;

}

}

}



【版權聲明】

原創內容,歡迎轉載!轉載請注明出處!需要源碼下載,請聯系博主!微博@小風飛魚




最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容