Das WeChat-Applet implementiert den Serveraufbau des Benutzeranmeldemoduls

Das WeChat-Applet implementiert den Serveraufbau des Benutzeranmeldemoduls

Ich habe node.js zum Erstellen des Servers gewählt. Freunde, die es noch nicht installiert haben, können sich meine anderen node.js-Blogs ansehen.

Serverinstallation und -konfiguration

Initialisieren Sie das Projekt und die Konfigurationsdatei package.json wird automatisch erstellt.

npm init -y

Installieren Sie das Express-Framework und das Anforderungsmodul.

npm install express –speichern
npm Installationsanforderung --save

Installieren Sie nodemon, um Dateiänderungen zu überwachen (überspringen Sie diesen Schritt, wenn es bereits installiert ist).

npm installiere nodemon -g

Kodierung

Nachdem Sie den obigen Befehl ausgeführt haben, erstellen Sie die Datei app.js im Projektverzeichnis und schreiben Sie den folgenden Code:

Stellen Sie das Express-Framework und das Anforderungsmodul vor und konfigurieren Sie App-ID und Secret.

const express = erfordern('express')
const bodyParser = erfordern('body-parser')
const Anfrage = erforderlich('Anfrage')
const app = express()
app.verwenden(bodyParser.json())
Konstanten wx = {
  appid: '', // Sie müssen die AppID des Entwicklers eingeben
  secret: '' // Muss das AppSecret des Entwicklers eingeben
}

Simulieren Sie die Datenbank. (In diesem Fall verwenden wir ein Array. Die Datenbankeinrichtung ist ziemlich kompliziert und wird hier nicht gezeigt. Weitere node.js+mysql-Projekte finden Sie in meinem Blog.)

var db = { // simulierte Datenbanksitzung: {}, // Sitzungsinformationen von OpenID und Sitzungsschlüssel speichern Benutzer: {} // Benutzerdatensätze wie Benutzername, Punkte usw. speichern}

Fordern Sie die Anmeldeoberfläche an und überprüfen Sie die URL-Adresse der WeChat-Oberfläche der Anmeldeinformationen.
(Die folgende URL ist die von Tencent bereitgestellte Schnittstelle für Testanmeldeinformationen und muss nicht geändert werden.)

app.post('/login', (req, res) => {
  var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' +
  wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code +
   „&grant_type=Autorisierungscode“  
  Anfrage(URL, (Fehler, Antwort, Text) => {
     if(){ // Der Code hier bestimmt, ob session.openid existiert}
     }
     res.json({Token: Token})
  })
})

Bestimmen Sie den OpenID-Anweisungscode in der Sitzung.

wenn (Sitzung.openid) {
      var Sitzung = JSON.parse(Body)
      // Wird zum Generieren von Token verwendet
      var token = 'token_' + neues Date().getTime()
      db.session[token] = Sitzung 
}

Zugangsschnittstelle 3000 einstellen

app.listen(3000, () => {
  console.log('Server läuft unter http://127.0.0.1:3000')
})

Ich habe es für dich geklärt

Da die App-ID und der Sitzungsschlüssel hier entschlüsselt werden müssen, wird die WXBizDataCrypt-Funktion von WeChat verwendet
WXBizDataCrypt.js

var Krypto = erforderlich('Krypto')

Funktion WXBizDataCrypt(Anwendungs-ID, Sitzungsschlüssel) {
  this.appId = Anwendungs-ID
  this.sessionKey = Sitzungsschlüssel
}

WXBizDataCrypt.prototype.decryptData = Funktion (verschlüsselteDaten, iv) {
  // Base64-Dekodierung
  var sessionKey = neuer Puffer(dieser.sessionKey, 'base64')
  verschlüsselteDaten = neuer Puffer(verschlüsselteDaten, 'base64')
  iv = neuer Puffer(iv, 'base64')

  versuchen {
     // Entschlüsselung var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
    // Automatisches Padding auf „true“ setzen und Padding löschen decipher.setAutoPadding(true)
    var dekodiert = decipher.update(verschlüsselteDaten, 'binär', 'utf8')
    dekodiert += decipher.final('utf8')
    
    dekodiert = JSON.parse(dekodiert)

  } fangen (Fehler) {
    wirf einen neuen Fehler('Unzulässiger Puffer')
  }

  wenn (dekodiertes Wasserzeichen.App-ID !== diese.App-ID) {
    wirf einen neuen Fehler('Unzulässiger Puffer')
  }

  Rückgabe dekodiert
}

module.exports = WXBizDataCrypt

Der gesamte Code von app.js lautet wie folgt

// Verschlüsselung und Entschlüsselung const crypto = require('crypto');
const WXBizDataCrypt = erfordern('./WXBizDataCrypt')

const express = erfordern('express')
const bodyParser = erfordern('body-parser')
const Anfrage = erforderlich('Anfrage')
const app = express()
app.verwenden(bodyParser.json())

Konstanten wx = {
    Anwendungs-ID: '',
    Geheimnis: ''
}

var db = {
    Sitzung: {},
    Benutzer: {}
}

app.post('/login', (req, res) => {
    // Hinweis: Die App-ID auf der Miniprogrammseite muss ein echtes Konto verwenden. Wenn ein Testkonto verwendet wird, tritt ein Anmeldecodefehler auf console.log('Anmeldecode: ' + req.body.code)
    var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code + '&grant_type=authorization_code'
    Anfrage(URL, (Fehler, Antwort, Text) => {
        console.log('Sitzung: ' + Text)
        var Sitzung = JSON.parse(Body)
        wenn(Sitzung.openid) {
            var token = 'token_' + neues Date().getTime()
            db.session[token] = Sitzung
            wenn(!db.user[session.openid]) {
                db.Benutzer[Sitzung.openid] = {
                    Kredit: 100
                }
            }
        }
        res.json({
            Zeichen: Zeichen
        })
    })
})

app.get('/checklogin', (req, res) => {
    var Sitzung = db.session[Anforderung.Abfrage.Token]
    console.log('checklogin: ', Sitzung)
    // Gibt den Booleschen Wert zurück, der angibt, ob der Benutzer beim Client angemeldet ist res.json({
        is_login:session !== undefiniert
    })
})

app.get('/Kredit', (req, res) => {
    var Sitzung = db.session[Anforderung.Abfrage.Token]
    wenn(Sitzung && db.Benutzer[Sitzung.openid]) {
        res.json({
            Guthaben: db.user[session.openid].credit
        })
    } anders {
        res.json({
            err: ,,Der Benutzer existiert nicht oder ist nicht angemeldet. '
        })
    }
})

app.post('/Benutzerinfo', (req, res) => {
    // Den Sitzungswert abrufen var session = db.session[req.query.token]
    console.log('Sitzung:' + Sitzung)
    wenn(Sitzung) {
        // Verschlüsselte Daten mit App-ID und Sitzungsschlüssel entschlüsseln
        var pc = neues WXBizDataCrypt(wx.appid, session.session_key)
        var Daten = pc.decryptData(req.body.encryptedData, req.body.iv)
        console.log('Nach der Entschlüsselung:', Daten)
        // Überprüfen Sie, ob die Rohdaten korrekt sind. var sha1 = crypto.createHash('sha1')
        sha1.update(req.body.rawData + session.session_key)
        var signature2 = sha1.digest('hex')
        console.log(Signatur2)
        Konsole.log(erforderlich.Body.Signatur)
        res.json({
            Pass: Signatur2 === req.body.signature
        })
    } anders {
        res.json({
            err: ,,Der Benutzer existiert nicht oder ist nicht angemeldet. '
        })
    }
})

app.listen(3000, () => {
    console.log('Server läuft unter http://127.0.0.1:3000')
})

Starten Sie den Server

Speichern Sie den obigen Code, öffnen Sie die Konsole oder das Powershell- oder Linux-Terminal und führen Sie die folgende Anweisung aus, um die Servernummer 3000 für den Serverzugriff zu öffnen.

nodemon app.js

Dies ist das Ende dieses Artikels zum Erstellen eines Servers für das Benutzeranmeldemodul des WeChat Mini-Programms. Weitere Informationen zum Erstellen eines Servers für das Anmeldemodul des WeChat Mini-Programms finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Aufbau des WeChat-Applets und Lösung für das Problem fehlgeschlagener Anmeldungen
  • Das WeChat-Applet erstellt seinen eigenen HTTPS-Server
  • So erstellen Sie lokal einen WeChat-Applet-Server
  • Tutorial zum Erstellen eines WeChat-Applets für den Zugriff auf den Node.js-Schnittstellenserver

<<:  Docker-Lernen: Die spezifische Verwendung von Container-Containern

>>:  Detaillierte Erläuterung von 30 SQL-Abfrageoptimierungstechniken für MySQL-Zehnmillionen großer Datenmengen

Artikel empfehlen

Installations-JDK-Tutorialanalyse für Linux-System (Centos6.5 und höher)

Artikelstruktur 1. Vorbereitung 2. Installieren S...

Wie viele Daten können in einer MySQL-Tabelle gespeichert werden?

Programmierer müssen sich viel mit MySQL befassen...

So verwenden Sie Nginx, um domänenübergreifende Front-End-Probleme zu lösen

Vorwort Bei der Entwicklung statischer Seiten, wi...

Detaillierte Analyse des MySQL-Datentyps DECIMAL

Vorwort: Wenn wir Dezimalzahlen speichern müssen ...

Zusammenfassung verschiedener Übermittlungsmethoden für HTML-Formulare

Die gebräuchlichste, am häufigsten verwendete und ...

Detaillierte Erläuterung der Hosts-Dateikonfiguration auf einem Linux-Server

Konfiguration der Hostdatei des Linux-Servers Die...

Zusammenfassung der Erfahrungen mit der Verwendung des Div-Box-Modells

Berechnung des Boxmodells <br />Rand + Rahme...

Docker-Konfiguration Alibaba Cloud Container Service-Betrieb

Konfigurieren des Alibaba Cloud Docker Container ...

Axios storniert wiederholte Anfragen

Inhaltsverzeichnis Vorwort 1. So stornieren Sie e...

Detailliertes Tutorial zum Kompilieren und Installieren von Python3.6 unter Linux

1. Gehen Sie zunächst auf die offizielle Website ...

So erweitern Sie die Festplattengröße einer virtuellen Maschine

Nachdem Vmvare die Festplattengröße der virtuelle...