關於Java本地服務接入微信平臺進行調試的實現

趨於愈來愈多的社交需求,使得微信公衆平臺開放了許多可接入、定製的個性化接口,例如:消息的收發管理、素材管理等等。html

本文是基於你已有公衆號或者微信公衆測試號的狀況下進行介紹的。git

首先說一下要用到的主要工具。github

  1. QQ瀏覽器
  2. 微信調試工具(QQ瀏覽器插件)
  3. fastweixin微信公衆號快速開發工具(GitHub地址:fastweixin)
  4. SpringMVC開發框架
  5. Maven構建工具

這裏關於springMVC的搭建就再也不贅述,由於每一個人搭建的方式也不盡相同,本文是使用的註解的方式來搭建的。spring

1.使用微信號登陸微信公衆測試號(公衆測試號登錄地址)瀏覽器

微信公衆測試號

咱們看到這裏要求填寫對接咱們使用springMVC搭建的服務地址,從開發的角度來說,即便咱們有一臺服務器,咱們也不能每寫一段代碼都發布到服務器中測試一下吧?安全

2.使用QQ瀏覽器微信調試工具進行本地調試服務器

那剛好QQ瀏覽器的一個插件幫咱們解決了這個問題(該插件可在QQ瀏覽器的應用中心經過搜索「微信調試工具」找到),而且提供了兩種不一樣的接入方式來調試公衆平臺的接口,以下圖所示:微信

微信調試工具

咱們選擇服務器端調試。微信公衆平臺

服務器端調試模式

這裏的綁定服務咱們能夠填寫咱們本地所啓動的服務,例如個人服務監聽的是8889端口,那麼我能夠直接填寫8889,點擊啓動後會獲得一個可供他人訪問的外部地址,以下圖所示:框架

產生外部地址

3.在服務中驗證服務綁定邏輯

接下來咱們在本地的服務中新建一個控制器來接收服務器的配置請求並予以迴應完成服務的綁定和驗證(請注意這裏咱們是用的是springMVC註解形式搭建的服務),以下圖所示:

本地Ctrl

這裏咱們使用了fastweixin的工具庫,控制器直接繼承了庫中的WeixinControllerSupport,稍後咱們將重寫當中的某些方法進行服務綁定與消息收發,代碼以下:

/**
     * 重寫服務綁定.
     *
     * @param request  http請求
     * @param response http響應
     */
    @Override
    public void bindServer(HttpServletRequest request, HttpServletResponse response) {
        SignValiUtil signValiUtil = new SignValiUtil();
        // 驗證微信簽名
        if (signValiUtil.validSignature(request.getParameter("signature"),
                request.getParameter("timestamp"), request.getParameter("nonce"), weChatConf)) {
            // 執行綁定返回
            super.bindServer(request, response);
            LogPool.wechatLogger.info("執行微信第三方服務地址綁定:{}", "成功");
        } else {
            LogPool.wechatLogger.info("執行微信第三方服務地址綁定:{}", "失敗");
        }
    }

這裏的驗證邏輯稍後再細說,或者你們能夠直接移步這裏瞭解具體怎麼作的驗證微信驗證服務地址有效性

到這裏咱們建立好了驗證的ctrl,也就是說在圖1中的URL咱們能夠大膽的填寫如下地址了:

http://dmom36u5kx.proxy.qqbrowser.cc/laughingwechat

那麼Token又是什麼呢?官方是給咱們這麼解釋的

Token可由開發者能夠任意填寫,用做生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。

那至於你把token放在服務中什麼地方,就由讀者本身決定了,我這裏是使用了properties存儲而且在服務啓動時自動讀取加載到某個類模型中。

這裏咱們填好了Token,在服務中咱們也重寫了服務綁定的驗證邏輯,先不着急點提交,咱們來了解一下服務驗證時怎麼完成的。

微信的服務器在驗證的時候會請求咱們所填寫的URL,其中帶有如下四個參數:

  1. signature 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
  2. timestamp 時間戳
  3. nonce 隨機數
  4. echostr 隨機字符串(用於驗證成功後返回給微信服務器)

接着咱們的bindServer方法作了如下幾個動做(官方文檔中是有的):

  1. 將的token、timestamp、nonce三個參數進行字典序排序
  2. 將三個參數字符串拼接成一個字符串進行sha1加密
  3. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信

在3執行確認一致後就能夠返回微信給咱們的echostr字符串了(固然有的同窗說能夠直接返回echostr,固然也能夠,fastweixin的內部默認就是這麼作的,可是出於安全性考慮仍是驗證一下吧)。

接着,咱們啓動服務。點擊提交。

驗證配置成功後以下圖所示:

微信服務器驗證成功

這個時候你能夠重寫一下WeixinControllerSupport中的handleTextMsg方法並在控制檯打印一下。

接着,掃描關注公衆測試號中爲咱們提供的測試號的二維碼,嘗試給公衆號發一條消息,你會在控制檯看到消息的具體內容。

至此,你的服務已經綁定成功了!

PS:具體其餘接口的使用請移步微信公衆平臺開發文檔

相關文章
相關標籤/搜索