程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java微信開辟API第一步 辦事器接入

java微信開辟API第一步 辦事器接入

編輯:關於JAVA

java微信開辟API第一步 辦事器接入。本站提示廣大學習愛好者:(java微信開辟API第一步 辦事器接入)文章只能為提供參考,不一定能成為您想要的結果。以下是java微信開辟API第一步 辦事器接入正文


微信開辟API若何接入辦事器,上面就為年夜家停止引見

1、解釋

* 本示例依據微信開辟文檔:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )停止開辟演示。
* 編纂平台:myeclipse10.7+win32+jdk1.7+tomcat7.0 
* 辦事器:阿裡雲 windows server 2008 64bits
* 平台請求:servlet應用注解方法,平台請求:j2ee6.0+、jdk6.0+、tomcat7.0+
* 演示加倍重視於api解析。
* 為了便於測試解釋,每一個測試用例為自力,不依附於其它辦法。關於封裝,不多加斟酌。
* 演示盡量依照API請求停止,目標:懂得文檔應用方法,到達觸類旁通的後果。
* 常識請求:穩固的java基本、懂得http收集通訊常識、關於javaweb有足夠懂得、json解析
* 以後時光:4/3/2016 5:32:57 PM ,以該時光為准。

2、文檔原文(摘要)

文檔地址:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
接入微信"平台開辟,開辟者須要依照以下步調完成:

1、填寫辦事器設置裝備擺設
2、驗證辦事器地址的有用性  
3、根據接口文檔完成營業邏輯

3、文檔懂得

驗證辦事器地址的有用性

1、api如許引見:

開辟者提交信息後,微佩服務器將發送GET要求到填寫的辦事器地址URL上,GET要求攜帶四個參數:signature、timestamp、nonce、echostr
開辟者經由過程磨練signature對要求停止校驗(上面有校驗方法)。
若確認此次GET要求來自微佩服務器,請原樣前往echostr參數內容,則接入失效,成為開辟者勝利,不然接入掉敗。
加密/校驗流程以下:
1)、將token、timestamp、nonce三個參數停止字典序排序
2)、將三個參數字符串拼接成一個字符串停止sha1加密
3)、開辟者取得加密後的字符串可與signature比較,標識該要求起源於微信

2、懂得

解釋該要求是“GET”方法,而且拜訪該要求會前往四個參數:signature、timestamp、nonce、echostr。
我們須要接收這幾個參數,然落後行處置。假如驗證勝利,前往吸收到的“echostr”,不然驗證掉敗。
驗證方法是對接收到的token、timestamp、nonce三個參數停止字典序排序,然落後行sha1加密,最初和signature比較。
*加密後的字符串可與signature比較,假如相等【該處api能夠說明不是太明確】,前往“echostr”,驗證勝利。

3、完成

創立一個servlet CoreServlet完成HttpServlet,重載doGet辦法。
參數預備

// 設置一個全局的token,開辟者本身設置。api如許說明:Token可由開辟者可以隨意率性填寫,
// 用作生成簽名(該Token會和接口URL中包括的Token停止比對,從而驗證平安性)
String token = "wgyscsf";
// 依據api解釋,獲得上述四個參數
String signature = req.getParameter("signature");
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String echostr = req.getParameter("echostr");

依據api所說的三步調停止操作

// 第一步:將token、timestamp、nonce三個參數停止字典序排序
String[] parms = new String[] { token, timestamp, nonce };// 將須要字典序分列的字符串放到數組中
Arrays.sort(parms);// 依照api請求停止字典序排序【百度:甚麼是字典序排序】




// 第二步:將三個參數字符串拼接成一個字符串停止sha1加密【百度:java sha1加密】
// 拼接字符串
String parmsString = "";// 留意,此處不克不及=null。
for (int i = 0; i < parms.length; i++) {
  parmsString += parms[i];
}
// sha1加密
String mParms = null;// 加密後的成果

... //該處所是sha1加密的完成,不再貼代碼    

mParms = hexString.toString();// 加密成果




/*
 * api請求: 若確認此次GET要求來自微佩服務器,請原樣前往echostr參數內容, 則接入失效, 成為開辟者勝利,不然接入掉敗。
 */
// 第三步: 開辟者取得加密後的字符串可與signature比較,標識該要求起源於微信接入勝利。
System.out.println(TAG + ":" + mParms + "---->" + signature);
if (mParms.equals(signature)) {
  // System.out.println(TAG + ":" + mParms + "---->" + signature);
  printWriter.write(echostr);
} else {
  // 接入掉敗,不消回寫
  // System.out.println(TAG + "接入掉敗");
}  

4、填寫辦事器設置裝備擺設

