ホームページ > WeChat アプレット > WeChatの開発 > Java WeChat開発APIサーバーアクセスの詳細説明

Java WeChat開発APIサーバーアクセスの詳細説明

高洛峰
リリース: 2017-03-15 17:10:36
オリジナル
1909 人が閲覧しました

この記事では、主に Java WeChat 開発 API サーバーへのアクセスについて詳しく説明します。興味のある方は、

WeChat 開発 API を介してサーバーにアクセスする方法を以下で紹介します

1。

* この例は、WeChat 開発ドキュメントに基づいて開発されています: http://mp.weixin.qq.com/wiki/home/index.html 最新バージョン (4/3/2016 5:34:36 PM) ) デモ。

* 編集プラットフォーム: myeclipse10.7+win32+jdk1.7+tomcat7.0

* サーバー: Alibaba Cloud Windows Server 2008 64ビット
* プラットフォーム要件: サーブレット アノテーションメソッドを使用、プラットフォーム要件: j2ee6.0 +、jdk6.0+、tomcat7.0+
* デモは API 分析に重点を置いています。
* テストの説明を容易にするために、各テスト ケースは独立しており、 他の メソッドに依存しません。梱包についてはあまり考えないでください。
* デモは、可能な限り API 要件に従って実行する必要があります。その目的は、ドキュメントの使用方法を理解し、1 つの例から推測する効果を達成することです。
* 知識要件: しっかりした Java の基礎、http ネットワーク通信の知識の理解、javaweb の十分な理解、json解析
* 現在の時刻: 2016 年 4 月 3 日 5:32:57 PM、その時刻の影響を受けます。

2. 元の文書テキスト (要約)

文書アドレス: http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
チャットパブリックプラットフォームの開発, 開発者は、次の手順を完了する必要があります:

1. サーバー構成を入力します
2. サーバーアドレスの有効性を確認します
3. インターフェースドキュメント

3. ドキュメントを理解します。

サーバー アドレスの有効性を確認します

1. API は次のように導入されます: 開発者が情報を送信した後、WeChat サーバーは、入力されたサーバー アドレス URL に GET リクエストを送信します。リクエストには 4 つのパラメータが含まれます: 署名、

time

stamp、nonce、echostr 開発者は署名をチェックすることでリクエストを検証します (検証方法は以下にあります)。 この GET リクエストが WeChat サーバーからのものであることが確認できた場合は、echostr パラメーターの内容をそのまま返してください。そうすればアクセスが有効になり、開発者になることができます。そうでない場合は、アクセスは失敗します。
暗号化/検証プロセスは次のとおりです:
1)、3 つのパラメーター トークン、タイムスタンプ、および nonce を辞書順に並べ替えます
2)、3 つのパラメーター
string
を 1 つの文字列に結合して sha1encryption3) 、開発者が取得した暗号化された文字列を署名と比較すると、リクエストが WeChat からのものであることがわかります

2. を理解すると、リクエストが「GET」メソッドであることを示し、リクエストにアクセスすると次の結果が返されます4 つのパラメータ: シグネチャ、タイムスタンプ、nonce、echostr。

これらのパラメータを受け入れてから処理する必要があります。検証が成功した場合は、受信した「echostr」を返します。そうでない場合、検証は失敗します。

検証方法は、受け取ったtoken、timestamp、nonceの3つのパラメータを辞書編集順にソートし、sha1暗号化を行い、最後に署名と比較します。
*暗号化された文字列と署名を比較し、一致した場合は「echostr」が返され、検証が成功します。


3. 実装サーブレット CoreServlet を作成して HttpServlet を実装し、

doGet メソッドをオーバーロードします。

パラメータの準備

1

2

3

4

5

6

7

8

// 设置一个全局的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に記載されている3つの手順に従って

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

// 第一步:将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 + "接入失败");

}

ログイン後にコピー


1)内容を含むサーバー構成を入力します

サーバー構成は主に次のとおりですWeChat 開発プラットフォームのコードにアクセスした後、サーバーと WeChat アクセス インターフェイスを構成する必要があります。 2) サーバーの操作サーバーのTomcatを開き、書いたコードをwebappsファイルの下に置きます。 3)、WeChat パブリック プラットフォームの操作 *WeChat テスト アカウントを申請します (WeChat で直接スキャンしてログインできます):

http://www.php.cn/


*WeChat パブリック プラットフォーム テスト アカウントを開き、インターフェース構成情報を設定します。設定は次のとおりです

URL: http://www.php.cn/


トークン:wgyscsf
*送信すると、設定の成功と失敗のリマインダーが表示されます。

该部分所有操作源码,可以直接使用


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

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> 邮箱:wgyscsf@163.com</n> 博客 http://www.php.cn/;/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的第一篇内容就为大家介绍到这里,希望大家继续关注之后的更新内容,谢谢!

以上がJava WeChat開発APIサーバーアクセスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
ヘルプ: JAVA 暗号化データ PHP 復号化
から 1970-01-01 08:00:00
0
0
0
JAVAをインストールする
から 1970-01-01 08:00:00
0
0
0
Javaをインストールできません
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート