Das WeChat-Miniprogramm ist in den letzten Jahren ein sehr beliebter Anwendungstyp. Aufgrund seiner Bequemlichkeit, Benutzerfreundlichkeit und ökologischen Integrität wird es häufig in verschiedenen Szenarien eingesetzt. Bei der Entwicklung eines WeChat-Applets ist es häufig erforderlich, eine Benutzeranmeldefunktion zu implementieren, die genauso schwierig zu implementieren ist wie die herkömmliche Website-Anmeldung. In diesem Artikel wird der Implementierungsprozess der WeChat-Applet-Anmeldung vorgestellt, der hauptsächlich die Front-End-Aufruf-API zum Abrufen des Codes, das Back-End zum Empfangen des Codes und das Anfordern des WeChat-Servers zum Abrufen der openID und des session_key des Benutzers sowie schließlich das Speichern umfasst Benutzerinformationen in einer eigenen Datenbank.
1. Anmeldevorgang für das WeChat Mini-Programm
Der Anmeldevorgang für das WeChat Mini-Programm ist in der folgenden Abbildung dargestellt:
Der spezifische Vorgang ist wie folgt:
2. Das Front-End ruft den temporären Anmeldeinformationscode ab
Das Front-End ruft mit wx.login die API auf, um den temporären Anmeldeinformationscode zu erhalten. Der von dieser API zurückgegebene Code ist nur 5 Minuten gültig, daher muss die Anfrage rechtzeitig an das Backend gesendet werden.
wx.login({ success: function(res) { if (res.code) { // 发送code至后端服务器 wx.request({ url: 'https://example.com/login.php', method: 'POST', data: {'code': res.code}, success: function(resp) { // 获取后端返回的token并存储至本地 wx.setStorageSync('token', resp.data.token); } }); } else { console.log('获取登录态失败!' + res.errMsg); } } });
3. Das Backend erhält openid und session_key
Das Backend empfängt den vom Frontend gesendeten temporären Anmeldeinformationscode und sendet eine Anfrage an den WeChat-Server, um openid und session_key zu erhalten. Die angeforderte URL lautet: https://api.weixin.qq.com/sns/jscode2session. Zu den Parametern, die übertragen werden müssen, gehören appid, Secret, js_code und grant_type, wobei appid und Secret die Entwickler-ID und der entsprechende Schlüssel des Applets sind, js_code der vom Frontend erhaltene Code ist, grant_type der Autorisierungstyp und der Wert ist ist Berechtigungscode.
$appid = "Your AppID"; $secret = "Your AppSecret"; $code = $_POST['code']; $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $res = curl_exec($ch); curl_close($ch); $data = json_decode($res, true); $openid = $data['openid']; $session_key = $data['session_key'];
4. Das Backend verarbeitet Benutzerinformationen
Das Backend fragt die Datenbank basierend auf der OpenID ab. In diesem Beispiel wird MySQL als Datenbankverwaltungssystem verwendet. Die Benutzerdatentabelle heißt user und enthält die Felder id, openid und create_time. Unter diesen ist id die Benutzer-ID (selbsterhöhend), openid ist die eindeutige Kennung des Benutzers und create_time ist die Erstellungszeit des Benutzers.
// 连接数据库 $con = mysqli_connect('localhost', 'root', 'password', 'database'); mysqli_set_charset($con, 'utf8'); // 查询用户 $result = mysqli_query($con, "SELECT * FROM user WHERE openid='$openid' LIMIT 1"); if(mysqli_num_rows($result) == 0) { // 添加新用户 $now = date('Y-m-d H:i:s'); mysqli_query($con, "INSERT INTO user (openid, create_time) VALUES ('$openid', '$now')"); // 获取用户ID $user_id = mysqli_insert_id($con); } else { // 获取用户ID $row = mysqli_fetch_assoc($result); $user_id = $row['id']; }
Nachdem die Benutzer-ID erfolgreich abgerufen wurde, kann das Backend ein benutzerdefiniertes Anmeldetoken generieren und die Benutzerinformationen speichern.
// 生成token $token = md5($user_id . time() . mt_rand()); // 存储token和用户信息 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->setex($token, 3600 * 24 * 7, $user_id); // 返回token echo json_encode(array('token' => $token));
5. Front-End-Speichertoken
Nachdem das Front-End das vom Back-End zurückgegebene Token erhalten hat, speichert es es lokal. Im Allgemeinen wird LocalStorage oder SessionStorage zur Speicherung verwendet, damit diese bei Bedarf beim nächsten Besuch abgerufen werden kann.
wx.request({ url: 'https://example.com/login.php', method: 'POST', data: {'code': res.code}, success: function(resp) { // 获取后端返回的token并存储至本地 wx.setStorageSync('token', resp.data.token); } });
6. Überprüfen Sie die Gültigkeit des Tokens beim nächsten Besuch des Benutzers
Beim nächsten Besuch des Benutzers muss das Front-End das zuvor erhaltene und gespeicherte Token mit sich führen, um eine Anfrage an das Back-End zu senden, und das Back- Ende überprüft die Gültigkeit des Tokens. Wenn das Token gültig ist, ist die Anmeldung erfolgreich, andernfalls wird der Fehler „Nicht angemeldet“ zurückgegeben.
// 验证token有效性 $token = $_POST['token']; $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $user_id = $redis->get($token); if($user_id) { // 验证成功,返回用户信息 // ... } else { // 验证失败,返回未登录错误 echo json_encode(array('errcode' => 40001, 'errmsg' => 'user not logged in')); }
7. Zusammenfassung
Um die WeChat-Applet-Anmeldung zu implementieren, müssen das Front-End und das Back-End zusammenarbeiten, um mehrere Schritte durchzuführen, einschließlich des Erhaltens des temporären Anmeldeinformationscodes durch das Front-End und des Erhaltens von openid und session_key , das Back-End verarbeitet Benutzerinformationen, generiert ein benutzerdefiniertes Anmeldestatus-Token und gibt es an das Front-End zurück. Das Frontend speichert den Token lokal als Anmeldeinformationen für den nächsten Besuch. Nach Erhalt der Benutzeranfrage muss das Backend überprüfen, ob das Token gültig ist. Wenn es gültig ist, gibt es die entsprechenden Benutzerinformationen zurück, andernfalls wird ein Fehler „Nicht angemeldet“ zurückgegeben. Durch die oben genannten Schritte kann die Benutzeranmeldefunktion des WeChat-Applets relativ stabil implementiert werden.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die WeChat-Applet-Anmeldung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!