1)、包含內容
辦事器設置裝備擺設重要是當我們寫好本身的接入微信開辟平台的代碼以後要設置裝備擺設的辦事器和微信接入接口。
2)、辦事器操作
翻開辦事器的tomcat,將寫好的代碼放到webapps文件下。
3)、微信"平台操作
*請求微信測試賬號(直接用微信掃一掃便可以登錄):http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
*翻開微信"平台測試號,設置裝備擺設接口設置裝備擺設信息。設置裝備擺設以下
        URL:http://ip/WeixinApiDemo/CoreServlet
        Token:wgyscsf
*提交,設置裝備擺設勝利和掉敗均會有提示。

該部門一切操作源碼,可以直接應用

package com.gist.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

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

/**
 * @author 高遠</n> 郵箱:[email protected]</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *     編寫時代 2016-4-3 下晝4:34:05
 */
@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {
  String TAG = "CoreServlet";

  /*
   * 第二步:驗證辦事器地址的有用性 開辟者提交信息後,微佩服務器將發送GET要求到填寫的辦事器地址URL上,
   * GET要求攜帶四個參數:signature、timestamp、nonce、echostr
   * 開辟者經由過程磨練signature對要求停止校驗(上面有校驗方法)。 若確認此次GET要求來自微佩服務器,請原樣前往echostr參數內容,
   * 則接入失效, 成為開辟者勝利,不然接入掉敗。
   * 
   * 加密/校驗流程以下: 1. 將token、timestamp、nonce三個參數停止字典序排序 2.
   * 將三個參數字符串拼接成一個字符串停止sha1加密 3. 開辟者取得加密後的字符串可與signature比較,標識該要求起源於微信
   */
  /*
   * 字典排序(lexicographical
   * order)是一種關於隨機變量構成序列的排序辦法。其辦法是,依照字母次序,或許數字小年夜次序,由小到年夜的構成序列。
   */
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

    // 設置編碼
    req.setCharacterEncoding("utf-8");
    resp.setContentType("html/text;charset=utf-8");
    resp.setCharacterEncoding("utf-8");
    // 獲得輸入流
    PrintWriter printWriter = resp.getWriter();

    // 設置一個全局的token,開辟者本身設置。api如許說明:Token可由開辟者可以隨意率性填寫,
    // 用作生成簽名(該Token會和接口URL中包括的Token停止比對,從而驗證平安性)
    String token = "wgyscsf";
    // 依據api解釋,獲得上述四個參數
    String signature = req.getParameter("signature");
    String timestamp = req.getParameter("timestamp");
    String nonce = req.getParameter("nonce");
    String echostr = req.getParameter("echostr");
    // // temp:暫時打印,不雅看前往參數情形
    // System.out.println(TAG + ":signature:" + signature + ",timestamp:"
    // + timestamp + ",nonce:" + nonce + ",echostr:" + echostr);
    // 依據api所說的“加密/校驗流程”停止接入。合計三步

    // 第一步:將token、timestamp、nonce三個參數停止字典序排序
    String[] parms = new String[] { token, timestamp, nonce };// 將須要字典序分列的字符串放到數組中
    Arrays.sort(parms);// 依照api請求停止字典序排序
    // 第二步:將三個參數字符串拼接成一個字符串停止sha1加密
    // 拼接字符串
    String parmsString = "";// 留意,此處不克不及=null。
    for (int i = 0; i < parms.length; i++) {
      parmsString += parms[i];
    }
    // sha1加密
    String mParms = null;// 加密後的成果
    MessageDigest digest = null;
    try {
      digest = java.security.MessageDigest.getInstance("SHA");
    } catch (NoSuchAlgorithmException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    digest.update(parmsString.getBytes());
    byte messageDigest[] = digest.digest();
    // Create Hex String
    StringBuffer hexString = new StringBuffer();
    // 字節數組轉換為 十六進制 數
    for (int i = 0; i < messageDigest.length; i++) {
      String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
      if (shaHex.length() < 2) {
        hexString.append(0);
      }
      hexString.append(shaHex);
    }
    mParms = hexString.toString();// 加密成果

    /*
     * api請求: 若確認此次GET要求來自微佩服務器,請原樣前往echostr參數內容, 則接入失效, 成為開辟者勝利,不然接入掉敗。
     */
    // 第三步: 開辟者取得加密後的字符串可與signature比較,標識該要求起源於微信接入勝利。
    System.out.println(TAG + ":" + mParms + "---->" + signature);
    if (mParms.equals(signature)) {
      // System.out.println(TAG + ":" + mParms + "---->" + signature);
      printWriter.write(echostr);
    } else {
      // 接入掉敗,不消回寫
      // System.out.println(TAG + "接入掉敗");
    }
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    doGet(req, resp);
  }

}

java微信開辟API的第一篇內容就為年夜家引見到這裡,願望年夜家持續存眷以後的更新內容,感謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved