登陸微信公衆平臺官網後,進入到公衆平臺後臺管理頁面。php
選擇 公衆號基本設置-》基本配置 ,點擊「修改配置」按鈕,填寫服務器地址(URL)、Token和EncodingAESKey。html
微信公衆號配置界面:java
以上配置須要認證後纔會獲得相應的權限。若是開發階段,咱們能夠申請開發者測試帳號。git
爲何要申請測試帳號?web
主要是由於測試帳號比咱們沒有認證的微信帳號權限大一點。足夠測試咱們的接口了。數組
如下是微信測試號的一些配置選項:緩存
服務器配置:tomcat
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 環境。
這些配置能夠參照個人其餘博客文章進行配置,這裏就很少說了。
以上介紹也能夠參考 微信開發文檔。
第二部分:微信服務器對接的實現代碼部分
那麼咱們如今開始擼碼吧!!!
方式一:經過本地進行調試。
詳細能夠參考個人文章:第3章 如何接入微信公衆平臺開發
方式二: 代碼須要放到第三方服務器上面進行調試。
1、 建立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 消息的接收、處理、響應 } }
(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; } }
(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>
校驗實現代碼,基本完成。
二 、把實現部署到服務器上。
方式一:部署到BAE上面。
(1)把程序從BAE上面導出來。
複製svn地址
在本地新建一個weixin的文件夾,而後從服務器上checkout代碼:
以下圖,說明成功導出代碼。
(2)把咱們寫的程序從eclipse裏面導出來,並打包成war包。
(3)把程序提交到BAE服務器上面。
預覽併發布
訪問如下咱們的連接: http://chiyan.duapp.com/
方式二:把校驗實現代碼部署到SAE上。
(1) 進入到sae控制檯。
(2 )而後選擇上傳代碼包。
經過eclipse打包成war包,而後傳到sae上。
(3)生成本身專屬的域名。
第三部分: 配置微信服務器。
1、 進入到公衆號測試帳號設置頁面
2、填寫配置
配置以後,會提示配置成功。
1、驗證以後須要作的一些邏輯處理。
/** * 處理微信服務器發來的消息 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 消息的接收、處理、響應 }
這個後面再寫業務,到此,咱們就完成了與微信服務器的校驗。
2、配置舒適提醒:
有朋友直接輸入該請求:http://chiyan.duapp.com/coreServlet
是會報500空指針的錯誤,由於咱們這樣訪問並無咱們程序中要傳的參數傳過去。
其餘文章關聯:
第一篇:微信公衆平臺開發實戰Java版之瞭解微信公衆平臺基礎知識以及資料準備
第二篇 :微信公衆平臺開發實戰Java版之開啓開發者模式,接入微信公衆平臺開發
第三篇 :微信公衆平臺開發實戰Java版之請求消息,響應消息以及事件消息類的封裝
第四篇 :微信公衆平臺開發實戰Java版之完成消息接受與相應以及消息的處理
第五篇 :微信公衆平臺開發實戰Java版之如何獲取公衆號的access_token以及緩存access_token
第六篇 :微信公衆平臺開發實戰Java版之如何自定義微信公衆號菜單
第七篇 :微信公衆平臺開發實戰Java版之如何獲取微信用戶基本信息
第八篇 :微信公衆平臺開發實戰Java版之如何網頁受權獲取用戶基本信息