Maison  >  Article  >  Applet WeChat  >  Guide d'accès pour les débutants au département de développement de WeChat

Guide d'accès pour les débutants au département de développement de WeChat

Y2J
Y2Joriginal
2017-05-09 09:20:042084parcourir

Le principe de fonctionnement de l'interface de message de la plateforme publique WeChat peut être grossièrement compris comme ceci : le processus depuis l'utilisateur jusqu'au compte public est comme ceci : l'utilisateur envoie un message à. le serveur WeChat, et le serveur WeChat le recevra. Le message est publié sur l'URL renseignée par l'utilisateur lors de l'accès. Dans le gestionnaire d'URL, la légitimité du message est d'abord jugée. Une fois le jugement réussi, la réponse correspondante est. effectué en fonction du contenu du corps du message. Le principe est facile à comprendre, et peut-être plus facile pour ceux qui ont été exposés à des prises.

Cependant, la documentation de WeChat est parfois un peu déroutante, et la documentation sur l'accès à WeChat n'est vraiment pas flatteuse. La première étape dans le document officiel consiste à « demander une interface de message ». Ici, vous devez remplir une URL. Cette URL est utilisée pour traiter les messages envoyés par WeChat, mais WeChat écrit la configuration appropriée dans l'URL dans la deuxième étape. . Soyez prudent et vous allez bousiller les débutants. Ci-dessous, je vais l'expliquer selon ma compréhension.

Tout d'abord, lorsque le développeur accède, le serveur WeChat enverra une requête get à l'URL que vous avez renseignée. Cette requête comporte quatre paramètres, respectivement la signature (signature cryptée WeChat, signature combinaison Le paramètre token renseigné par le développeur et le paramètre timestamp et le paramètre nonce dans la requête), timestamp (timestamp), nonce (nombre aléatoire), echostr (chaîne aléatoire) .Utilisez HttpContext.Current.Request.RawUrl pour obtenir l'URL d'origine de la requête en cours, comme indiqué dans la figure ci-dessous :

Guide daccès pour les débutants au département de développement de WeChat

Le développeur vérifie la requête en vérifiant le signature (ci-dessous méthode de vérification). 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.

加密/校验流程如下:1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
下面是代码实现。
首先,在你的处理程序中(我是新建了一个一般处理程序wx.ashx),判断当前请求的类型,因为接入时,是发送的GET请求,消息处理是发送的POST请求。如下图:
这里我对验证url的方法进行封装。
/// <summary>
        /// 验证url权限, 接入服务器        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public static bool ValidUrl(string token)
        {            string echoStr = VqiRequest.GetQueryString("echoStr");            if (CheckSignature(token))
            {                if (!string.IsNullOrEmpty(echoStr))
                {
                    Utils.ResponseWrite(echoStr);                    return true;
                }

            }            return false;
        }/// <summary>
        /// 验证微信签名        /// </summary>
        /// * 将token、timestamp、nonce三个参数进行字典序排序        /// * 将三个参数字符串拼接成一个字符串进行sha1加密        /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。        /// <returns></returns>
        public static bool CheckSignature(string token)
        {            string signature = VqiRequest.GetQueryString("signature");            string timestamp = VqiRequest.GetQueryString("timestamp");            string nonce = VqiRequest.GetQueryString("nonce");            string[] ArrTmp = { token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = Utils.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
            tmpStr = tmpStr.ToLower();            if (tmpStr == signature)
            {                return true;
            }            else
            {                return false;
            }
        }

Remarque : Le code VqiRequest.GetQueryString est une méthode de requête QueryString encapsulée. Lorsqu'il est utilisé, il peut être modifié en QueryString[""]

Le processus de traitement est comme indiqué sur la figure :

Guide daccès pour les débutants au département de développement de WeChat

Guide daccès pour les débutants au département de développement de WeChat

Mettez les trois paramètres signature, timestamp et nonce dans le

array ,

Guide daccès pour les débutants au département de développement de WeChat

Guide daccès pour les débutants au département de développement de WeChat

ArrTmp après tri :

Guide daccès pour les débutants au département de développement de WeChat

Trois seront trois Les chaînes de paramètres sont fusionnées en une seule chaîne :

Guide daccès pour les débutants au département de développement de WeChat

Chiffrez tmpStr avec sha1 et convertissez la chaîne cryptée en minuscule :

Guide daccès pour les débutants au département de développement de WeChat

Comparez-le ensuite avec la signature. Si elles sont identiques, cela signifie que la vérification est réussie.

Guide daccès pour les débutants au département de développement de WeChat

La vérification est réussie et echoStr est renvoyé à WeChat.

Guide daccès pour les débutants au département de développement de WeChat

/// <summary>
        /// 根据指定的密码和哈希算法生成一个适合于存储在配置文件中的哈希密码        /// </summary>
        /// <param name="str">要进行哈希运算的密码</param>
        /// <param name="type"> 要使用的哈希算法</param>
        /// <returns>经过哈希运算的密码</returns>
        public static string HashPasswordForStoringInConfigFile(string str, string type)
        {            return FormsAuthentication.HashPasswordForStoringInConfigFile(str, type);
        }        public static void ResponseWrite(string str)
        {
            HttpContext.Current.Response.Write(str);
            HttpContext.Current.Response.End();
        }

Une fois le programme de traitement écrit, déployez-le sur iis (pour la méthode, veuillez vous référer au Tutoriel 1), connectez-vous à l'arrière-plan de gestion WeChat mp. weixin.qq.com/ Sur la page du centre de développement, cliquez sur le bouton "Modifier la configuration" pour remplir l'URL, le jeton et l'encodageAESKey, où l'URL est l'URL de l'interface utilisée par les développeurs pour recevoir. Données du serveur WeChat. Le token peut être renseigné par le développeur et utilisé pour générer une signature (le token sera comparé au token contenu dans l'URL de l'interface pour vérifier la sécurité ). EncodingAESKey est rempli manuellement par le développeur ou généré de manière aléatoire et sera utilisé comme clé de cryptage et de déchiffrement du corps du message. Dans le même temps, les développeurs peuvent choisir les méthodes de cryptage et de déchiffrement des messages : mode texte brut, mode de compatibilité et mode de sécurité. La sélection du mode et la configuration du serveur prendront effet immédiatement après la soumission. L'état par défaut de la méthode de cryptage et de déchiffrement est le mode texte brut. Les modes de cryptage et de décryptage seront partagés avec vous dans une série ultérieure, alors restez à l'écoute.

Comme le montre l'Guide daccès pour les débutants au département de développement de WeChat :

Guide daccès pour les débutants au département de développement de WeChat

Guide daccès pour les débutants au département de développement de WeChat

Après avoir cliqué sur Soumettre, le La demande du serveur WeChat accède à l'URL écrite ci-dessus. Si la vérification réussit, la liaison réussit.

Guide daccès pour les débutants au département de développement de WeChat

FIN

[Recommandations associées]

1.Téléchargement du code source de la plateforme de compte public WeChat

2.Code source du système de vote WeChat

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!

Déclaration:
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