Anmeldevorgang für das Python Flask WeChat-Applet und Implementierungscode der Anmelde-API

Anmeldevorgang für das Python Flask WeChat-Applet und Implementierungscode der Anmelde-API

1. Schauen wir uns zunächst die Wirkung an

Bildbeschreibung hier einfügen

Von der Schnittstellenanforderung zurückgegebene Daten:

Bildbeschreibung hier einfügen

2. Offizielles Login-Flussdiagramm

Bildbeschreibung hier einfügen

3. Anmeldevorgang für das Mini-Programm:

1. Das Applet ruft wx.login auf

2. Bestimmen Sie, ob der Benutzer autorisiert ist

3. Zugriff auf wx.getUserInfo über das Applet

4. Miniprogramm-JS-Code:

wx.login({
 Erfolg: resp => {
 // Sende res.code an das Backend im Austausch gegen openId, sessionKey, unionId
 konsole.log(resp);
 var das = dies;
 // Benutzerinformationen abrufen wx.getSetting({
 Erfolg: res => {
 wenn (res.authSetting['scope.userInfo']) {
 // Bereits autorisiert, können Sie getUserInfo direkt aufrufen, um den Avatar-Spitznamen ohne Popup-Fenster abzurufen wx.getUserInfo({
 Erfolg: userResult => {
 var platUserInfoMap = {}
 platUserInfoMap["verschlüsselteDaten"] = userResult.verschlüsselteDaten;
 platUserInfoMap["iv"] = BenutzerResult.iv;
 wx.Anfrage({
			 URL: „http://127.0.0.1:5000/user/wxlogin“,
			 Daten: { 
			 platCode: bzw. Code,
  platUserInfoMap: platUserInfoMap,
			 },
			 Kopfzeile: {
			 "Inhaltstyp": "Anwendung/json"
			 },
			 Methode: 'POST',
			 Datentyp: „json“,
			 Erfolg: Funktion (res) {
			 Konsole.log(res)
  	wx.setStorageSync("userinfo", res.userinfo) //Lokalen Cache festlegen },
			 fail: function (err) { }, // Anforderung fehlgeschlagen complete: function () { } // Funktion, die ausgeführt wird, nachdem die Anforderung abgeschlossen ist })
 }
 })
 } 
 }
 })
 }
 })

5. Der Backend-Server greift auf code2session zu und erhält über die API-Schnittstelle code2Session den Login session_key , openid und unionid des tatsächlich benötigten WeChat-Benutzers.

6. Der Backend-Server überprüft die Benutzerinformationen und entschlüsselt encryptedData Nach der Anmeldung beim WeChat-Applet und dem Abrufen des Sitzungsschlüssels werden die verschlüsselten Daten und die IV-Daten zurückgegeben. Die verschlüsselten Daten enthalten die Benutzerinformationen nach der Entschlüsselung. Das entschlüsselte JSON-Format lautet wie folgt:

{
 "openId": "ÖFFNEN",
 "nickName": "SPITZNAME",
 "gender": GESCHLECHT,
 "Stadt": "STADT",
 "province": "PROVINZ",
 "country": "LAND",
 "avatarUrl": "AVATARURL",
 "unionId": "UNIONID",
 "Wasserzeichen":
 {
 "appid": "APPID",
 "Zeitstempel":ZEITSTEMPEL
 }
}

7. Erstellen Sie eine neue Entschlüsselungsdatei - WXBizDataCrypt.py


from Crypto.Cipher import AES Dies führt normalerweise zu ModuleNotFoundError:No module named "Crypto" . (1) Führen Sie pip3 install pycryptodome aus.
(2) Wenn die Eingabeaufforderung immer noch besagt, dass das Modul nicht verfügbar ist, überprüfen Sie, ob sich im virtuellen Umgebungsverzeichnis Lib—-site-package ein Ordner Crypto befindet. Sie sollten einen Ordner crypto sehen und ihn in Crypto umbenennen.

Base64 importieren
JSON importieren
von Crypto.Cipher importiere AES

Klasse WXBizDataCrypt:
 def __init__(selbst, Anwendungs-ID, Sitzungsschlüssel):
 self.appId = Anwendungs-ID
 self.sessionKey = Sitzungsschlüssel

 def entschlüsseln(selbst, verschlüsselte Daten, iv):
 # Base64-Dekodierung
 Sitzungsschlüssel = base64.b64decode(self.sessionKey)
 verschlüsselteDaten = base64.b64decode(verschlüsselteDaten)
 iv = base64.b64decode(iv)

 Chiffre = AES.neu(Sitzungsschlüssel, AES.MODE_CBC, iv)

 entschlüsselt = json.loads(self._unpad(cipher.decrypt(encryptedData)))

 wenn entschlüsselt['Wasserzeichen']['App-ID'] != self.appId:
 Ausnahme auslösen('Ungültiger Puffer')

 entschlüsselt zurückgeben

 def _unpad(selbst, s):
 return s[:-ord(s[Länge(s)-1:])]

