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

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
        
    • 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}})
        }
        
        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.
      insérer la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/u011313034/article/details/131153162
conseillé
Classement