Heim > Backend-Entwicklung > PHP-Problem > So implementieren Sie die WeChat-Applet-Anmeldung in PHP

So implementieren Sie die WeChat-Applet-Anmeldung in PHP

PHPz
Freigeben: 2023-04-21 10:16:09
Original
2688 Leute haben es durchsucht

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:

So implementieren Sie die WeChat-Applet-Anmeldung in PHP

Der spezifische Vorgang ist wie folgt:

  1. Der Benutzer öffnet das Miniprogramm und klickt auf die Anmeldeschaltfläche .
  2. Das Frontend ruft die API über wx.login auf, um den temporären Anmeldeinformationscode zu erhalten.
  3. Senden Sie den Code an den Backend-Server.
  4. Das Backend sendet eine Anfrage an den WeChat-Server, um die openid und den session_key zu erhalten.
  5. Der WeChat-Server gibt openid und session_key zurück.
  6. Das Backend fragt die Datenbank basierend auf der OpenID ab und wenn der Benutzer nicht existiert, wird er der Datenbank hinzugefügt.
  7. Das Backend speichert Benutzerinformationen, generiert ein benutzerdefiniertes Anmeldetoken und gibt es an das Frontend zurück.
  8. Das Frontend speichert das Token lokal als Benutzeranmeldeinformationen.
  9. Wenn sich der Benutzer das nächste Mal anmeldet, trägt das Frontend den Token und sendet eine Anfrage an das Backend. Wenn er gültig ist, ist die Anmeldung erfolgreich, andernfalls ist er nicht angemeldet Es wird ein Fehler zurückgegeben.

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);
    }
  }
});
Nach dem Login kopieren

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'];
Nach dem Login kopieren

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'];
}
Nach dem Login kopieren

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));
Nach dem Login kopieren

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);
  }
});
Nach dem Login kopieren

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'));
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage