WeChat Mini-Programm-Benutzerautorisierung zum Abrufen einer Mobiltelefonnummer (getPhoneNumber)

WeChat Mini-Programm-Benutzerautorisierung zum Abrufen einer Mobiltelefonnummer (getPhoneNumber)

Vorwort

Das Miniprogramm verfügt über eine sehr praktische API zum Abrufen von Benutzern, nämlich zum Abrufen der an WeChat gebundenen Mobiltelefonnummer des Benutzers über getPhoneNumber. Eines müssen wir alle beachten: WeChat konzentriert sich mittlerweile auf die Benutzererfahrung. Einige Methoden müssen vom Benutzer aktiv ausgelöst werden, bevor sie aufgerufen werden können, z. B. „getPhoneNumber“.

Umsetzungsideen:

1. Holen Sie sich den Code über wx.login, um die OpenID und den Sitzungsschlüssel des Benutzers abzurufen

2. Holen Sie sich verschlüsselte Daten über getPhoneNumber, iv

3. Fordern Sie das Backend auf, die Mobiltelefonnummer des Benutzers über die Parameter [encryptedData], [iv] und [sessionKey] zu entschlüsseln und abzurufen.

Direkt auf der Trockenware:

1. Der Benutzer klickt auf die Schaltfläche, um die Mobiltelefonnummer des Benutzers abzurufen

<button Klasse='pop_btn' plain="true"

open-type='getPhoneNumber' bindgetphonenumber="getPhoneNumber">Telefonnummer des Benutzers abrufen</button>

2. Popup-Autorisierungsbild:

3. Erhalten Sie die Handynummer durch Entschlüsselung

Direkt zum Code:

