Comment obtenir et enregistrer les informations d'appel d'appel d'interface sur WeChat, je vous le présenterai ci-dessous
1. Explication
* Veuillez vous référer aux deux premiers articles pour des instructions détaillées.
* Cet article est divisé en trois parties:
Le rôle de l'appel d'appel d'interface Access_token et expliquez comment obtenir l'appel d'appel d'interface Access_token
Comment implémenter l'implémentation du "serveur de contrôle central" mentionné dans le document WeChat pour enregistrer Access_token
* À la fin de cet article, tous les codes source de démonstration, y compris les trois premiers articles de cet article, seront donnés.
Pourquoi avez-vous besoin d'obtenir et d'enregistrer les informations d'appel d'appel d'interface Access_token
• commencer le développement - obtenir des informations d'appel d'appel d'interface
◦ Document Adresse: http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html
• Le document officiel du site Web donne l'explication suivante:
◦Access_token est le billet globalement unique du compte officiel. Access_token est requis lors de l'appel de chaque interface du compte officiel. Les développeurs doivent le sauver correctement. Le stockage d'accès_token doit conserver au moins 512 espaces de caractères. La période de validité de Access_token est actuellement de 2 heures et doit être rafraîchie régulièrement. L'acquisition répétée provoquera l'accès à l'accès_token que vous avez obtenu la dernière fois invalide.
•comprendre:
◦ Nous pouvons simplement lire le document et constater que de nombreuses fonctions avancées, telles que: menu personnalisé, gestion des matériaux, gestion des utilisateurs, gestion des comptes et autres fonctions avancées, ont le paramètre "? Access_token = Token" dans les liens pour les demandes. Il s'agit d'un paramètre d'appel global. Le backend WeChat doit déterminer l'identité en fonction de ce paramètre pour assurer la sécurité de notre compte officiel de WeChat.
◦ Dans l'adoption de l'exception de chargement du serveur WeChat n'est causée par les erreurs de programme dans le compte officiel, par défaut, l'interface d'appel de chaque compte officiel ne peut pas dépasser une certaine limite. Ici, WeChat est limité à 2 000 fois par jour. Donc, si nous voulons appeler ce paramètre fréquemment, nous devons le sauvegarder manuellement par le développeur, et chaque Access_token est valide pendant 2 heures.
Obtenez l'appel d'appel d'interface Access_token
• Le document officiel du site Web donne l'explication suivante:
◦ Interface Call Demande Description
Méthode de demande HTTP: obtenir
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=AppSecret
■ Retour à la description
Dans des circonstances normales, WeChat renverra le paquet JSON suivant sur le compte officiel:
{"Access_token": "Access_token", "expires_in": 7200}
Lorsque l'erreur se produit, WeChat renvoie les codes d'erreur et autres informations. L'exemple du paquet JSON est le suivant (cet exemple est une erreur AppID non valide):
{"errcode": 40013, "errmsg": "invalid appid"}
•comprendre:
◦Gets Demande, cette méthode peut être implémentée directement localement. Parce que c'est juste une demande de GET normale, similaire à l'accès à une URL. Par conséquent, vous n'avez pas besoin de télécharger cette partie du code sur le serveur pour fonctionner directement.
◦Le protocole de demande HTTP est une demande GET, ce qui signifie que nous devons obtenir le flux de retour via la demande GET, et le flux de retour est sous la forme de JSON. Lorsque vous appelez, nous devons transporter trois paramètres: Grant_Type, AppID et Secret. Parmi eux, Appid et Secret sont les principaux paramètres de notre compte officiel de WeChat, qui ont été expliqués dans l'article précédent. Le résultat de retour est divisé en deux types: résultats corrects et mauvais. 【Baidu: JSON】
◦ En fait, nous pouvons saisir directement l'exemple donné par le document dans la barre d'adresse: https://api.weixin.qq.com/cgi-bin/token? Grant_Type = Client_Credential & AppID = AppID & Secret = AppSecret, nous verrons le message comme ceci: "{" errcode ": 40013," Errmsg ":" Invalid AppID Insiste: [PQKL0120IC11] "}", car il s'agit d'une demande invalide, le résultat est renvoyé avec une erreur.
◦ Lorsque nous remplaçons les deux paramètres ci-dessus par nos numéros de test appID et AppSecret, nous verrons le message suivant: "{" Access_token ":" xrllr3fnf ... Badamio "," Expires_in ": 7200}", ce qui signifie une acquisition réussie.
◦ Maintenant, nous obtenons le flux de retour via le code Java et obtenons le Access_token.
•accomplir
Private Static Final Long Max_time = 7200 * 1000; // WeChat permet un maximum d'accès_token Temps de validité (MS) String final statique privé Tag = "Weixinapitest"; // TagPrivate Static Final String AppID = "WX889B **** B3666B0B8"; // apprivate final statique Secert Secert = "6DA7676 *** F0A9F15FBF06027856BB"; // Secret Key / * * Ce cas de test montre comment obtenir Access_token. * Access_token est le billet globalement unique du compte officiel. Access_token est requis lors de l'appel de chaque interface du compte officiel. * / @ TestPublic void getAccess_token () lève ioException {// coudre le lien httpsurl requis par la chaîne API urlString = "https://api.weixin.qq.com/cgi-bin/token?grant_type=Client_crededentid&appid=" + appid + "& secret =" + sect; // Créer une URL URL REQURL = NOUVELLE URL (URLSTRING); // Obtenez le lien httpSurlConnection httpsConn = (httpSurlConnection) requl .OpenConnection (); // Obtenez le flux d'entrée de la connexion pour lire le contenu de réponse inputStreamReader ISR = new inputStreamReader (httpsConn.getInputStream ()); // Lisez le contenu de la réponse du serveur et affichez Char [] chars = new Char [1024]; String resLut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut + = new String (chars, 0, len); } isr.close (); / * * Convertir JSON en Javabean. Un pot tiers a été introduit: gson * / gson gson = new gson (); // converti le json obtenu en un bean dans java // note: Access_token Access_token est un javabean créé par lui-même. Access_token Access_token = gson.fromjson (reslut, new Access_token (). GetClass ()); if (access_token.getAccess_token ()! = null) {System.out.println ("L'accès obtenu access_token est:" + access_token.getAccess_token ()); System.out.println ("Le temps valide de l'accès_token est:" + Access_token.getExpires_in () + "S"); } else {System.out.println (tag + "n'a pas réussi à obtenir Access_token, veuillez vérifier"); }} Enregistrer l'appel d'appel d'interface Access_token
•Pensées
Stockez l'accès obtenu access_token et l'heure actuelle dans le fichier. Lors de l'extraction, déterminez la différence de temps entre l'heure actuelle et le temps enregistré dans le stockage. S'il est supérieur à max_time, réacquérir et remplacez-le et remplacez le contenu accessible obtenu dans le fichier. S'il est inférieur à max_time, obtenez-le directement.
•accomplir
/ * * Cette méthode met en œuvre l'acquisition d'accès_token, enregistrez et économisez seulement 2 heures d'accès_token. S'il dépasse deux heures, réinstallez-la; S'il ne dépasse pas deux heures, obtenez-le directement. Cette méthode dépend de *: chaîne statique publique getAccessToken (); * * Idée: stockez l'accès obtenu_token et l'heure actuelle dans le fichier, * Lors de l'extraction, déterminez la différence de temps entre l'heure actuelle et l'heure enregistrée dans le stockage. S'il est supérieur à max_time, réacquérirez-le et stockez l'accès obtenu au fichier pour remplacer le contenu d'origine *, et s'il est inférieur à max_time, obtenez-le directement. * / @Test public void getavedaccess_token () lève ioException {gson gson = new gson (); String macCess_token = null; // Access_token à obtenu; File file = new File ("temp_access_token.temp"); // l'emplacement où access_token est enregistré // si le fichier n'existe pas, créez si (! File.exists ()) file.createenewfile (); // Si la taille du fichier est égale à 0, cela signifie qu'il est utilisé pour la première fois et entrez Access_Token if (file.length () == 0) {macCess_token = getAccessToken (); FileoutputStream fos = new FileOutputStream (file, false); // append Access_token at = new Access_token (); at.setAccess_token (maccess_token); at.setExpires_in (System.currentTimemillis () + ""); String json = gson.tojson (at); fos.write ((json) .getBytes ()); fos.close (); } else {// lire le contenu du fichier fileInputStream fis = new FileInputStream (file); octet [] b = nouveau octet [2048]; int len = fis.read (b); String mjsonAccess_token = new String (b, 0, len); // Lisez le contenu du fichier Access_token Access_token = gson.fromjson (mjsonAccess_token, new access_token (). GetClass ()); if (access_token.getExpires_in ()! = null) {long savetime = long.parselong (access_token.getExpires_in ()); Long NowTime = System.CurrentTimemillis (); Long Remitime = Nowtime - Savetime; // System.out.println (TAG + "Différence horaire:" + Remitime); if (remimitime <max_time) {Access_token at = gson.fromjson (mjsonAccess_token, new access_token (). getClass ()); macCess_token = at.getAccess_token (); } else {macCess_token = getAccessToken (); FileoutputStream fos = new FileOutputStream (file, false); // append Access_token at = new Access_token (); at.setAccess_token (maccess_token); at.setExpires_in (System.currentTimemillis () + ""); String json = gson.tojson (at); fos.write ((json) .getBytes ()); fos.close (); }}} System.out.println ("L'accès_token obtenu est:" + maccess_token); } / * * Obtenez le serveur WeChat AccessToken. Cette partie est cohérente avec getAccess_token (), aucun commentaire n'est ajouté * / public static String getAccessToken () {String urlString = "https://api.weixin.qq.com/cgi-bin/token?grant_type=Client_Credential&appid=" + appid + "& secret =" + Secert; String resLut = null; try {url requl = new url (urlstring); HttpSurlConnection httpsConn = (httpSurlConnection) requrl .OpenConnection (); InputStreamReader ISR = new inputStreamReader (httpsConn.getInputStream ()); char [] chars = nouveau char [1024]; reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut + = new String (chars, 0, len); } isr.close (); } catch (ioException e) {e.printStackTrace (); } Gson gson = new gson (); Access_token Access_token = gson.fromjson (reslut, new Access_token (). GetClass ()); if (access_token.getAccess_token ()! = null) {return Access_token.getAccess_token (); } else {return null; }} Les trois premiers articles démontrent le code source: http://xiazai.vevb.com/201606/yuanma/weixinapidemo(vevb.com).rar
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.