從今天開始我們就正式開始微信公衆号開發了,首先進入微信官網https://mp.weixin.qq.com/,注冊或者登陸(如果已經注冊了)你的微信公衆号,登陸後需要管理者用個人微信掃碼驗證通過才行,這裡直接貼出截圖如下:

我們是開發者,重點關注上面最後一張圖的紅框内容,在接下來的開發過程中,我們幾乎隻會用到這四個地方的功能和文檔說明
一、【啟動開啟開發者模式】
點選上面的【開發】---》【基本配置】,進入後如圖:
這裡我已經啟動了開發者模式,關閉後如下圖,重新啟動即可:
二、【修改配置】
注意填寫下面兩個輸入框URL和Token即可:
Token填寫一個你喜歡的字元串,類似你自己設定的密碼,随便填寫一個你喜歡的英文字元串即可,這裡重點說明以下URL;
URL是你跟微信公衆号伺服器之間通訊傳輸消息的唯一接口,這裡需要重點說明以下微信開發者通訊傳輸消息的基本工作思路
當關注微信公衆号的使用者發送消息給騰訊公衆号伺服器之後,騰訊微信公衆号伺服器會通過這個URL将消息轉發給你你自己的項目背景,你的項目可以自定義的做出你想要的任何回複響應,然後當你項目背景做出響應後,騰訊微信公衆号伺服器再通過這個URL接口收到你的項目背景發過來的消息,繼而轉發到關注微信公衆号的使用者手機上,以上就是微信公衆号開發的基本思路流程,請讀者務必明白,否則後續開發會遇到問題而不知道如何調試處理,接下來我們建立一個這樣的可用的URL位址
三、【建立SpringBoot項目】
這裡我們利用Java中的明星級IDE工具IDEA建立一個最簡單的SpringBoot項目,之是以用SpringBoot就是因為SpringBoot建立和配置太簡單了,我們把精力集中到開發業務和邏輯流程上,而不要把精力浪費到項目的冗繁的配置上,用IDEA建立一個最簡單的SpringBoot項目,這裡我不想細說,不清楚的請百度自行查找網上其他大神的資料,一下是我建立的SpringBoot項目縮略圖:
這裡我建立了一個Controller和建立了一個RestApi接口,結合上面截圖和下面截圖紅框部分,你再看看我的URL位址http://r7fkc2.natappfree.cc/weChart/connect 你應該好像明白了點什麼,對我們配置了這個接口,那問題來了,為什麼我們配置的是這個接口而不是别的接口呢,因為我們配置的這個接口第一次送出儲存時候,騰訊微信公衆号會給你發送一些消息,你需要對這些消息接收後做出符合要求的邏輯處理并作出正确的回應,騰訊微信公衆号才會成功認證他作為唯一的合法URL,否則你是無法騰訊微信伺服器形成有效的通訊通道進行通訊的,你現在明白了吧;那麼這個接口裡的東西可不能亂寫,下面我直接貼代碼如下:
WechatController.java
package com.xu.wemall.controller.wechat;import com.xu.wemall.commons.utils.CheckUtil;import com.xu.wemall.commons.utils.UploadUtil;import com.xu.wemall.commons.utils.MessageUtil;import io.swagger.annotations.Api;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.PrintWriter;import java.util.Map;/** * 類名稱: LoginController * 類描述: 與微信對接登陸驗證 * * @author yuanjun * 建立時間:2017年12月5日上午10:52:13 */@[email protected]@Api(tags = "接入驗證接口")@RequestMapping(value = "/weChart")public class WechatController { @RequestMapping(value = "/connect", method = RequestMethod.GET) public String connect(@RequestParam(value = "signature") String signature, @RequestParam(value = "timestamp") String timestamp, @RequestParam(value = "nonce") String nonce, @RequestParam(value = "echostr") String echostr) { log.info("-----開始校驗簽名-----"); PrintWriter out = null; if (CheckUtil.checkSignature(signature, timestamp, nonce)) { log.info("-----簽名校驗通過-----"); return echostr; } else { log.info("-----校驗簽名失敗-----"); return null; } }}
CheckUtil.java
package com.xu.wemall.commons.utils;import java.util.Arrays;public class CheckUtil { //自己設定,要與微信頁面設定的一緻 private static final String token = "xulijun137"; public static boolean checkSignature(String signature,String timestamp,String nonce){ String[] str = new String[]{token,timestamp,nonce}; //排序 Arrays.sort(str); //拼接字元串 StringBuffer buffer = new StringBuffer(); for(int i =0 ;i
SHA1.java
package com.xu.wemall.commons.utils;import java.security.MessageDigest;/** * 類名稱: SHA1 * 類描述: sha1加密 * * @author yuanjun * 建立時間:2017年12月5日上午11:10:01 */public final class SHA1 { private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; /** * Takes the raw bytes from the digest and formats them correct. * * @param bytes the raw bytes from the digest. * @return the formatted bytes. */ private static String getFormattedText(byte[] bytes) { int len = bytes.length; StringBuilder buf = new StringBuilder(len * 2); // 把密文轉換成十六進制的字元串形式 for (int j = 0; j < len; j++) { buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]); buf.append(HEX_DIGITS[bytes[j] & 0x0f]); } return buf.toString(); } public static String encode(String str) { if (str == null) { return null; } try { MessageDigest messageDigest = MessageDigest.getInstance("SHA1"); messageDigest.update(str.getBytes()); return getFormattedText(messageDigest.digest()); } catch (Exception e) { throw new RuntimeException(e); } }}
上面的Token請換成自己的token,在你的【開發】--》【基本配置】中你之前自己配置過的Token,上面的接口的基本思路是擷取騰訊伺服器發送到四個參數你項目接口的,你對這四個參數做還有token一起5個參數按照公衆号提供的文檔說明處理後,滿足條件後傳回其中一個參數即可,具體請看我代碼部分,注意這個接口是GET請求方式的,是以得到我們的項目RestAPI接口位址是:http:/localhost:80/weChat/connnect,再看我配置的位址http://r7fkc2.natappfree.cc/weChart/connect
這裡顯然我們配了一個域名位址http://r7fkc2.natappfree.cc/【這裡預設設定的是80端口,80端口可以不寫】這是我們利用NATAPP将本地的127.0.0.1映射成的一個外網可通路的域名位址【這裡就是我們上一課講的用NATAPP将本地位址映射成外網位址,不清楚的同學請先學習我的上一課,映射本地位址到外網的工具還有其他的,目前筆者最推薦是NATAPP】,通過這個外網的域名位址,騰訊的伺服器可以成功連接配接到我們的項目,因為你開發的話你的本地位址localhost騰訊微信公衆号伺服器是不可能認識的( 後續你可以把項目部署到外網伺服器上,比如阿裡雲,百度雲,騰訊雲伺服器上),
至此我們就成功得到這個URL位址了,配置後儲存即對我們的接口做合法性驗證,驗證成功會彈出彈窗框提示你驗證成功,否則表示你的接口邏輯處理後傳回的字元串不符合接口要求,請修改代碼後重新配置驗證接口,好了今天的課就講到這裡了,下節課再見,如有問題請給我留言。