8. Flasks /user/wxlogin API-Code:

JSON importieren, Anfragen
von WXBizDataCrypt importiere WXBizDataCrypt
aus Flasche importieren Flasche

@app.route('/user/wxlogin', Methoden=['GET','POST'])
def user_wxlogin():
 data = json.loads(request.get_data().decode('utf-8')) # Konvertiert die Front-End-JSON-Daten in ein Wörterbuch appID = 'appID' # Die App-ID des Entwicklers für das WeChat-Applet
 appSecret = 'appSecret' # AppSecret des Entwicklers für das WeChat Mini-Programm
 Code = Daten ['PlatCode'] # Temporärer WeChat-Anmeldecode, der vom Frontend POST gesendet wurde
 verschlüsselteDaten = Daten['platUserInfoMap']['verschlüsselteDaten']
 iv = Daten['platUserInfoMap']['iv']
 req_params = {
 'appid': App-ID,
 'Geheimnis': App-Geheimnis,
 'js_code': Code,
 „Grant_Type“: „Autorisierungscode“
 }
 wx_login_api = 'https://api.weixin.qq.com/sns/jscode2session'
 response_data = requests.get(wx_login_api, params=req_params) # Initiieren Sie eine GET-Anfrage an die API resData = response_data.json()
 openid = resData ['openid'] # Ruft die OpenID des Benutzers für das aktuelle Applet ab
 session_key = resData ['session_key'] # Holt den Sitzungsschlüssel des Benutzers session_key für das aktuelle Applet

 pc = WXBizDataCrypt(appID, session_key) #Benutzerinformationen entschlüsseln userinfo = pc.decrypt(encryptedData, iv) #Benutzerinformationen abrufen print(userinfo)
 '''
 Der folgende Teil bestimmt, ob ein benutzerdefinierter Anmeldestatus hinzugefügt oder zurückgegeben werden soll, indem beurteilt wird, ob der Benutzer in der Datenbank vorhanden ist (wenn der Benutzer nicht vorhanden ist, fügen Sie ihn hinzu; wenn der Benutzer vorhanden ist, geben Sie die Benutzerinformationen zurück).
 
 --------leicht leicht leicht leicht leicht leicht leicht leicht leicht leicht-------------
 
 Ich werde diesen Teil überspringen und die Benutzer in der Datenbank bearbeiten'''
 
 json.dumps zurückgeben
({
"Code": 200, "Nachricht": "Anmeldung erfolgreich", "Benutzerinfo": Benutzerinfo}, Einzug = 4, Sortierschlüssel = True, Standard = str, Sicherstellen_Ascii = False)

Zusammenfassen

Dies ist das Ende dieses Artikels über die Anmeldedaten des Python Flask WeChat-Applets und die Implementierung der Anmelde-API. Weitere verwandte Inhalte zu den Anmeldedaten des Python Flask WeChat-Applets und der Implementierung der Anmelde-API finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Python implementiert die Benutzeranmeldung und das Vorlagen-Push des WeChat-Applets
  • Python implementiert Registrierungs- und Login-Applet-Funktionen
  • Python implementiert mehrere Zahlungsmethoden für das WeChat-Applet
  • Fünf Python-Miniprogramme mit Code
  • Python-Code zur Implementierung der Zeitübersicht des Applet-Anmeldevorgangs

<<:  Vue implementiert die Anzeige und Ausblendung der dreistufigen Navigation

>>:  mysql: [FEHLER] unbekannte Option '--skip-grant-tables'

Artikel empfehlen

Beispiel für die gemeinsame Nutzung von Anker-Tags in HTML

Verwendung von Anker-Tags: Als Ankerlink wird ein ...

Öffnen Sie den Windows-Server-Port (nehmen Sie als Beispiel Port 8080)

Was ist ein Port? Bei den Ports, auf die wir uns ...

Vue realisiert problemlos Wasserzeicheneffekte

Vorwort: Verwenden Sie den Wasserzeicheneffekt im...

So verwenden Sie residente Knoten für die Ebenenverwaltung in CocosCreator

CocosCreator-Version: 2.3.4 Die meisten Spiele ve...

Detaillierte Erklärung, wie Sie den Speicherverbrauch in MySql reduzieren können

Vorwort Standardmäßig initialisiert MySQL einen g...

JavaScript entfernt unnötige Eigenschaften eines Objekts

Inhaltsverzeichnis Beispiel Methode 1: Löschen Me...

So verwenden Sie Docker zum Erstellen eines privaten pypi-Repositorys

1. Konstruktion 1. Bereiten Sie die Datei htpassw...

Details zum Vergleich der MySQL-Datenkomprimierungsleistung

Inhaltsverzeichnis 1. Testumgebung 1.1 Hardware u...