国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-14 15:32:21
字體:
來源:轉載
供稿:網友

第一步:填寫服務器配置

登錄微信公眾平臺官網后,在公眾平臺后臺管理頁面 - 開發者中心頁,點擊“修改配置”按鈕,填寫服務器地址(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 環境。

這些配置可以參照我的其他博客文章進行配置,這里就不多說了。

 

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

(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 消息的接收、處理、響應    }}

 

 

(4) 加密校驗程序的工具類。

 

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;    }}

 

 

(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>

 

在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>

 

(6)把程序從BAE上面導出來。

 

復制svn地址

 

 

在本地新建一個weixin的文件夾,然后從服務器上checkout代碼:

 

 

 如下圖,說明成功導出代碼。

 

 

(7)把我們寫的程序從eclipse里面導出來,并打包成war包。

 

 

 

 

 

 

 

(8)把程序提交到BAE服務器上面。

 

 

 

 

 

 

 

 

預覽并發布

 

 

 

訪問以下我們的鏈接: http://chiyan.duapp.com/

 

 

(9)配置微信服務器。

 

這里用的是測試賬號。

 

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

 

第三步:依據接口文檔實現業務邏輯

 

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

 

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

 

溫馨提醒:

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

是會報500空指針的錯誤,因為我們這樣訪問并沒有我們程序中要傳的參數傳過去。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 樟树市| 太湖县| 海淀区| 双流县| 土默特右旗| 皋兰县| 中牟县| 夏邑县| 天祝| 临江市| 那曲县| 肇源县| 萍乡市| 郸城县| 伊吾县| 宝坻区| 绥江县| 赤峰市| 雅江县| 织金县| 浠水县| 渭南市| 逊克县| 老河口市| 河北区| 土默特右旗| 玉门市| 杭锦后旗| 黔西县| 涟源市| 漳浦县| 顺昌县| 通州市| 巴林左旗| 介休市| 长寿区| 珲春市| 平武县| 富川| 法库县| 嘉禾县|