¿Applet Enterprise WeChat para obtener un número de teléfono móvil?

1. Determinar si el Mini Programa es para desarrollar aplicaciones empresariales internas o aplicaciones de terceros.

 Si está desarrollando aplicaciones empresariales internas, es decir, aplicaciones autoconstruidas, puede usar   la API wx.qy.getMobile para obtener el número de teléfono móvil.Requisitos previos para llamar a wx.qy.getMobile : 1. Debe llamar a wx.qy .login primero, y session_key no ha caducado, el desarrollador puede llamar a checkSession para verificar el estado de inicio de sesión actual ( wx.qy.login debe llamarse primero para obtener seesion_key ) 2. El usuario debe estar dentro del rango visible de la aplicación, y cada llamada requiere que el usuario acepte confirmar ( aparecerá la ventana emergente de autorización ) 3. Lo que se obtiene es el número de teléfono móvil de la empresa miembro actual en la libreta de direcciones corporativa 4. Solo yo Se pueden llamar las aplicaciones creadas , y las aplicaciones desarrolladas en nombre del administrador deben verificar y autorizar el número de teléfono móvil, y no se pueden llamar las aplicaciones de terceros



Dirección de interfaz de Enterprise WeChat : wx.qy.getMobile - Documentación - Centro de desarrolladores de Enterprise WeChat (qq.com)

 Los datos obtenidos a través de wx.qy.getMobile serán encriptados, de la siguiente manera:

 Permítanme hablar sobre los métodos de descifrado que conozco (el descifrado de los applets de WeChat y los applets de WeChat corporativos está igualmente disponible):

   1. Descargue el archivo de descifrado de cryptojs === Dirección de descarga: https://github.com/gwjjeff/cryptojs/archive/master.zip

          Estoy aquí para descargarlo y ponerlo en el directorio raíz utils

 2. Nombre el archivo RdWXBizDataCrypt.js en la carpeta utils y escriba el siguiente contenido

Contenido del archivo RdWXBizDataCrypt.js (se puede copiar directamente):

var Crypto = require('./cryptojs/cryptojs.js').Crypto;
var app = getApp();
function RdWXBizDataCrypt(appId, sessionKey) {
    this.appId = appId
    this.sessionKey = sessionKey
}
RdWXBizDataCrypt.prototype.decryptData = function(encryptedData, iv) {
    // base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码
    var encryptedData = Crypto.util.base64ToBytes(encryptedData)
    // console.log(sessionKey)
    var key = Crypto.util.base64ToBytes(this.sessionKey);
    var iv = Crypto.util.base64ToBytes(iv);
    // console.log(encryptedData,key,iv)
    // 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充
    var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);
    try {
        // 解密
        var bytes = Crypto.AES.decrypt(encryptedData, key, {
            asBpytes: true,
            iv: iv,
            mode: mode
        });
        var decryptResult = JSON.parse(bytes);

    } catch (err) {
        console.log(err)
    }
    if (decryptResult.watermark.appid !== this.appId) {
        console.log(err)
    }
    return decryptResult
}
module.exports = RdWXBizDataCrypt

Haga referencia al archivo donde necesita ser descifrado

(tenga en cuenta la ruta)    const RdWXBizDataCrypt = require('../../utils/RdWXBizDataCrypt.js');

3. Para decodificar el uso del archivo:

    //解密获取手机号
      getphonenumber(e,seesion_key) {;
        let phone = e.encryptedData;
        let iv = e.iv;
        const RdWXBizDataCrypt = require('../../utils/RdWXBizDataCrypt.js');
        var appId = '';//当前小程序appId
        let key = seesion_key;
        const pc = new RdWXBizDataCrypt(appId, key);
        const data = pc.decryptData(phone, iv);
        console.log('解密后的data',data)
    },

Donde e es el contenido encriptado obtenido por wx.qy.getMobile     

session_key es la session_key devuelta por la interfaz de backend, y el backend la obtendrá cuando llame a wx.qy.login

Para resumir el proceso general:

1. Use wx.qy.login para iniciar sesión en la interfaz primero y luego obtenga la clave de sesión proporcionada por el backend

2. Llame a wx.qy.getMobile para obtener datos encriptados

3. Descargue el archivo de descifrado cryptojs, cree el archivo RdWXBizDataCrypt.js y descifralo

Mi propio proyecto real usa el código completo:

login(){
    const _this = this
    return Dialog.confirm({
      title: '授权',
      message: '我们需要您授权手机号来确定您用户的身份',
      beforeClose: (action) => new Promise((resolve) => {
        if (action === 'confirm') {
          wx.qy.login({
            success: function (res) {
              console.log(res)
              resolve(true);
              login({  //后端接口
                code: res.code
              }).then(res => {
                if (res.code == 0) {
                  let session_key=res.data.sessionKey
                  wx.qy.getMobile({
                    success: function (res) {
                      let phone = res.encryptedData;
                      let iv =res.iv;
                      const RdWXBizDataCrypt =require('../../utils/RdWXBizDataCrypt.js');
                      var appId = '';//当前小程序appId
                      let key = session_key;
                      const pc = new RdWXBizDataCrypt(appId, key);
                      const data = pc.decryptData(phone, iv);
                      console.log(data); //解码后内容
                
                    }
                  })
                }
              })
            },
          })
        } else {
          // 拦截取消操作
          resolve(true);
        }
      })
    })

  },

2. Si está desarrollando una aplicación de terceros , debe crear un enlace de autorización de página web

Construir un vínculo oauth2 de aplicación de terceros Construir un vínculo de autorización de página web - Documentación - Centro de desarrolladores de Enterprise WeChat (qq.com)

Dime cómo configurar este enlace:

appid es el ID de empresa de CorpID de la empresa      de la siguiente manera:

 donde está redirect_uri

 agentes:

官方示例==>https://open.weixin.qq.com/connect/oauth2/authorize?
appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE&agentid=AGENTID#wechat_redirect

Tenga en cuenta que las palabras en mayúsculas son los lugares que desea reemplazar

  • CORPID: el CorpID de la empresa, seleccione Mi empresa en la navegación superior del fondo de administración y luego puede encontrar el ID de la empresa

  • redirect_uri: la URL del enlace de devolución de llamada para la redirección autorizada. Use urlencode para procesar el enlace. Por ejemplo: https://py.work/workbar, después del procesamiento de urlencode, será http%3A%2F%2Fpy.work%2Fworkbar

  • dirección de codificación en línea urlencode

  • ámbito: ámbito de autorización de la aplicación. snsapi_base: autorización silenciosa, que puede obtener la información básica de los miembros (UserId y DeviceId); snsapi_privateinfo: autorización manual, que puede obtener información detallada de los miembros, incluida información sensible como avatares y códigos QR.

  • AGENTID: ID de agente de la aplicación, puede verlo haciendo clic en la aplicación creada en la página de administración de la aplicación, y es necesario para snsapi_privateinfo.

  • ESTADO: el parámetro de estado se incluirá después de la redirección, y la empresa puede completar el valor del parámetro de a-zA-Z0-9, y la longitud no puede exceder los 128
    bytes6

Ejemplo de enlace completo (escriba la dirección casualmente):

https://open.weixin.qq.com/connect/oauth2/authorize?
appid=wwa66633643532&redirect_uri=http%3A%2F%2Fpy.work%2Fworkbarresponse_type=código
&scope=snsapi_privateinfo&state=123456&agentid=100222222#wechat_redirect

Una vez completada la configuración, vaya a la página para solicitar el servidor y salte directamente a este enlace de autorización. Esta solicitud contendrá un código para la autenticación de identidad. Obtenga el código para solicitar http://qyapi.weixin.qq.com/ cgi -bin/servicio/auth/getuserinfo3rd?

Específico: Obtener identidad de usuario de acceso- Documentación- Enterprise WeChat Developer Center (qq.com)

Supongo que te gusta

Origin blog.csdn.net/H_hl2021/article/details/129554852
Recomendado
Clasificación