Heim  >  Artikel  >  WeChat-Applet  >  Detaillierte Erläuterung des Zugriffs auf den Java WeChat-Entwicklungs-API-Server

Detaillierte Erläuterung des Zugriffs auf den Java WeChat-Entwicklungs-API-Server

高洛峰
高洛峰Original
2017-03-15 17:10:361697Durchsuche

Dieser Artikel teilt Ihnen hauptsächlich die detaillierte Erklärung des Java WeChat-Entwicklungs-API-Serverzugriffs mit

So greifen Sie wie folgt auf den Server über die WeChat-Entwicklungs-API zu Ich stelle es Ihnen vor

1. Beschreibung

* Dieses Beispiel basiert auf der WeChat-Entwicklungsdokumentation: http://mp.weixin .qq. com/wiki/home/index.html neueste Version (03.04.2016 17:34:36 Uhr) zur Entwicklungsdemonstration.

* Bearbeitungsplattform: myeclipse10.7+win32+jdk1.7+tomcat7.0

* Server: Alibaba Cloud Windows Server 2008 64bits
* Plattformanforderungen : Servlet verwendet Annotationsmethode, Plattformanforderungen: j2ee6.0+, jdk6.0+, tomcat7.0+
* Die Demonstration konzentriert sich mehr auf die API-Analyse.
* Um die Testbeschreibung zu erleichtern, ist jeder Testfall unabhängig und nicht von anderen Methoden abhängig. Denken Sie nicht viel über die Verpackung nach.
* Die Demonstration sollte so weit wie möglich in Übereinstimmung mit den API-Anforderungen durchgeführt werden. Der Zweck besteht darin, zu verstehen, wie das Dokument verwendet wird, und den Effekt zu erzielen, aus einem Beispiel Schlussfolgerungen zu ziehen.
* Wissensvoraussetzungen: solide Java-Grundlagen, Kenntnisse der HTTP-Netzwerkkommunikation, ausreichende Kenntnisse von Javaweb, jsonParsing
* Aktuelle Zeit: 03.04.2016 17:32:57 Uhr, basierend auf dieser Zeit.

2. Originaldokument (Zusammenfassung)

Dokumentadresse: http://mp.weixin.qq.com/wiki /8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
Um auf die öffentliche WeChat-Plattform für die Entwicklung zuzugreifen, müssen Entwickler die folgenden Schritte ausführen:

1 Konfiguration
2. Überprüfen Sie die Gültigkeit der Serveradresse
3. Implementieren Sie Geschäftslogik basierend auf dem Schnittstellen- Dokument

3. Dokumentverständnis

Überprüfen Sie die Gültigkeit der Serveradresse

1. Die API wird wie folgt eingeführt:

Nachdem der Entwickler die Informationen übermittelt hat, wird der WeChat Der Server sendet eine GET-Anfrage an die eingegebene Serveradresse. Die GET-Anfrage enthält vier Parameter: Signatur, ZeitStempel, Echostr
durch Überprüfung der Signatur (die Überprüfungsmethode finden Sie unten).
Wenn bestätigt wird, dass diese GET-Anfrage vom WeChat-Server stammt, geben Sie bitte den Inhalt des Echostr-Parameters unverändert zurück. Dann wird der Zugriff wirksam und Sie werden erfolgreich Entwickler. Andernfalls schlägt der Zugriff fehl.
Der Verschlüsselungs-/Verifizierungsprozess ist wie folgt:
1) Sortieren Sie die drei Parameter Token, Zeitstempel und Nonce in lexikografischer Reihenfolge
2) Fügen Sie die drei Parameter Zeichenfolge zu einer Zeichenfolge zusammen ist sha1verschlüsselt
3). >2. Verstehen Sie, dass

angibt, dass sich die Anfrage im „GET“-Modus befindet und beim Zugriff auf die Anfrage vier Parameter zurückgegeben werden: Signatur, Zeitstempel, Nonce und Echostr. Wir müssen diese Parameter akzeptieren und dann verarbeiten. Wenn die Überprüfung erfolgreich ist, geben Sie das empfangene „echostr“ zurück, andernfalls schlägt die Überprüfung fehl. Die Überprüfungsmethode besteht darin, die empfangenen drei Parameter Token, Zeitstempel und Nonce in lexikografischer Reihenfolge zu sortieren, dann eine SHA1-Verschlüsselung durchzuführen und sie schließlich mit der Signatur zu vergleichen. * Die verschlüsselte Zeichenfolge kann mit der Signatur verglichen werden [die API wird möglicherweise nicht klar erklärt], wird „echostr“ zurückgegeben und die Überprüfung ist erfolgreich.




3. Implementieren Sie

Erstellen Sie ein Servlet CoreServlet, um HttpServlet zu implementieren, überladen Sie die doGet-Methode. Parametervorbereitung


Befolgen Sie die drei in der API genannten Schritte


// 设置一个全局的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");


4. Füllen Sie die Serverkonfiguration aus

// 第一步:将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), einschließlich Inhalt Die Serverkonfiguration ist hauptsächlich erforderlich, nachdem wir unseren eigenen Code geschrieben haben, um auf die WeChat-Entwicklungsplattform zuzugreifen Konfigurierter Server und WeChat-Zugriffsschnittstelle. 2) Serverbetrieb Öffnen Sie den Tomcat des Servers und legen Sie den geschriebenen Code unter der Webapps-Datei ab.

3), Betrieb der öffentlichen WeChat-Plattform

* Beantragen Sie ein WeChat-Testkonto (Sie können sich anmelden, indem Sie direkt mit WeChat scannen):
http://www.php.cn/

* Öffnen Sie das Testkonto der öffentlichen WeChat-Plattform und konfigurieren Sie die Schnittstellenkonfigurationsinformationen. Die Konfiguration ist wie folgt:

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

Token:wgyscsf*Senden, bei Erfolg werden Erinnerungen angezeigt und fehlgeschlagene Konfigurationen.

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


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的第一篇内容就为大家介绍到这里,希望大家继续关注之后的更新内容,谢谢!

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Zugriffs auf den Java WeChat-Entwicklungs-API-Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn