欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、說(shuō)明

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

二、文檔原文(摘要)

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

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

三、文檔理解

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

1、api這樣介紹:

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

2、理解

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

3、實(shí)現(xiàn)

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

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

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

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




// 第二步:將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(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加密的實(shí)現(xiàn),不再貼代碼    

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




/*
 * api要求: 若確認(rèn)此次GET請(qǐng)求來(lái)自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容, 則接入生效, 成為開(kāi)發(fā)者成功,否則接入失敗。
 */
// 第三步: 開(kāi)發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信接入成功。
System.out.println(TAG + ":" + mParms + "---->" + signature);
if (mParms.equals(signature)) {
  // System.out.println(TAG + ":" + mParms + "---->" + signature);
  printWriter.write(echostr);
} else {
  // 接入失敗,不用回寫(xiě)
  // System.out.println(TAG + "接入失敗");
}  

4、填寫(xiě)服務(wù)器配置

1)、包括內(nèi)容
服務(wù)器配置主要是當(dāng)我們寫(xiě)好自己的接入微信開(kāi)發(fā)平臺(tái)的代碼之后要配置的服務(wù)器和微信接入接口。
2)、服務(wù)器操作
打開(kāi)服務(wù)器的tomcat,將寫(xiě)好的代碼放到webapps文件下。
3)、微信公眾平臺(tái)操作
*申請(qǐng)微信測(cè)試賬號(hào)(直接用微信掃一掃即可以登錄):http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
*打開(kāi)微信公眾平臺(tái)測(cè)試號(hào),配置接口配置信息。配置如下
        URL:http://ip/WeixinApiDemo/CoreServlet
        Token:wgyscsf
*提交,配置成功和失敗均會(huì)有提醒。

該部分所有操作源碼,可以直接使用

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>
 *     編寫(xiě)時(shí)期 2016-4-3 下午4:34:05
 */
@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {
  String TAG = "CoreServlet";

  /*
   * 第二步:驗(yàn)證服務(wù)器地址的有效性 開(kāi)發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫(xiě)的服務(wù)器地址URL上,
   * GET請(qǐng)求攜帶四個(gè)參數(shù):signature、timestamp、nonce、echostr
   * 開(kāi)發(fā)者通過(guò)檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。 若確認(rèn)此次GET請(qǐng)求來(lái)自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,
   * 則接入生效, 成為開(kāi)發(fā)者成功,否則接入失敗。
   * 
   * 加密/校驗(yàn)流程如下: 1. 將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序 2.
   * 將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密 3. 開(kāi)發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信
   */
  /*
   * 字典排序(lexicographical
   * order)是一種對(duì)于隨機(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è)置一個(gè)全局的token,開(kāi)發(fā)者自己設(shè)置。api這樣解釋:Token可由開(kāi)發(fā)者可以任意填寫(xiě),
    // 用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì),從而驗(yàn)證安全性)
    String token = "wgyscsf";
    // 根據(jù)api說(shuō)明,獲取上述四個(gè)參數(shù)
    String signature = req.getParameter("signature");
    String timestamp = req.getParameter("timestamp");
    String nonce = req.getParameter("nonce");
    String echostr = req.getParameter("echostr");
    // // temp:臨時(shí)打印,觀看返回參數(shù)情況
    // System.out.println(TAG + ":signature:" + signature + ",timestamp:"
    // + timestamp + ",nonce:" + nonce + ",echostr:" + echostr);
    // 根據(jù)api所說(shuō)的“加密/校驗(yàn)流程”進(jìn)行接入。共計(jì)三步

    // 第一步:將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序
    String[] parms = new String[] { token, timestamp, nonce };// 將需要字典序排列的字符串放到數(shù)組中
    Arrays.sort(parms);// 按照api要求進(jìn)行字典序排序
    // 第二步:將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(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請(qǐng)求來(lái)自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容, 則接入生效, 成為開(kāi)發(fā)者成功,否則接入失敗。
     */
    // 第三步: 開(kāi)發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信接入成功。
    System.out.println(TAG + ":" + mParms + "---->" + signature);
    if (mParms.equals(signature)) {
      // System.out.println(TAG + ":" + mParms + "---->" + signature);
      printWriter.write(echostr);
    } else {
      // 接入失敗,不用回寫(xiě)
      // System.out.println(TAG + "接入失敗");
    }
  }

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

}

