最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java微信開發(fā)API第一步 服務(wù)器接入

 更新時間:2016年05月18日 15:48:31   作者:剩菜剩飯  
這篇文章主要為大家分享了java微信開發(fā)API的第一步操作服務(wù)器接入,感興趣的小伙伴們可以參考一下

微信開發(fā)API如何接入服務(wù)器,下面就為大家進(jìn)行介紹

一、說明

* 本示例根據(jù)微信開發(fā)文檔:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )進(jìn)行開發(fā)演示。
* 編輯平臺:myeclipse10.7+win32+jdk1.7+tomcat7.0 
* 服務(wù)器:阿里云 windows server 2008 64bits
* 平臺要求:servlet使用注解方式,平臺要求:j2ee6.0+、jdk6.0+、tomcat7.0+
* 演示更加注重于api解析。
* 為了便于測試說明,每個測試用例為獨(dú)立,不依賴于其它方法。對于封裝,不多加考慮。
* 演示盡可能按照API要求進(jìn)行,目的:了解文檔使用方式,達(dá)到舉一反三的效果。
* 知識要求:牢固的java基礎(chǔ)、了解http網(wǎng)絡(luò)通信知識、對于javaweb有足夠了解、json解析
* 當(dāng)前時間:4/3/2016 5:32:57 PM ,以該時間為準(zhǔn)。

二、文檔原文(摘要)

文檔地址:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
接入微信公眾平臺開發(fā),開發(fā)者需要按照如下步驟完成:

1、填寫服務(wù)器配置
2、驗證服務(wù)器地址的有效性  
3、依據(jù)接口文檔實現(xiàn)業(yè)務(wù)邏輯

三、文檔理解

驗證服務(wù)器地址的有效性

1、api這樣介紹:

開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器地址URL上,GET請求攜帶四個參數(shù):signature、timestamp、nonce、echostr
開發(fā)者通過檢驗signature對請求進(jìn)行校驗(下面有校驗方式)。
若確認(rèn)此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。
加密/校驗流程如下:
1)、將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序
2)、將三個參數(shù)字符串拼接成一個字符串進(jìn)行sha1加密
3)、開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信

2、理解

說明該請求是“GET”方式,并且訪問該請求會返回四個參數(shù):signature、timestamp、nonce、echostr。
我們需要接受這幾個參數(shù),然后進(jìn)行處理。如果驗證成功,返回接收到的“echostr”,否則驗證失敗。
驗證方式是對接受到的token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序,然后進(jìn)行sha1加密,最后和signature對比。
*加密后的字符串可與signature對比,如果相等【該處api可能解釋不是太明白】,返回“echostr”,驗證成功。

3、實現(xiàn)

創(chuàng)建一個servlet CoreServlet實現(xiàn)HttpServlet,重載doGet方法。
參數(shù)準(zhǔn)備

// 設(shè)置一個全局的token,開發(fā)者自己設(shè)置。api這樣解釋:Token可由開發(fā)者可以任意填寫,
// 用作生成簽名(該Token會和接口URL中包含的Token進(jìn)行比對,從而驗證安全性)
String token = "wgyscsf";
// 根據(jù)api說明,獲取上述四個參數(shù)
String signature = req.getParameter("signature");
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String echostr = req.getParameter("echostr");

根據(jù)api所說的三步驟進(jìn)行操作

// 第一步:將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序
String[] parms = new String[] { token, timestamp, nonce };// 將需要字典序排列的字符串放到數(shù)組中
Arrays.sort(parms);// 按照api要求進(jìn)行字典序排序【百度:什么是字典序排序】




// 第二步:將三個參數(shù)字符串拼接成一個字符串進(jìn)行sha1加密【百度:java sha1加密】
// 拼接字符串
String parmsString = "";// 注意,此處不能=null。
for (int i = 0; i < parms.length; i++) {
  parmsString += parms[i];
}
// sha1加密
String mParms = null;// 加密后的結(jié)果

... //該地方是sha1加密的實現(xiàn),不再貼代碼    

mParms = hexString.toString();// 加密結(jié)果




/*
 * api要求: 若確認(rèn)此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容, 則接入生效, 成為開發(fā)者成功,否則接入失敗。
 */
// 第三步: 開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信接入成功。
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、填寫服務(wù)器配置

1)、包括內(nèi)容
服務(wù)器配置主要是當(dāng)我們寫好自己的接入微信開發(fā)平臺的代碼之后要配置的服務(wù)器和微信接入接口。
2)、服務(wù)器操作
打開服務(wù)器的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 高遠(yuǎn)</n> 郵箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *     編寫時期 2016-4-3 下午4:34:05
 */
