Maison  >  Article  >  interface Web  >  Node.js access_token implémente des exemples d'accès et d'actualisation WeChat

Node.js access_token implémente des exemples d'accès et d'actualisation WeChat

小云云
小云云original
2018-01-27 14:46:012008parcourir

Cet article présente principalement des exemples d'accès et d'actualisation Node.js WeChat access_token (jsapi_ticket), qui ont une certaine valeur de référence. J'espère que cela pourra aider tout le monde.

access_token

Il existe deux access_tokens dans les documents WeChat : le access_token ordinaire et le access_token d'autorisation Web. Pour les différences spécifiques, reportez-vous à : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

Les jetons d'accès mentionnés ci-dessous sont tous des jetons d'accès ordinaires

1. Tout d'abord, voyons comment demander la documentation technique de la plateforme publique access_token ?

Requête GET : https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid= APPID&secret=APPSECRET

Retour normal : {"access_token":"ACCESS_TOKEN","expires_in":7200}

Retour d'erreur : {"errcode":40013," errmsg": "appid invalide"}

2. Donc le code pour obtenir access_token est le suivant :


const request = require('request') // 请安装第三方包 request

request.get({
  uri: 'https://api.weixin.qq.com/cgi-bin/token',
  json: true,
  qs: {
   grant_type: 'client_credential',
   appid: APPID, // APPID请换成你的 appid
   secret: APPSECRET // APPSECRET请换成你的 appsecret
  }
 }, (err, res, body) => {
  if (err) {
   console.log(err)
   return
  }
  console.log(body)
  if (body.errcode) {
   // 返回错误时的处理
   return
  }
})

3. guard_dog implémente la persistance et le timing des données. L'actualisation

guard_dog générera des fichiers .dog, chaque fichier correspondant à une CLÉ


const guard_dog = require('guard_dog') // 请安装第三方包 guard_dog

guard_dog.init(KEY, (handler) => { // KEY是guard_dog存取数据的键名
 // 拿到数据后调用 handler
 handler(DATA, EXPIREDS_IN) // DATA是要持久化的数据,EXPIREDS_IN是数据的有效时间,单位是秒
}, DIR) // DIR是 .dog 文件的存放目录,这个参数可以不传

4. les deux morceaux de code ci-dessus ressemblent à l'effet souhaité


const request = require('request')
const guard_dog = require('guard_dog')

guard_dog.init('ACCESS_TOKEN', (handler) => {
 request.get({
  uri: 'https://api.weixin.qq.com/cgi-bin/token',
  json: true,
  qs: {
   grant_type: 'client_credential',
   appid: APPID, // APPID请换成你的 appid
   secret: APPSECRET // APPSECRET请换成你的 appsecret
  }
 }, (err, res, body) => {
  if (err) {
   console.log(err)
   return
  }
  console.log(body)
  if (body.errcode) {
   return
  }
  handler(body.access_token, body.expires_in)
 })
}) // 如有需要指定目录,可以再给 guard_dog.init 多传个参数

5. Une fois que guard_dog a initialisé cette clé, toutes les valeurs obtenues sont des valeurs valides. Le code pour guard_dog pour obtenir la valeur est le suivant :


guard_dog.get('ACCESS_TOKEN', (data) => { // 上面初始化时用的键名为'ACCESS_TOKEN',所以这里取值也要用这个键名
 // 在这里拿到的 data 就是 access_token 了
})

6 Si vous souhaitez le rendre plus pratique, vous pouvez l'encapsuler directement dans un module <.>

access_token.js


const request = require(&#39;request&#39;)
const guard_dog = require(&#39;guard_dog&#39;)
// 加载这个模块的时候给 ACCESS_TOKEN 这个键名初始化
guard_dog.init(&#39;ACCESS_TOKEN&#39;, (handler) => {
 request.get({
  uri: &#39;https://api.weixin.qq.com/cgi-bin/token&#39;,
  json: true,
  qs: {
   grant_type: &#39;client_credential&#39;,
   appid: APPID, // APPID请换成你的 appid
   secret: APPSECRET // APPSECRET请换成你的 appsecret
  }
 }, (err, res, body) => {
  if (err) {
   console.log(err)
   return
  }
  console.log(body)
  if (body.errcode) {
   return
  }
  handler(body.access_token, body.expires_in)
 })
}) 
// 只要向外暴露一个获取值的方法就可以了
module.exports = function (callback) {
 guard_dog.get(&#39;ACCESS_TOKEN&#39;, callback)
}
Utiliser :


const access_token = require(&#39;./access_token&#39;) // 这里把这个模块与 access_token 模块当成在同一目录下来作为例子。
access_token((data) => {
 // 这个 data 就是 access_token
})
jsapi_ticket

Documentation officielle de jsapi_ticket


L'exemple ci-dessus concernant access_token a été expliqué en détail Le traitement de jsapi_ticket est également très similaire, donc le code est directement publié ci-dessous :

( Une chose à noter : l'obtention de jsapi_ticket doit s'appuyer sur access_token, ce qui suit Le code repose directement sur access_token.js écrit ci-dessus)

jsapi_ticket.js


const request = require(&#39;request&#39;)
const guard_dog = require(&#39;guard_dog&#39;)
const access_token = require(&#39;./access_token&#39;)

guard_dog.init(&#39;JSAPI_TICKET&#39;, (handler) => {
 access_token((access_token) => {
  request.get({
   uri: &#39;https://api.weixin.qq.com/cgi-bin/ticket/getticket&#39;,
   json: true,
   qs: {
    access_token: access_token,
    type: &#39;jsapi&#39;
   }
  }, (err, res, body) => {
   if (err) {
    console.log(err)
    return
   }
   console.log(body)
   if (body.errcode) {
    return
   }
   handler(body.ticket, body.expires_in)
  })
 })
})

module.exports = function (callback) {
 guard_dog.get(&#39;JSAPI_TICKET&#39;, callback)
}
Utilisation :


const jsapi_ticket = require(&#39;./jsapi_ticket&#39;)
jsapi_ticket((data) => {
 // 这个 data 就是 jsapi_ticket
})
Recommandations associées :

Analyse du processus de développement d'un exemple d'accès aux données d'arborescence php

Solution pour l'accès php à MySQL 4.1 Problème de code tronqué

PHP implémente l'effet de cryptage des fichiers texte et de restriction de l'accès à des pages spécifiques_exemple php

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