Introduction : Compréhension approfondie de l'utilisation du package nodejs+redis pour obtenir le développement de la configuration d'URL du code QR de la scène WeChat
- Un nom de domaine accessible depuis le réseau externe est requis. S'il n'y a pas de nom de domaine temporairement, vous pouvez utiliser des coquilles de cacahuètes pour pénétrer dans le réseau interne. Cet aspect ne peut être utilisé que temporairement et ne peut pas être utilisé pendant une longue période. L'article utilise la pénétration du réseau interne de Peanut Shell comme exemple pour expliquer comment l'obtenir. L'adresse URL du code QR fourni par WeChat, veuillez lire ci-dessous
- Créez d’abord une interface de rappel locale
http://127.0.0.1:8081/api/wxLogin/v1/callback
- Étape 1 : Créez un wxLogin.js dans le dossier routeur du répertoire racine du projet nodejs, qui stocke spécifiquement l'interface liée à la connexion WeChat. Le code spécifique est le suivant :
const express = require('express') const router = express.Router() const wxLoginController = require('../controller/WxLoginController') // 微信登录回调接口 router.get('/callback',wxLoginController.wechatInsert) module.exports = router
- Étape 2 : Excluez la vérification des autorisations de l'interface dans le fichier app.js dans le répertoire racine du projet nodejs. Le code est le suivant :
// 用户认证中间件 app.use(jwt({ secret: jwtSecretKey, algorithms: ['HS256'] }).unless({ path: [ /^\/api\/wxLogin\/v1/, //微信登录通知接口排除 ] })) // 用户相关的接口 const wxLoginRouter = require('./router/wxLogin') app.use('/api/wxLogin/v1',wxLoginRouter)
- Étape 3 : Créez un nouveau fichier WxLoginController.js dans le dossier du contrôleur de couche de contrôle du projet nodejs pour vérifier l'état d'accès à WeChat
/** * @param wechatInsert 验证微信接入 */ const WxLoginService = require("../service/wxLoginservice") const WxLoginController = { wechatInsert:(req,res) =>{ // 从微信服务器拿对称加密的参数 let { signature,timestamp,nonce,echostr} = req.query let handleRes = WxLoginService.wechatInsert(signature,timestamp,nonce,echostr) res.send(handleRes) // 把结果返回给微信服务器 } } module.exports = WxLoginController
- Étape 4 : Dans la couche de données, triez les trois paramètres : token, timestamp et nonce par ordre lexicographique, concaténez-les en une chaîne et effectuez le cryptage sha1. Le code spécifique est le suivant :
const SecretTool = require("../utils/SecretTool") const WxLoginService = { wechatInsert:(signature,timestamp,nonce,echostr) => { let token = 'expert' let str = SecretTool.sha1([token,timestamp,nonce].sort().join('')) if(str == signature) { return echostr } } // sha1加密算法,需要先使用npm或yarn安装一下,代码如下: const sha1 = require('sha1') class SecretTool { // sha1加密 static sha1(query) { return sha1(query) } } module.exports = SecretTool
- Voici pour vérifier s'il a été connecté avec succès au serveur WeChat. Ajoutez cette URL en arrière-plan du compte officiel WeChat pour vérification. Si la vérification est réussie, cliquez sur Enregistrer et il y aura une invite.
- Pour plus de détails, veuillez vous référer au guide d'accès aux documents : https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
- Étape 1 : Créez un wxLogin.js dans le dossier routeur du répertoire racine du projet nodejs, qui stocke spécifiquement l'interface liée à la connexion WeChat. Le code spécifique est le suivant :
- L'interface de rappel est terminée, vous pouvez donc descendre
-
Ensuite, pour obtenir l'adresse URL du code QR WeChat, vous devez d'abord obtenir le jeton d'accès.
-
Reportez-vous au document officiel pour la méthode d'acquisition spécifique : https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
-
Les paramètres d'entrée de l'interface sont les suivants : 1. grant_type, obtenez access_token et remplissez client_credential ; 2. appid, c'est-à-dire l'ID du développeur - peut être obtenu en arrière-plan du compte officiel ; 3. secret, c'est-à-dire l'identifiant du développeur mot de passe - peut être obtenu en arrière-plan du compte officiel, les paramètres sont tous prêts, vous pouvez développer l'interface
- La première étape consiste à créer une interface de connexion WeChat, et à ajouter une interface de connexion dans wxLogin.js dans le dossier routeur du projet nodejs. Le code est le suivant :
// 获取微信二维码接口 router.get('/login',wxLoginController.login)
- La deuxième étape consiste à recevoir l'interface d'appel front-end au niveau de la couche de contrôle et à renvoyer le résultat au front-end.Le code spécifique est le suivant :
login:async (req,res) => { let handleRes = await WxLoginService.login() res.send(handleRes) }
- Étape 3 : Obtenez l'URL du code QR dans la couche de données et stockez les résultats obtenus dans le cache Redis
login: async () => { // 获取二维码url let { qrcodeUrl,ticket} = await getQR() // 将ticket存入redis缓存 let key = `wechat:ticket:${ ticket}` redisConfig.set(key, JSON.stringify({ isScan:'no'}),300) return BackCode.buildSuccessAndData({ data:{ qrcodeUrl,ticket}}) }
- La quatrième étape consiste à obtenir le access_token de WeChat au niveau de la couche de configuration et à fournir le ticket à la couche de données pour l'appel. Il est nécessaire d'utiliser l'appid et l'appsecret préalablement préparés. Le code spécifique est le suivant :
- Reportez-vous à la documentation officielle pour la logique d'implémentation du code : https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html et ceci https://developers.weixin.qq.com/doc/offiaccount/Account_Management /Génération_a_Parametric_QR_Code.html
const axios = require('axios') const appId = 'XXX' const appSecret = 'XXX' const accessTokenPC = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${ appId}&secret=${ appSecret}` const qrUrl = 'https://mp.weixin.qq.com/cgi-bin/showqrcode' // 获取微信access_token const getAccessToken = () => { return axios({ method: 'get', url: accessTokenPC }) } // 获取拼接微信二维码url的ticket const getTicket = (token) => { return axios({ method: 'post', url: `https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=${ token}`, data: { expire_seconds: 60 * 2, action_name: "QR_SCENE", action_info: { "scene": { "scene_id": 123 } } } }) } // 获取微信二维码url const wechatLogin = { getOR: async () => { let token = (await getAccessToken()).data.access_token let ticket = (await getTicket(token)).data.ticket return { qrcodeUrl: `${ qrUrl}?ticket=${ ticket}`, ticket: ticket } } } module.exports = wechatLogin
-
- Vous avez terminé, vous pouvez appeler l'interface de connexion WeChat sur APIFOX ; http://127.0.0.1:8081/api/wxLogin/v1/login renverra le ticket et l'URL du code QR WeChat.
- Créez d’abord une interface de rappel locale