@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {
  String TAG = "CoreServlet";

  /*
   * 第二步:驗證服務(wù)器地址的有效性 開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器地址URL上,
   * GET請求攜帶四個參數(shù):signature、timestamp、nonce、echostr
   * 開發(fā)者通過檢驗signature對請求進(jìn)行校驗(下面有校驗方式)。 若確認(rèn)此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容,
   * 則接入生效, 成為開發(fā)者成功,否則接入失敗。
   * 
   * 加密/校驗流程如下: 1. 將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序 2.
   * 將三個參數(shù)字符串拼接成一個字符串進(jìn)行sha1加密 3. 開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信
   */
  /*
   * 字典排序(lexicographical
   * order)是一種對于隨機(jī)變量形成序列的排序方法。其方法是,按照字母順序,或者數(shù)字小大順序,由小到大的形成序列。
   */
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

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

    // 設(shè)置一個全局的token,開發(fā)者自己設(shè)置。api這樣解釋:Token可由開發(fā)者可以任意填寫,
    // 用作生成簽名(該Token會和接口URL中包含的Token進(jìn)行比對,從而驗證安全性)
    String token = "wgyscsf";
    // 根據(jù)api說明,獲取上述四個參數(shù)
    String signature = req.getParameter("signature");
    String timestamp = req.getParameter("timestamp");
    String nonce = req.getParameter("nonce");
    String echostr = req.getParameter("echostr");
    // // temp:臨時打印,觀看返回參數(shù)情況
    // System.out.println(TAG + ":signature:" + signature + ",timestamp:"
    // + timestamp + ",nonce:" + nonce + ",echostr:" + echostr);
    // 根據(jù)api所說的“加密/校驗流程”進(jìn)行接入。共計三步

    // 第一步:將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序
    String[] parms = new String[] { token, timestamp, nonce };// 將需要字典序排列的字符串放到數(shù)組中
    Arrays.sort(parms);// 按照api要求進(jìn)行字典序排序
    // 第二步:將三個參數(shù)字符串拼接成一個字符串進(jìn)行sha1加密
    // 拼接字符串
    String parmsString = "";// 注意,此處不能=null。
    for (int i = 0; i < parms.length; i++) {
      parmsString += parms[i];
    }
    // sha1加密
    String mParms = null;// 加密后的結(jié)果
    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();
    // 字節(jié)數(shù)組轉(zhuǎn)換為 十六進(jìn)制 數(shù)
    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();// 加密結(jié)果

    /*
     * api要求: 若確認(rèn)此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容, 則接入生效, 成為開發(fā)者成功,否則接入失敗。
     */
    // 第三步: 開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信接入成功。
    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微信開發(fā)API的第一篇內(nèi)容就為大家介紹到這里,希望大家繼續(xù)關(guān)注之后的更新內(nèi)容,謝謝!

相關(guān)文章

  • 基于JavaMail的Java實現(xiàn)簡單郵件發(fā)送功能

    基于JavaMail的Java實現(xiàn)簡單郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了基于JavaMail的Java實現(xiàn)簡單郵件發(fā)送功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java區(qū)分絕對路徑和相對路徑的方法

    java區(qū)分絕對路徑和相對路徑的方法

    這篇文章主要介紹了java區(qū)分絕對路徑和相對路徑的方法,實例分析了java針對路徑操作的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • 不可不知道的10個java謊言

    不可不知道的10個java謊言

    這篇文章主要為大家詳細(xì)介紹了不可不知道的10個java謊言,大家一定要謹(jǐn)慎,需要了解的朋友可以參考一下
    2016-09-09
  • 利用POI生成EXCEL文件的方法實例

    利用POI生成EXCEL文件的方法實例

    Apache POI 是用Java編寫的免費(fèi)開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能,下面這篇文章主要給大家介紹了關(guān)于利用POI生成EXCEL文件的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • java基礎(chǔ)檢查和未檢查異常處理詳解

    java基礎(chǔ)檢查和未檢查異常處理詳解

    這篇文章介紹了java基礎(chǔ)中異常的處理,主要講解了java檢查和未檢查異常處理的示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Springboot使用@Cacheable注解實現(xiàn)數(shù)據(jù)緩存

    Springboot使用@Cacheable注解實現(xiàn)數(shù)據(jù)緩存

    本文介紹如何在Springboot中通過@Cacheable注解實現(xiàn)數(shù)據(jù)緩存,在每次調(diào)用添加了@Cacheable注解的方法時,Spring 會檢查指定參數(shù)的指定目標(biāo)方法是否已經(jīng)被調(diào)用過,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10
  • 基于mybatis中<include>標(biāo)簽的作用說明

    基于mybatis中<include>標(biāo)簽的作用說明

    這篇文章主要介紹了基于mybatis中<include>標(biāo)簽的作用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 如何解決SpringBoot啟動時無法加載配置文件或環(huán)境變量問題

    如何解決SpringBoot啟動時無法加載配置文件或環(huán)境變量問題

    文章主要介紹了在Spring Boot項目中遇到配置文件加載失敗和資源目錄圖標(biāo)異常的問題,并提供了詳細(xì)的解決步驟,解決方法包括在pom.xml文件中添加特定配置,確保資源目錄順序正確,以及注意節(jié)點(diǎn)的正確使用,通過這些步驟,可以有效解決資源加載問題,提高開發(fā)效率
    2024-12-12
  • bug解決Failed_to_execute_goal_org.springframework

    bug解決Failed_to_execute_goal_org.springframework

    這篇文章主要為大家介紹了bug解決Failed_to_execute_goal_org.springframework,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Groovy編程入門攻略

    Groovy編程入門攻略

    這篇文章主要介紹了Groovy編程入門攻略,Groovy是一種同樣使用Java虛擬機(jī)的動態(tài)語言,需要的朋友可以參考下
    2015-07-07

最新評論

株洲市| 屏东市| 上杭县| 江达县| 广灵县| 蕲春县| 瑞昌市| 从江县| 白河县| 祁东县| 曲阜市| 望都县| 濉溪县| 亳州市| 古蔺县| 汨罗市| 琼结县| 当雄县| 白银市| 阿瓦提县| 庆安县| 新郑市| 同德县| 石嘴山市| 朔州市| 邳州市| 自治县| 汉沽区| 平谷区| 东城区| 即墨市| 连城县| 长子县| 鹤峰县| 遂平县| 新巴尔虎右旗| 金乡县| 太康县| 新沂市| 仙游县| 锡林浩特市|