1. 程式人生 > >第二篇 :微信公眾平臺開發實戰Java版之開啟開發者模式,接入微信公眾平臺開發

第二篇 :微信公眾平臺開發實戰Java版之開啟開發者模式,接入微信公眾平臺開發

第一部分:微信公眾號對接的基本介紹

一、填寫伺服器配置資訊的介紹

登入微信公眾平臺官網後,進入到公眾平臺後臺管理頁面。

選擇 公眾號基本設定-》基本配置 ,點選“修改配置”按鈕,填寫伺服器地址(URL)、Token和EncodingAESKey。

微信公眾號配置介面:

 以上配置需要認證後才會得到相應的許可權。如果開發階段,我們可以申請開發者測試賬號。

為什麼要申請測試賬號?

主要是因為測試賬號比我們沒有認證的微信賬號許可權大一點。足夠測試我們的介面了。

 以下是微信測試號的一些配置選項:

伺服器配置:

  URL:是開發者用來接收微信訊息和事件 的介面URL。(必須以http://開頭,目前支援80埠)

  Token:可由開發者可以任意填寫,用作生成簽名(該Token會和介面URL中包含的Token進行比對,從而驗證安全性)。注意必須為英文或數字,長度為3-32字元。

  EncodingAESKey:由開發者手動填寫或隨機生成,將用作訊息體加解密金鑰。(訊息加密金鑰由43位字元組成,可隨機修改,字元範圍為A-Z,a-z,0-9。)

同時,開發者可選擇訊息加解密方式:明文模式、相容模式和安全模式。

  明文模式:不使用訊息體加解密功能,安全係數較低

      相容模式:明文、密文將共存,方便開發者除錯和維護

      安全模式下:訊息包為純密文,需要開發者加密和解密,安全係數高

做個宣傳:這個是我的微信公眾號,歡迎大家關注!!!

看完上面的,還是不知道該填些什麼吧,不用急,先空著,後面再填。

二、驗證伺服器地址的有效性

開發者提交資訊後,微信伺服器將傳送GET請求到填寫的伺服器地址URL上,GET請求攜帶四個引數:

引數描述
signature 微信加密簽名,signature結合了開發者填寫的token引數和請求中的timestamp引數、nonce引數。
timestamp 時間戳
nonce 隨機數
echostr 隨機字串

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

加密/校驗流程如下:
1. 將token、timestamp、nonce三個引數進行字典序排序
2. 將三個引數字串拼接成一個字串進行sha1加密
3. 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信

說明一下,我使用的是eclipse ,java語言, tomcat 7.0 環境。

這些配置可以參照我的其他部落格文章進行配置,這裡就不多說了。

以上介紹也可以參考  微信開發文件

第二部分:微信伺服器對接的實現程式碼部分

 那麼我們現在開始擼碼吧!!!

方式一:通過本地進行除錯。

方式二: 程式碼需要放到第三方伺服器上面進行除錯。

一、 建立java專案,並實現校驗。

下面我們寫程式進行校驗:

(1)新建一個名字叫 souvc 的 web專案。

(2) 選擇web.xml檔案的生成。

(3)新建一個servlet類,來接收微信伺服器傳來資訊。

package com.souvc.weixin.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.souvc.weixin.util.SignUtil;

/**
 * 類名: CoreServlet </br> 
 * 描述: 來接收微信伺服器傳來資訊 </br> 
 * 開發人員: souvc</br> 
 * 建立時間:2015-9-29 </br> 
 * 釋出版本:V1.0 </br>
 */
public class CoreServlet extends HttpServlet {

    private static final long serialVersionUID = 4323197796926899691L;

    /**
     * 確認請求來自微信伺服器
     */
    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();
        
        // 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗
        if (SignUtil.checkSignature(signature, timestamp, nonce)) {
            out.print(echostr);
        }
        
        out.close();
        out = null;
    }

    /**
     * 處理微信伺服器發來的訊息
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO 訊息的接收、處理、響應
    }

}
View Code

(4) 加密校驗程式的工具類。這個校驗的方法,可以通過分析官方文件的demo,然後通過java語言來寫出。

package com.souvc.weixin.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
* 類名: SignUtil </br>
* 描述: 檢驗signature 工具類 </br>
* 開發人員: souvc </br>
* 建立時間:  2015-9-29 </br>
* 釋出版本:V1.0  </br>
 */
public class SignUtil {
    
    // 與介面配置資訊中的Token要一致
    private static String token = "souvcweixin";

    /**
    * 方法名:checkSignature</br>
    * 詳述:驗證簽名</br>
    * 開發人員:souvc</br>
    * 建立時間:2015-9-29  </br>
    * @param signature
    * @param timestamp
    * @param nonce
    * @return
    * @throws
     */
    public static boolean checkSignature(String signature, String timestamp,String nonce) {
        // 1.將token、timestamp、nonce三個引數進行字典序排序
        String[] arr = new String[] { token, timestamp, nonce };
        Arrays.sort(arr);
        
        // 2. 將三個引數字串拼接成一個字串進行sha1加密
        StringBuilder content = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            content.append(arr[i]);
        }
        MessageDigest md = null;
        String tmpStr = null;
        try {
            md = MessageDigest.getInstance("SHA-1");
            // 將三個引數字串拼接成一個字串進行sha1加密
            byte[] digest = md.digest(content.toString().getBytes());
            tmpStr = byteToStr(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        
        content = null;
        // 3.將sha1加密後的字串可與signature對比,標識該請求來源於微信
        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
    }

    /**
    * 方法名:byteToStr</br>
    * 詳述:將位元組陣列轉換為十六進位制字串</br>
    * 開發人員:souvc </br>
    * 建立時間:2015-9-29  </br>
    * @param byteArray
    * @return
    * @throws
     */
    private static String byteToStr(byte[] byteArray) {
        String strDigest = "";
        for (int i = 0; i < byteArray.length; i++) {
            strDigest += byteToHexStr(byteArray[i]);
        }
        return strDigest;
    }

    /**
    * 方法名:byteToHexStr</br>
    * 詳述:將位元組轉換為十六進位制字串</br>
    * 開發人員:souvc</br>
    * 建立時間:2015-9-29  </br>
    * @param mByte
    * @return
    * @throws
     */
    private static String byteToHexStr(byte mByte) {
        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B', 'C', 'D', 'E', 'F' };
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];
        String s = new String(tempArr);
        return s;
    }
}
View Code

(5)配置一下訪問路徑的 web.xml。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>souvc</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
        <servlet-name>coreServlet</servlet-name>
        <servlet-class>
            com.souvc.weixin.servlet.CoreServlet
        </servlet-class>
    </servlet>
  
    <!-- url-pattern中配置的/coreServlet用於指定該Servlet的訪問路徑 -->
    <servlet-mapping>
        <servlet-name>coreServlet</servlet-name>
        <url-pattern>/coreServlet</url-pattern>
    </servlet-mapping>
    
    
</web-app>
View Code

在webroot下面, 新增一個主頁index.jsp,程式碼如下

<%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>歡迎訪問我的網站 www.souvc.com </title>
</head>
<body>
        歡迎訪問我的網站 www.souvc.com 
</body>
</html>
View Code

校驗實現程式碼,基本完成。

二 、把實現部署到伺服器上。

方式一:部署到BAE上面。

(1)把程式從BAE上面匯出來。

複製svn地址

 

在本地新建一個weixin的資料夾,然後從伺服器上checkout程式碼:

 如下圖,說明成功匯出程式碼。

(2)把我們寫的程式從eclipse裡面匯出來,並打包成war包。

(3)把程式提交到BAE伺服器上面。

預覽併發布

 

訪問以下我們的連結: http://chiyan.duapp.com/

方式二:把校驗實現程式碼部署到SAE上。

(1) 進入到sae控制檯。

(2 )然後選擇上傳程式碼包。

通過eclipse打包成war包,然後傳到sae上。

(3)生成自己專屬的域名。

 第三部分: 配置微信伺服器。

 一、 進入到公眾號測試賬號設定頁面

 

二、填寫配置

配置之後,會提示配置成功。

 

第四部分:依據介面文件實現業務邏輯

 一、驗證之後需要做的一些邏輯處理。

/**
     * 處理微信伺服器發來的訊息
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO 訊息的接收、處理、響應
    }

這個後面再寫業務,到此,我們就完成了與微信伺服器的校驗。

 二、配置溫馨提醒:

有朋友直接輸入該請求:http://chiyan.duapp.com/coreServlet

是會報500空指標的錯誤,因為我們這樣訪問並沒有我們程式中要傳的引數傳過去。

其他文章關聯:

相關推薦

第二 公眾平臺開發實戰Java開啟開發者模式入微公眾平臺開發

第一部分:微信公眾號對接的基本介紹 一、填寫伺服器配置資訊的介紹 登入微信公眾平臺官網後,進入到公眾平臺後臺管理頁面。 選擇 公眾號基本設定-》基本配置 ,點選“修改配置”按鈕,填寫伺服器地址(URL)、Token和EncodingAESKey。 微信公眾號配置介面:  以上

第八 公眾平臺開發實戰Java如何網頁授權獲取使用者基本資訊

第一部分:微信授權獲取基本資訊的介紹 我們首先來看看官方的文件怎麼說: 如果使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。 關於網頁授權回撥域名的說明 1、在微信公眾號請求使用者網頁授權之前,開發者需要先到公眾平臺官網中的開發者中心頁配置授權

第九 公眾平臺開發實戰Java如何實現自定義分享內容

第一部分:微信JS-SDK介紹 微信JS-SDK是微信公眾平臺面向網頁開發者提供的基於微信內的網頁開發工具包。 通過使用微信JS-SDK,網頁開發者可藉助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信使用者提供更優質的網頁

第六 公眾平臺開發實戰Java如何自定義公眾號選單

我們來了解一下 自定義選單建立介面: 自定義選單查詢介面: 自定義選單刪除介面: 自定義選單介面可實現多種型別按鈕,如下: 1、click:點選推事件 使用者點選click型別按鈕後,微信伺服器會通過訊息介面推送訊息型別為event 的結構給開發者(參考訊息介面指

第一公眾平臺開發實戰Java瞭解公眾平臺基礎知識以及資料準備

相信很多人或多或少聽說了微信公眾平臺的火熱。但是開發還是有一點門檻,鑑於挺多朋友問我怎麼開發,問多了,自己平時也進行以下總結。 所以下面給大家分享一下我的經驗: 第一部分   介紹微信公眾號的一些簡單介紹以及微信扮演的一些角色,微信公眾號的重要性。 1. 微信公眾號是什麼?    官網

第五 公眾平臺開發實戰Java如何獲取公眾號的access_token以及快取access_token

一、access_token簡介 為了使第三方開發者能夠為使用者提供更多更有價值的個性化服務,微信公眾平臺 開放了許多介面,包括自定義選單介面、客服介面、獲取使用者資訊介面、使用者分組介面、群發介面等, 開發者在呼叫這些介面時,都需要傳入一個相同的引數 access_token,它是公眾賬號的全域性唯一票

第三 公眾平臺開發實戰Java請求訊息響應訊息以及事件訊息類的封裝

微信伺服器和第三方伺服器之間究竟是通過什麼方式進行對話的? 下面,我們先看下圖: 其實我們可以簡單的理解: (1)首先,使用者向微信伺服器傳送訊息; (2)微信伺服器接收到使用者的訊息處理之後,通過開發者配置的URL和Token 來找到第三方伺服器,並以XML形式向第三方伺服器傳送訊息

第四 公眾平臺開發實戰Java完成訊息接受與相應以及訊息的處理

溫馨提示:      這篇文章是依賴前幾篇的文章的。 首先,我們看看原來寫的dopost方法: /** * 處理微信伺服器發來的訊息 */ public void doPost(HttpServletRequest request, Http

第七 公眾平臺開發實戰Java如何獲取信使用者基本資訊

在關注者與公眾號產生訊息互動後,公眾號可獲得關注者的OpenID(加密後的微訊號,每個使用者對每個公眾號的OpenID是唯一的。對於不同公眾號,同一使用者的openid不同)。 公眾號可通過本介面來根據OpenID獲取使用者基本資訊,包括暱稱、頭像、性別、所在城市、語言和關注時間。 開發者可通過Ope

公眾平臺開發實戰Java獲取使用者基本資訊

在關注者與公眾號產生訊息互動後,公眾號可獲得關注者的OpenID(加密後的微訊號,每個使用者對每個公眾號的OpenID是唯一的。對於不同公眾號,同一使用者的openid不同)。 公眾號可通過本介面來根據OpenID獲取使用者基本資訊,包括暱稱、頭像、性別、所在城市、語言和

公眾平臺開發實戰Java如何獲取公眾號的access_token以及快取access_token

一、access_token簡介 為了使第三方開發者能夠為使用者提供更多更有價值的個性化服務,微信公眾平臺 開放了許多介面,包括自定義選單介面、客服介面、獲取使用者資訊介面、使用者分組介面、群發介面等, 開發者在呼叫這些介面時,都需要傳入一個相同的引數 access_token,它是公眾賬號的全域性唯一票據,

Linux實戰第二Centos6和Centos7密碼破解實戰

root恢復個人筆記分享(在線閱讀):http://note.youdao.com/noteshare?id=744d026219e72c69e606f115bd333ddcPDF版本下載請在附近中下載本文出自 “人才雞雞” 博客,請務必保留此出處http://6575793.blog.51cto.com/6

JAVA帶你一步一步實現公眾開發(一)--入微公眾平臺

(一)接入流程解析 在我們的開發過程中無論如何最好的參考工具當然是我們的官方文件了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html 通過上面我們可以看出其中接入微信公眾平臺開發,開發者需要按照如下

Java公眾平臺開發(一)--入微公眾平臺

轉自:http://www.cuiyongzhi.com/post/38.html (一)接入流程解析 在我們的開發過程中無論如何最好的參考工具當然是我們的官方文件了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html

公眾平臺開發教程Java(六) 事件處理(選單點選/關注/取消關注)

前言: 事件處理是非常重要的,這一章講講常見的事件處理 1、關注/取消關注 2、選單點選 事件型別介紹: 在微信中有事件請求是訊息請求中的一種。請求型別為:event 而event事件型別又分多種事件型別,具體分關注:subscribe取消關注:unsubscribe自定義選單點選:CLICK    根

玩玩公眾Java接收、處理及返回消息

log med iou set arch weixin b- rom data- 前面已經配置了微信服務器,那麽先開始最簡單的接收微信消息吧~ 可以用我們的微信號來直接進行測試,下面先看測試效果圖: 這是最基本的文本消息的接收、處理及返回,來看看是怎麽實現的

第二php開發工具

能夠 nds 基本 數據庫 插件 運行 ins bsp asc 倍,這裏為您介紹一些常用的工具。 PHP IDE PHP IDE也不少,主要從幾個方面進行篩選: 跨平臺(能夠同時在windows,mac或者ubuntu上面運行) 版本控制(SVN,G

[.NET] 簡單入微公眾開發實現自動回復

ring echo AC tin 處理過程 文本消息 n) () token 簡單接入微信公眾號開發:實現自動回復 一、前提   先申請微信公眾號的授權,找到或配置幾個關鍵的信息(開發者ID、開發者密碼、IP白名單、令牌和消息加解密密鑰等)。 二、基本配置信

第七粉絲一鍵同步工具類

1、前言   在公眾號開發的過程中,一般都需要獲取粉絲資料,針對單個粉絲,我們可以通過openid獲取其粉絲資訊; 但不排除這種業務,比如目前開發的公眾號已經在使用中,,當前的框架或者功能已經不能夠滿足使用者的需求、需要重新開發,那麼這個時候你開發的新的微信專案將要接入到之前老的微

第六素材管理工具類

1、前言 微信公眾號在使用的介面的時候是通過media_id來進行的,所以在使用的介面的時候我們往往需要先上傳素材,素材管理分為臨時素材和永久素材 1)、臨時素材媒體檔案在微信後臺儲存時間為3天,即3天后media_id失效,詳細文件檢視:上傳臨時素材 2)、開發者可通過本介面上傳到