wxlogin: function() { //Holen Sie sich die OpenID und den Sitzungsschlüssel des Benutzers
  var das = dies;
  wx.login({
    //Code abrufen Verwenden Sie die von wx.login erhaltenen Anmeldeinformationen, um sie gegen OpenID einzutauschen
    Erfolg: (res) = >{
      wx.Anfrage({
        Methode: "GET",
        URL: „https://xxxwx/wxlogin.do“,
        Daten: {
          Code: res.code,
          Anwendungs-ID: "appIdSbcx",
          Anwendungsschlüssel: "appKeySbcx"

        },
        Kopfzeile: {
          'content-type': 'application/json' // Standardwert},
        Erfolg: (res) = >{
          konsole.log(res);
          dass.setData({
            Sitzungsschlüssel: res.data.session_key

          });
        }
      });
    }
  });
}

getPhoneNumber: function(e) { //Klicken Sie auf die Schaltfläche „Telefonnummer abrufen“ var that = this;
  wx.checkSession({
    Erfolg: Funktion() {
      console.log(e.detail.errMsg)
      console.log(e.detail.iv)
      console.log(e.detail.verschlüsselteDaten)
      var ency = e.detail.encryptedData;
      var iv = e.detail.iv;
      var sessionk = dieser.Daten.SessionKey;
      if (e.detail.errMsg == 'getPhoneNumber:fail Benutzer deny') {
        dass.setData({
          Modalstatus: wahr
        });

      } else { //Autorisierung zustimmen wx.request({
          Methode: "GET",
URL: „https://xxx/wx/deciphering.do“,
          Daten: {
            Daten verschlüsseln: Verschlüsselung,
            iv-Daten: iv,
            Sitzungsschlüssel:sessionk
          },
          Kopfzeile: {
            'content-type': 'application/json' // Standardwert},
          Erfolg: (res) = >{
            console.log("Entschlüsselung erfolgreich~~~~~~~Speichern Sie die entschlüsselte Nummer lokal~~~~~~~~");
            konsole.log(res);
            var Telefon = res.data.phoneNumber;
            konsole.log(Telefon);
          },
          Fehler: Funktion (Res) {
            console.log("Entschlüsselung fehlgeschlagen~~~~~~~~~~~~~~");
            konsole.log(res);
          }
        });
      }

    },

    fehlgeschlagen: Funktion() {
      console.log("session_key ist abgelaufen, Sie müssen den Anmeldevorgang erneut ausführen");
      that.wxlogin(); //Erneut anmelden}
  });
}

Hintergrundcode:

/**
* Entschlüsseln und die Mobiltelefonnummer des Benutzers abrufen * @param encrypdata
* @param ivdata
* @param Sitzungsschlüssel
* @param Anfrage
* @zurückkehren
* @throws Ausnahme 
*/
@RequestMapping(Wert = "Entschlüsselung", Methode = RequestMethod.GET)
öffentliche @ResponseBody String-Entschlüsselung (String-Verschlüsselungsdaten, 
String ivdata, String Sitzungsschlüssel,
HttpServletRequest-Anfrage) {

    byte[] verschlüsselnDaten = Base64.decode(verschlüsselnDaten); 
    byte[] ivData = Base64.decode(ivdata); 
    byte[] Sitzungsschlüssel = Base64.decode(Sitzungsschlüssel); 
    Zeichenfolge str="";
versuchen {
str = entschlüsseln(Sitzungsschlüssel, ivData, verschlüsselnDaten);
} Fang (Ausnahme e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
    System.out.println(str); 
    gibt str zurück;

}
öffentliche statische String-Entschlüsselung (Byte[] Schlüssel, Byte[] iv, Byte[] encData) löst Ausnahme aus { 
    AlgorithmParameterSpec ivSpec = neue IvParameterSpec(iv); 
    Verschlüsselung cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
    SecretKeySpec keySpec = neuer SecretKeySpec(Schlüssel, "AES"); 
    cipher.init(Cipher.DECRYPT_MODE, Schlüsselspezifikation, ivSpec); 
    //Entschlüsselten String analysieren return new String(cipher.doFinal(encData),"UTF-8"); 
  }

Zusammenfassen

Dies ist das Ende dieses Artikels über die Benutzerberechtigung des WeChat Mini-Programms zum Abrufen von Mobiltelefonnummern. Weitere relevante Inhalte zur Benutzerberechtigung des WeChat Mini-Programms zum Abrufen von Mobiltelefonnummern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den unten stehenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Eine elegante Möglichkeit, die Autorisierungsanmeldung für WeChat-Applets zu handhaben
  • springboot+jwt+springSecurity WeChat Applet-Autorisierungs-Login-Problem
  • Implementierung der WeChat-Applet-Autorisierung wx.getUserInfo zum Abrufen von Benutzerinformationen (Avatar, Spitzname)
  • Implementierung der Anmeldeberechtigung für das Uni-App WeChat-Applet
  • Beispiel für die Standortbestimmung und Aufzeichnung von Benutzerhintergrunddaten des WeChat Mini-Programms und für Autorisierungs- und Anforderungsanfragen

<<:  Tutorial zur Installation von Ubuntu Server in Vmware

>>:  VMWare Linux MySQL 5.7.13 Installations- und Konfigurationstutorial

Artikel empfehlen

So setzen Sie das Root-Passwort in mysql8.0.12 zurück

Wenn Sie nach der Installation der Datenbank das ...

CSS-Leistungsoptimierung - detaillierte Erklärung der Will-Change-Verwendung

will-change teilt dem Browser mit, welche Änderun...

Details zur MySQL-Datenbankarchitektur

Inhaltsverzeichnis 1. MySQL-Architektur 2. Netzwe...

Implementierung der MySQL-Datensortierung (aufsteigend und absteigend)

Datensortierung aufsteigend, absteigend 1. Sortie...

Beispielanalyse des Prinzips und der Lösung des MySQL-Gleitreihenfolgeproblems

Dieser Artikel erläutert anhand von Beispielen da...

Detaillierte Erklärung zum effizienten Importieren mehrerer SQL-Dateien in MySQL

MySQL bietet mehrere Möglichkeiten, mehrere SQL-D...

Detaillierte Einführung in den HTML-Head-Tag

Der HTML-Kopfteil enthält viele Tags und Elemente,...

Natives Javascript+CSS, um den Karusselleffekt zu erzielen

Dieser Artikel verwendet Javascript + CSS, um den...

Beispiel für eine automatische Importmethode für das Vue3.0-Routing

1. Voraussetzungen Wir verwenden zum Importieren ...