Maison > Applet WeChat > Développement WeChat > Explication détaillée de l'accès au serveur API de développement Java WeChat

Explication détaillée de l'accès au serveur API de développement Java WeChat

高洛峰
Libérer: 2017-03-15 17:10:36
original
1743 Les gens l'ont consulté

Cet article partage principalement avec vous l'explication détaillée de l'accès au serveur API du développement Java WeChat. Les amis intéressés peuvent se référer à

Comment accéder au serveur via l'API de développement WeChat, comme suit. je vous le présente

1. Description

* Cet exemple est basé sur la documentation de développement WeChat : http://mp.weixin .qq. com/wiki/home/index.html dernière version (4/3/2016 17:34:36 PM) pour la démonstration du développement.

* Plateforme d'édition : myeclipse10.7 win32 jdk1.7 tomcat7.0

* Serveur : Alibaba Cloud Windows Server 2008 64bits
* Exigences de la plate-forme : ServletUtiliser la méthode d'annotation, exigences de la plateforme : j2ee6.0, jdk6.0, tomcat7.0
* La démonstration se concentre davantage sur l'analyse des API.
* Pour faciliter la description des tests, chaque cas de test est indépendant et ne dépend pas d' autres méthodes. Ne pensez pas beaucoup à l'emballage.
* La démonstration doit être réalisée autant que possible conformément aux exigences de l'API. Le but est de comprendre comment utiliser le document et d'obtenir l'effet de tirer des conclusions à partir d'un exemple.
* Connaissances requises : base Java solide, compréhension des connaissances en communication réseau http, compréhension suffisante de javaweb, jsonparsing
* Heure actuelle : 4/3/2016 17:32:57 PM , basé sur cette heure.

2. Document original (Résumé)

Adresse du document : http://mp.weixin.qq.com/wiki /8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
Pour accéder à la plateforme publique WeChat pour le développement, les développeurs doivent suivre les étapes suivantes :

1. configuration
2. Vérifier la validité de l'adresse du serveur
3. Implémenter une logique métier basée sur l'interface document

3. Compréhension du document

Vérifiez la validité de l'adresse du serveur

1. L'API est introduite comme suit :

Une fois que le développeur a soumis les informations, le WeChat Le serveur enverra une requête GET à l'URL de l'adresse du serveur renseignée. La requête GET comporte quatre paramètres : signature, timestamp, nonce, echostr
. en vérifiant la signature (la méthode de vérification est ci-dessous).
S'il est confirmé que cette requête GET provient du serveur WeChat, veuillez renvoyer le contenu du paramètre echostr tel quel, alors l'accès prendra effet et vous deviendrez développeur avec succès, sinon l'accès échouera.
Le processus de cryptage/vérification est le suivant :
1) Trier les trois paramètres token, timestamp et nonce par ordre lexicographique
2) Assembler les trois paramètres chaîne en une seule. est sha1crypté
3). La chaîne cryptée obtenue par le développeur peut être comparée à la signature, indiquant que la requête provient de WeChat

2. Comprenez que

indique que la requête est en mode "GET" et que l'accès à la requête renverra quatre paramètres : signature, horodatage, nonce et echostr.
Nous devons accepter ces paramètres puis les traiter. Si la vérification réussit, renvoyez le "echostr" reçu, sinon la vérification échoue.
La méthode de vérification consiste à trier les trois paramètres reçus du jeton, de l'horodatage et du nom occasionnel dans l'ordre lexicographique, puis à effectuer le cryptage sha1 et enfin à le comparer avec la signature.
* La chaîne cryptée peut être comparée à la signature Si elles sont égales [l'API peut ne pas être expliquée clairement], "echostr" sera renvoyé et la vérification est réussie.

3. Implémentez

Créez un servlet CoreServlet pour implémenter HttpServlet, surchargez la méthode doGet.
Préparation des paramètres


// 设置一个全局的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");
Copier après la connexion

Suivez les trois étapes mentionnées dans l'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 + "接入失败");
}
Copier après la connexion

4. Remplissez la configuration du serveur

1), y compris le contenu
La configuration du serveur est principalement requise après avoir écrit notre propre code pour accéder à la plateforme de développement WeChat Serveur configuré et interface d'accès WeChat.
2) Fonctionnement du serveur
Ouvrez le tomcat du serveur et mettez le code écrit sous le fichier webapps.
3), fonctionnement de la plateforme publique WeChat
* Demandez un compte test WeChat (vous pouvez vous connecter en scannant directement avec WeChat) : //m.sbmmt.com/
* Ouvrez le compte de test de la plateforme publique WeChat et configurez les informations de configuration de l'interface. La configuration est la suivante
URL : //m.sbmmt.com/
Jeton :wgyscsf
*Soumettre, il y aura des rappels en cas de réussite et configurations échouées.

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


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> 博客 //m.sbmmt.com/;/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);
  }

}
Copier après la connexion

java微信开发API的第一篇内容就为大家介绍到这里,希望大家继续关注之后的更新内容,谢谢!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal