• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Java Servlet的微信公眾平臺(tái)開(kāi)發(fā)實(shí)訓(xùn)環(huán)境搭建

      2017-03-24 06:17:11生力軍
      電腦知識(shí)與技術(shù) 2017年1期

      生力軍

      摘要:微信公眾平臺(tái)開(kāi)發(fā)實(shí)訓(xùn)環(huán)境的搭建面臨的主要問(wèn)題是開(kāi)發(fā)技術(shù)的選擇和內(nèi)部服務(wù)器的映射。流行的Java Servlet技術(shù)與網(wǎng)絡(luò)映射軟件的結(jié)合可以方便搭建微信公眾平臺(tái)開(kāi)發(fā)的實(shí)訓(xùn)環(huán)境。搭建核心步驟包括:使用Apache Tomcat配置公眾號(hào)服務(wù)器、使用“花生殼”映射內(nèi)網(wǎng)服務(wù)器、使用Java Servlet驗(yàn)證服務(wù)器的有效性,其解決了微信公眾平臺(tái)開(kāi)發(fā)課程實(shí)施過(guò)程中的關(guān)鍵問(wèn)題。

      關(guān)鍵詞:java servlet; 微信公眾平臺(tái)開(kāi)發(fā); 實(shí)訓(xùn)環(huán)境; 內(nèi)網(wǎng)映射; 服務(wù)器驗(yàn)證

      中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)01-0079-03

      Abstract: Training environment of WeChat public platform development is constructed by using Java Servlet and network mapping software. Core steps include configuring public server, mapping intranet server, validating server. It solves the key problem in implementation of the curriculum of WeChat public platform development.

      Key words: java Servlet; WeChat public platform development; training environment; network mapping; server validation

      1 微信公眾平臺(tái)開(kāi)發(fā)實(shí)訓(xùn)環(huán)境搭建存在的問(wèn)題

      目前,智能手機(jī)已經(jīng)廣泛普及到了人們的生活當(dāng)中,而微信又是智能手機(jī)上使用率首屈一指的移動(dòng)應(yīng)用。據(jù)2015年騰訊統(tǒng)計(jì)的微信數(shù)據(jù)顯示:90%以上的智能手機(jī)安裝了微信,微信每月活躍用戶高達(dá)5.49億,遍及全世界200多個(gè)國(guó)家,使用語(yǔ)言超過(guò)20種,微信支付用戶達(dá)到了4億人。特別需要關(guān)注的是:各類品牌、企業(yè)、個(gè)體開(kāi)通的微信公眾賬號(hào)總數(shù)已超過(guò)850萬(wàn)個(gè),而對(duì)接公眾賬號(hào)的移動(dòng)應(yīng)用僅有8萬(wàn)5千個(gè)。可見(jiàn),市場(chǎng)對(duì)微信公眾平臺(tái)功能的對(duì)接與開(kāi)發(fā)存在了巨大的需求,微信公眾平臺(tái)應(yīng)用已經(jīng)與傳統(tǒng)Web端應(yīng)用同等重要。因此,各大互聯(lián)網(wǎng)及軟件企業(yè)對(duì)于微信公眾平臺(tái)開(kāi)發(fā)人員的需求量也持續(xù)上升。作為需要與企業(yè)需求密切接軌的高職院校,也紛紛敏銳地捕捉到這一需求,計(jì)劃在各自的計(jì)算機(jī)或軟件專業(yè)中開(kāi)設(shè)微信公眾平臺(tái)開(kāi)發(fā)相關(guān)的專業(yè)必修或選修課。然而,由于微信公眾平臺(tái)開(kāi)發(fā)涉及騰訊公司的后臺(tái)服務(wù)器對(duì)于互聯(lián)網(wǎng)消息的轉(zhuǎn)發(fā),課程在實(shí)訓(xùn)階段所面臨的實(shí)訓(xùn)環(huán)境問(wèn)題成為課程實(shí)施過(guò)程中的最大阻礙。

      如圖1所示,由于微信公眾號(hào)服務(wù)器不是像傳統(tǒng)Web服務(wù)器直接接收和處理用戶請(qǐng)求,而是經(jīng)過(guò)了騰訊微信后臺(tái)的轉(zhuǎn)發(fā),這就要求騰訊微信后臺(tái)能夠在Internet上與微信公眾號(hào)服務(wù)器進(jìn)行交互。在傳統(tǒng)的實(shí)訓(xùn)室中,我們能保證學(xué)生人手一臺(tái)實(shí)訓(xùn)計(jì)算機(jī),這臺(tái)實(shí)訓(xùn)計(jì)算機(jī)一般被配置成虛擬服務(wù)器,只能在實(shí)訓(xùn)室的局域網(wǎng)內(nèi)使用,并不能被Internet上的設(shè)備所尋址,也就無(wú)法被騰訊微信后臺(tái)訪問(wèn),導(dǎo)致微信公眾平臺(tái)開(kāi)發(fā)的實(shí)訓(xùn)無(wú)法進(jìn)行。

      另一方面,選擇何種語(yǔ)言作為微信公眾平臺(tái)開(kāi)發(fā)的教學(xué)也是一個(gè)關(guān)鍵問(wèn)題。騰訊公司提供了一套微信公眾平臺(tái)開(kāi)發(fā)的接口,并沒(méi)有對(duì)開(kāi)發(fā)語(yǔ)言進(jìn)行限制。由于目前Web應(yīng)用還是業(yè)界主流,因此高職計(jì)算機(jī)和軟件專業(yè)教學(xué)一般都將Java或C#語(yǔ)言作為必修課。微信公眾平臺(tái)開(kāi)發(fā)作為Web開(kāi)發(fā)的后續(xù)課程,可以選用與先修課程同樣的開(kāi)發(fā)語(yǔ)言。

      本文以Java Servlet作為微信公眾平臺(tái)開(kāi)發(fā)技術(shù),以內(nèi)網(wǎng)映射軟件“花生殼”作為服務(wù)器映射工具,搭建了微信公眾平臺(tái)開(kāi)發(fā)實(shí)訓(xùn)環(huán)境,解決了制約課程實(shí)施的關(guān)鍵問(wèn)題。

      2 配置微信公眾號(hào)服務(wù)器

      進(jìn)行公眾號(hào)開(kāi)發(fā),關(guān)鍵是開(kāi)發(fā)屬于我們自己的公眾號(hào)服務(wù)器。這里我們建立服務(wù)器要解決的關(guān)鍵問(wèn)題主要有兩點(diǎn):第一,采用何種平臺(tái)建立服務(wù)器?第二,如何把內(nèi)網(wǎng)服務(wù)器映射到Internet上?

      2.1 使用Apache Tomcat配置微信公眾號(hào)服務(wù)器

      Tomcat是Apache軟件基金會(huì)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。其主要特點(diǎn)是:開(kāi)放源碼、技術(shù)先進(jìn)、性能穩(wěn)定、免費(fèi)使用。據(jù)調(diào)查,在現(xiàn)行的Java Web服務(wù)器中,Tomcat服務(wù)器的市場(chǎng)占有率保持在50%以上。由于我們采用Java語(yǔ)言作為微信公眾平臺(tái)的開(kāi)發(fā)語(yǔ)言,Servlet作為Java服務(wù)器端開(kāi)發(fā)的重要技術(shù)自然必不可少,采用Tomcat作為服務(wù)器就成了最經(jīng)濟(jì)實(shí)惠且一脈相承的解決方案。Tomcat的安裝及配置比較簡(jiǎn)單,主要保證Tomcat的版本與JDK、JRE相應(yīng)的版本一致即可,本文采用的是Tomcat 7+JDK 7+JRE 1.7開(kāi)發(fā)環(huán)境。

      2.2 使用“花生殼”映射內(nèi)網(wǎng)服務(wù)器

      “花生殼”是一個(gè)動(dòng)態(tài)域名解析軟件,在任何地點(diǎn)、任何時(shí)間、使用任何線路,均可利用動(dòng)態(tài)域名解析服務(wù)建立擁有固定域名和最大自主權(quán)的互聯(lián)網(wǎng)主機(jī)。

      1)注冊(cè)并獲得域名

      下載“花生殼”軟件,注冊(cè)之后便可獲得一個(gè)形如:xxxxx.xicp.net的域名,使用這個(gè)域名,就可以讓騰訊微信后臺(tái)能夠順利尋址到我們的微信公眾平臺(tái)服務(wù)器。

      2)配置內(nèi)網(wǎng)映射

      “花生殼”軟件的核心功能就是內(nèi)網(wǎng)映射,如圖2所示,我們需要填寫的重要參數(shù)包括:內(nèi)網(wǎng)主機(jī)、內(nèi)網(wǎng)端口、外網(wǎng)端口。

      其中,內(nèi)網(wǎng)主機(jī)是指局域網(wǎng)內(nèi)部主機(jī)IP地址,由于實(shí)訓(xùn)時(shí),一般都是由每個(gè)學(xué)生將自己的計(jì)算機(jī)映射成服務(wù)器,所以這里一般填寫本機(jī)IP:127.0.0.1;內(nèi)網(wǎng)端口取決于前面步驟配置的Tomcat服務(wù)的端口號(hào),以便讓騰訊微信后臺(tái)能夠正確與Tomcat服務(wù)進(jìn)行通信;外網(wǎng)端口是指映射到Internet上的Tomcat服務(wù)端口號(hào),由于騰訊微信后臺(tái)默認(rèn)采用http協(xié)議與微信公眾平臺(tái)服務(wù)器進(jìn)行通信,所以這里一般選擇http協(xié)議默認(rèn)采用的80端口。

      3 驗(yàn)證微信公眾平臺(tái)服務(wù)器的有效性

      3.1 填寫服務(wù)器配置

      如果要讓自己搭建的服務(wù)器能夠接受騰訊微信公眾平臺(tái)的信息轉(zhuǎn)發(fā),首先就需要登錄騰訊微信公眾平臺(tái)官網(wǎng)的開(kāi)發(fā)者中心,填寫服務(wù)器地址(URL)、令牌(Token)和消息加密解密密鑰(EncodingAESKey)。

      其中URL是開(kāi)發(fā)者用來(lái)接收微信消息和事件的接口URL,這里我們需要填寫“花生殼”軟件映射的外網(wǎng)地址。Token是開(kāi)發(fā)者隨機(jī)填寫,其作用主要是參與驗(yàn)證算法,使微信公眾平臺(tái)服務(wù)器能夠驗(yàn)證自己搭建服務(wù)器的安全。EncodingAESKey也是由開(kāi)發(fā)者隨機(jī)填寫,其作用主要是作為傳輸消息的加密和解密密鑰。

      同時(shí),開(kāi)發(fā)者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務(wù)器配置在提交后都會(huì)立即生效。

      3.2 驗(yàn)證URL的有效性

      當(dāng)開(kāi)發(fā)者在微信公眾平臺(tái)官網(wǎng)的開(kāi)發(fā)者中心填寫好URL、Token和EncodingAESKey后,微信服務(wù)器將會(huì)發(fā)送一條信息到該URL上進(jìn)行服務(wù)器有效性的驗(yàn)證,該消息采用了HTTP的GET請(qǐng)求,請(qǐng)求中附加了4個(gè)參數(shù),signature、timestamp、nonce、echostr,其含義如表1所示:

      微信服務(wù)器要求開(kāi)發(fā)者檢驗(yàn)參數(shù)signature,對(duì)微信服務(wù)求發(fā)送的HTTP請(qǐng)求進(jìn)行校驗(yàn),具體校驗(yàn)流程為:

      1)將token、timestamp、nonce三個(gè)參數(shù)按照字典序排序;

      2)將三個(gè)參數(shù)拼接成一個(gè)完整的字符串;

      3)使用sha1算法對(duì)拼接后的字符串進(jìn)行加密;

      4)將加密后的字符串與signature對(duì)比,如果一致就表示該HTTP GET請(qǐng)求來(lái)源于微信服務(wù)器。

      如果能夠確認(rèn)此HTTP GET請(qǐng)求來(lái)自微信服務(wù)器,則只需要將echostr參數(shù)的內(nèi)容原樣返回給微信服務(wù)器即可,自此接入即可生效;如果校驗(yàn)不成功,則接入失敗。

      為了使用Java Servlet實(shí)現(xiàn)上述流程,我們使用MyEclipse2015集成開(kāi)發(fā)工具,新建一個(gè)Web項(xiàng)目,添加一個(gè)新的工具類Tool來(lái)實(shí)現(xiàn)上述流程,實(shí)現(xiàn)代碼如下:

      public class Tool {

      //這里的Token與微信服務(wù)器配置信息中的 Token 要一致

      private static String token = "whslj2015";

      //函數(shù)checkSign用來(lái)驗(yàn)證簽名

      public static boolean checkSign (String sign, String time, String nonce){

      String[] array = new String[]{token, time, nonce};

      //將token、timestamp、nonce三個(gè)參數(shù)按照字典序排序

      Arrays.sort(array);

      String newStr="";

      //將三個(gè)參數(shù)拼接成一個(gè)完整的字符串

      for(int i = 0; i < array.length; i++){

      newStr+=array[i];

      }

      String tmpStr = "";

      try {

      MessageDigest md = MessageDigest.getInstance("SHA-1");

      //使用sha1算法對(duì)拼接后的字符串進(jìn)行加密

      byte[] secret = md.digest(newStr.getBytes());

      tmpStr = bytesToStr(secret);

      } catch (NoSuchAlgorithmException e) {

      e.printStackTrace();

      }

      newStr = null;

      //將加密后的字符串與signature對(duì)比

      if (tmpStr.equals(sign.toUpperCase())) {

      return true;

      }

      else {

      return false;

      }

      }

      //函數(shù)bytesToStr用來(lái)將字節(jié)數(shù)組轉(zhuǎn)為16進(jìn)制字符串

      private static String bytesToStr(byte[] dig) {

      String str = "";

      for(int i = 0; i < dig.length; i++){

      str += bytesTo16Str(dig[i]);

      }

      return str;

      }

      //函數(shù)bytesTo16Str將單字節(jié)轉(zhuǎn)為16進(jìn)制字符串

      private static String bytesTo16Str(byte by) {

      char[] Digital = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

      char[] tempArray = new char[2];

      tempArray[0] = Digital[(by >>> 4) & 0X0F];

      tempArray[1] = Digital[by & 0X0F];

      String str = new String(tempArray);

      return str;

      }

      }

      接下來(lái),在Web項(xiàng)目中新建一個(gè)Servlet,在其中的doGet方法中實(shí)現(xiàn)參數(shù)的捕獲,以及參數(shù)驗(yàn)證,返回結(jié)果等一系列操作,就能完成服務(wù)器地址的有效性驗(yàn)證邏輯,實(shí)現(xiàn)代碼如下:

      protected 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 outPrint = response.getWriter();

      //將加密后的字符串可與signature對(duì)比,如果一致就表示該HTTP GET請(qǐng)求來(lái)源于微信服務(wù)器

      if(Tool.checkSign(signature, timestamp, nonce)){

      outPrint.print(echostr);

      }

      outPrint.close();

      outPrint = null;

      }

      最后,將項(xiàng)目部署到Tomcat服務(wù)器,登錄微信公眾平臺(tái)官網(wǎng)后,將服務(wù)器地址(URL)完善為上面新建的Servlet完整外網(wǎng)地址,驗(yàn)證成功后,整個(gè)實(shí)訓(xùn)環(huán)境的搭建就完成了。

      4 結(jié)束語(yǔ)

      本文利用流行的Java Servlet技術(shù)結(jié)合網(wǎng)絡(luò)映射軟件搭建了微信公眾平臺(tái)開(kāi)發(fā)的實(shí)訓(xùn)環(huán)境,解決了課程實(shí)施過(guò)程中的關(guān)鍵問(wèn)題。實(shí)際上,不論何種開(kāi)發(fā)語(yǔ)言,都可以結(jié)合相應(yīng)的服務(wù)器軟件和網(wǎng)絡(luò)映射軟件構(gòu)建微信公眾平臺(tái)開(kāi)發(fā)實(shí)訓(xùn)環(huán)境。服務(wù)器有效性驗(yàn)證只需要按照騰訊提供的微信開(kāi)發(fā)API提供的驗(yàn)證算法,也可以用任意開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn),本文就整個(gè)操作過(guò)程提供了基本思路。

      參考文獻(xiàn):

      [1] 梁廣浩.搭建框架快速開(kāi)發(fā)微信公眾平臺(tái)功能[J].大眾科技, 2015(17).

      [2] 楊杰.基于微信公眾平臺(tái)校園服務(wù)公眾號(hào)的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中師范大學(xué),2015.

      [3] 易偉.微信公眾平臺(tái)搭建與開(kāi)發(fā)揭秘[M]. 2版.北京:機(jī)械工業(yè)出版社,2015.

      [4] 馬俊.公眾號(hào)的開(kāi)發(fā)和應(yīng)用——基于湖南某微信公眾平臺(tái)設(shè)計(jì)[J].電腦知識(shí)與技術(shù), 2015,11(34):213-216.

      [5] 甘榮石.基于微信平臺(tái)的移動(dòng)銀行應(yīng)用架構(gòu)研究[D].廣州:華南理工大學(xué),2013.

      [6] 夏文忠,單長(zhǎng)吉.微信公眾平臺(tái)在圖書館信息系統(tǒng)中的應(yīng)用[J].吉林廣播電視大學(xué)學(xué)報(bào),2015(8):10-12.

      [7] 常永杰,陳亮,張穎.基于新媒體技術(shù)的電力微博微信服務(wù)平臺(tái)設(shè)計(jì)分析[J].河北電力技術(shù), 2015,34(5):50-53.

      [8] 宿晶格.基于3G手機(jī)網(wǎng)絡(luò)的廣播媒體傳播交互式應(yīng)用研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2013.

      荆州市| 吉林省| 九龙县| 台中县| 曲周县| 浮山县| 屯昌县| 成安县| 恭城| 新昌县| 伊吾县| 青岛市| 定结县| 广宗县| 鄢陵县| 团风县| 连州市| 黄冈市| 卢湾区| 内乡县| 荣成市| 博兴县| 福鼎市| 阳东县| 吉安县| 老河口市| 澄迈县| 珲春市| 桓台县| 两当县| 永昌县| 泾源县| 迭部县| 潼关县| 贵阳市| 翁源县| 高邮市| 辛集市| 都江堰市| 赫章县| 开化县|