Comprensión profunda del uso del paquete nodejs + redis para obtener el desarrollo de la configuración de URL del código QR de la escena WeChat

Introducción: comprensión profunda del uso del paquete nodejs + redis para obtener el desarrollo de la configuración de URL del código QR de la escena WeChat

  • Se requiere un nombre de dominio al que se pueda acceder desde la red externa. Si no hay un nombre de dominio temporalmente, puede usar cáscaras de maní para penetrar la red interna. Este aspecto solo se puede usar temporalmente y no se puede usar durante mucho tiempo. El artículo utiliza la penetración de la red interna de la cáscara de maní como ejemplo para explicar cómo obtenerla. La dirección URL del código QR proporcionado por WeChat, lea a continuación
    • Primero cree una interfaz de devolución de llamada local
      http://127.0.0.1:8081/api/wxLogin/v1/callback
      
      • Paso 1: cree un wxLogin.js en la carpeta enrutador del directorio raíz del proyecto nodejs, que almacena específicamente la interfaz relacionada con el inicio de sesión de WeChat. El código específico es el siguiente:
        const express = require('express')
        const router = express.Router()
        const wxLoginController = require('../controller/WxLoginController')
        
        // 微信登录回调接口
        router.get('/callback',wxLoginController.wechatInsert)
        
        module.exports = router
        
      • Paso 2: Excluya la verificación de permisos de la interfaz en el archivo app.js en el directorio raíz del proyecto nodejs, el código es el siguiente:
        	// 用户认证中间件
        app.use(jwt({
                  
                   secret: jwtSecretKey, algorithms: ['HS256'] }).unless({
                  
                  
          path: [
            /^\/api\/wxLogin\/v1/, //微信登录通知接口排除
          ]
        }))
        // 用户相关的接口
        const wxLoginRouter = require('./router/wxLogin')
        app.use('/api/wxLogin/v1',wxLoginRouter)
        
      • Paso 3: cree un nuevo archivo WxLoginController.js en la carpeta del controlador de la capa de control del proyecto nodejs para verificar el estado de acceso a 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
        
        • Paso 4: en la capa de datos, ordene los tres parámetros token, marca de tiempo y nonce en orden lexicográfico, concatenelos en una cadena y realice el cifrado sha1. El código específico es el siguiente:
        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
        
    • La interfaz de devolución de llamada se ha ejecutado, por lo que puedes bajar
      • A continuación, para obtener la dirección URL del código QR de WeChat, primero debe obtener el token de acceso.

      • Consulte el documento oficial para conocer el método de adquisición específico: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

      • Los parámetros de entrada de la interfaz incluyen lo siguiente: 1. Grant_type, obtenga access_token y complete client_credential; 2. appid, es decir, el ID del desarrollador; se puede obtener en el fondo de la cuenta oficial; 3. secret, es decir, el ID del desarrollador. contraseña: se puede obtener en el fondo de la cuenta oficial, los parámetros están listos, puede desarrollar la interfaz

        • El primer paso es crear una interfaz de inicio de sesión de WeChat y agregar una interfaz de inicio de sesión en wxLogin.js en la carpeta del enrutador del proyecto nodejs. El código es el siguiente:
        // 获取微信二维码接口
        router.get('/login',wxLoginController.login)
        
        • El segundo paso es recibir la interfaz de llamada del front-end en la capa de control y devolver el resultado al front-end. El código específico es el siguiente:
        login:async (req,res) => {
                  
                  
            let handleRes = await WxLoginService.login()
            res.send(handleRes)
        }
        
        • Paso 3: obtenga la URL del código QR en la capa de datos y almacene los resultados obtenidos en el caché de 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
        
    • Ya terminó, puede llamar a la interfaz de inicio de sesión de WeChat en APIFOX; http://127.0.0.1:8081/api/wxLogin/v1/login le devolverá el ticket y la URL del código QR de WeChat.
      inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/u011313034/article/details/131153162
Recomendado
Clasificación