java微信開(kāi)發(fā)API的第一篇內(nèi)容就為大家介紹到這里,希望大家繼續(xù)關(guān)注之后的更新內(nèi)容,謝謝!

相關(guān)文章

  • springmvc利用jquery.form插件異步上傳文件示例

    springmvc利用jquery.form插件異步上傳文件示例

    本篇文章主要介紹了springmvc利用jquery.form插件異步上傳文件示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Java解析使用JSON的多種方法

    Java解析使用JSON的多種方法

    使用JSON作為數(shù)據(jù)傳輸,在瀏覽器端非常方便。JSON去除了所有JavaScript執(zhí)行代碼,只保留對(duì)象格式,而且JSON天生適合JavaScript處理,所以,絕大多數(shù)REST?API都選擇JSON作為數(shù)據(jù)傳輸格式?,F(xiàn)在問(wèn)題來(lái)了:使用Java如何對(duì)JSON進(jìn)行讀寫(xiě)?
    2022-12-12
  • Java多線程之JUC(java.util.concurrent)的常見(jiàn)類(多線程編程常用類)

    Java多線程之JUC(java.util.concurrent)的常見(jiàn)類(多線程編程常用類)

    這篇文章主要給大家介紹了關(guān)于Java多線程之JUC(java.util.concurrent)的常見(jiàn)類(多線程編程常用類)的相關(guān)資料,Java中的JUC(java.util.concurrent)包提供了一些并發(fā)編程中常用的類,這些類可以幫助我們更方便地實(shí)現(xiàn)多線程編程,需要的朋友可以參考下
    2024-02-02
  • SpringSecurity實(shí)現(xiàn)訪問(wèn)控制url匹配

    SpringSecurity實(shí)現(xiàn)訪問(wèn)控制url匹配

    本文主要介紹了SpringSecurity實(shí)現(xiàn)訪問(wèn)控制url匹配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 一文讀懂JAVA中HttpURLConnection的用法

    一文讀懂JAVA中HttpURLConnection的用法

    這篇文章主要介紹了JAVA中的HttpURLConnection用法,文中講解非常細(xì)致,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 如何修改覆蓋spring boot默認(rèn)日志策略logback詳解

    如何修改覆蓋spring boot默認(rèn)日志策略logback詳解

    這篇文章主要給大家介紹了關(guān)于如何修改覆蓋spring boot默認(rèn)日志策略logback的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • springboot集成Swagger的方法(讓你擁有屬于自己的api管理器)

    springboot集成Swagger的方法(讓你擁有屬于自己的api管理器)

    在大型的項(xiàng)目中,如果你有非常多的接口需要統(tǒng)一管理,或者需要進(jìn)行接口測(cè)試,那么我們通常會(huì)在繁雜地api中找到需要進(jìn)行測(cè)試或者管理的接口,接下來(lái)通過(guò)本文給大家介紹springboot集成Swagger的方法讓你擁有屬于自己的api管理器,感興趣的朋友一起看看吧
    2021-11-11
  • java內(nèi)部類之成員內(nèi)部類、局部?jī)?nèi)部類和匿名內(nèi)部類用法及說(shuō)明

    java內(nèi)部類之成員內(nèi)部類、局部?jī)?nèi)部類和匿名內(nèi)部類用法及說(shuō)明

    這篇文章主要介紹了java內(nèi)部類之成員內(nèi)部類、局部?jī)?nèi)部類和匿名內(nèi)部類的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • java實(shí)現(xiàn)簡(jiǎn)易撲克牌游戲

    java實(shí)現(xiàn)簡(jiǎn)易撲克牌游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易撲克牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • SpringBoot的HTTPS配置實(shí)現(xiàn)

    SpringBoot的HTTPS配置實(shí)現(xiàn)

    本文主要介紹了SpringBoot的HTTPS配置實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論