Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierung der QQ-Anmeldefunktion eines Drittanbieters im thinkPHP5-Projekt

Implementierung der QQ-Anmeldefunktion eines Drittanbieters im thinkPHP5-Projekt

不言
不言Original
2018-06-06 16:16:292335Durchsuche

In diesem Artikel wird hauptsächlich die Implementierung der QQ-Drittanbieter-Anmeldefunktion im thinkPHP5-Projekt vorgestellt. Er analysiert detailliert die spezifischen Schritte und die damit verbundenen Bedienfähigkeiten der Änderung der QQ-Anmeldeschnittstelle und deren Integration in das thinkPHP5-Projekt Beispiele. Freunde in Not können darauf verweisen.

Das Beispiel in diesem Artikel beschreibt die Implementierung der QQ-Drittanbieter-Anmeldefunktion im thinkPHP5-Projekt. Ich teile es Ihnen als Referenz mit:

Kürzlich habe ich das thinkPHP 5-Framework verwendet, um ein Brautshop-Projekt zu erstellen. Der Beamte Der von Tencent bereitgestellte Fall besteht darin, dass mehrere Dateien miteinander interagieren. Wenn Sie die offiziell versiegelte Klasse von Tencent verwenden möchten, ist es sehr traurig, dass die erwartete Funktion nicht ausgeführt werden kann , Sie müssen es wie folgt ändern:

1. Suchen Sie die Kerndatei im offiziellen SDK

Bei Verwendung außerhalb des Frameworks ist es include 'qqConnectAPI.php'. Öffnen Sie diese Datei, um sie anzuzeigen. Die Dateien im Kommunikationsordner dienen lediglich der Definition einiger Konstanten und der Aufzeichnung Ihrer APP-SCHLÜSSEL-Informationen Es spielt keine Rolle. Legen Sie einfach ein paar Klassendateien in den Klassenordner, und wenn Sie sich den Code genau ansehen, werden Sie feststellen, dass Sie die Funktion tatsächlich implementieren können, solange Sie drei Klassen erhalten.

2. Fügen Sie es in das tp-Framework ein

tp5 empfiehlt, Drittanbieter-Dinge, die nicht vom Composer installiert wurden, in das Erweiterungsverzeichnis zu legen Da wir in Zukunft möglicherweise weitere Erweiterungen vornehmen müssen, erstellen wir hier einen separaten qqlogin-Ordner für qq login.

Sie sehen, dass es nur drei Kategorien gibt Darin habe ich eine Recorder- und eine ErrorCase-Klasse erstellt. Die Funktion dieser beiden besteht darin, einige Informationen aufzuzeichnen, z. B. access_token, und ich werde sie hier direkt löschen. Beachten Sie außerdem, dass gemäß der psr4-Spezifikation der Klassenname mit dem Dateinamen übereinstimmen muss. Sie müssen daher den Dateinamen ändern und den Namespace extendqqlogin hinzufügen. Alle Klassen in tp5 müssen über Folgendes verfügen Namensraum .

Um zu verhindern, dass tp5 die von uns benötigten Dateien findet, ist es außerdem am besten, einen Root-Namespace in der Datei config.php in Zeile 30 zu registrieren:

// 注册的根命名空间
'root_namespace'  => [
 'extend\qqlogin' => '../extend/qqlogin/',
 'extend\baidu' => '../extend/bdlogin/'
],

3. Transformieren Sie den Quellcode

Da QC.php Oauth.php erbt, ändern wir es von letzterem und entfernen es require_once. Ich werde nicht über das Hinzufügen des Namensraums sprechen. Die Klassenkonstante ist keine Sorge. Kommentieren Sie sie aus oder löschen Sie sie direkt. Das Gleiche gilt im Folgenden. Sie sollten sich vorstellen, dass Sie einen Groll gegen diese beiden Wörter hegen, und sie kommentieren oder löschen, wenn Sie sie sehen.

// protected $recorder;
public $urlUtils;
// protected $error;
public $state;
public $appid = "****";
public $callback = "http://****/index/user/qqcallback";
public $scope = "get_user_info";

Die folgenden vier Attribute müssen hinzugefügt werden, um CSRF-Angriffe zu verhindern Diese werden ursprünglich in inc.php im Comm-Ordner gespeichert. Nehmen Sie sie nun direkt und wandeln Sie sie in ein Mitgliedsattribut um.

Dann konstruieren Sie die Funktion und instanziieren Sie drei Klassen. Zwei davon existieren nicht mehr, und wie oben erwähnt, haben diese beiden Wörter einen Groll, also kommentieren oder löschen Sie sie, wenn Sie sie sehen.

Sehen Sie sich die erste Mitgliedsmethode unten anqq_login()

public function qq_login(){
 $appid = $this->recorder->readInc("appid");
 $callback = $this->recorder->readInc("callback");
 $scope = $this->recorder->readInc("scope");
 //---生成唯一随机串防CSRF攻击
 $state = md5(uniqid(rand(), TRUE));
 $this->recorder->write('state',$state);
 *
 *
 return $login_url;
 // header("Location:$login_url");
}

Wir haben diese beiden Wörter bereits gelöscht, und wir Ich brauche diese Dinge noch einmal. Vergessen Sie nicht, dass wir oben bereits drei Mitgliedsattribute hinzugefügt haben, und verwenden Sie sie einfach weiter unten. Bei der Überprüfung des Status können wir ihn über die Sitzung überprüfen. TP5 bietet eine Hilfsfunktion zum Schreiben der Sitzung: $this->appid

session('state',$this->state);

Der letzte Satz ist Header-Sprung, vorerst nicht bekannt Warum der Sprungeffekt in tp5 nicht sichtbar ist, gebe ich die URL direkt zurück und verwende dann die Umleitungsfunktion

von tp5, um den Sprung im Controller zu implementieren. $this->redirect()

Schauen Sie sich unten qq_callback() an

public function qq_callback(){
 // $state = $this->recorder->read("state");
 //---验证state防止CSRF攻击
 if(input('state') != session('state')){
  // $this->error("30001");
  exit('30001');
 }
 *
 *
 // return $params["access_token"];
 session('access_token',$params["access_token"]);
}

Wir haben die Sitzung in qq_login geschrieben Vergleichen Sie es einfach mit sessio. Sie können die Parameter von Get- und Post-Anfragen abrufen, aber Sie können keine Schlüssel-Wert-Paare hinzufügen Um es hinzuzufügen, müssen Sie es einer Variablen zuweisen und dann die Variable bearbeiten. Wenn hier ein Fehler auftritt, beenden Sie den Vorgang direkt und drucken Sie die Fehlernummer aus. Das offizielle Dokument enthält detaillierte Beschreibungen der Fehlernummern. Am Ende wird das erhaltene access_token direkt in die Sitzung geschrieben.

Die folgende

-Methode ist ähnlich. Die Parameterliste wird mithilfe einer Sitzung erstellt und der Rückgabewert wird direkt in die Sitzung geschrieben. get_openid()

Ändern Sie dann QC.php, ändern Sie einfach die Konstruktionsmethode und geben Sie den drei Variablen des Arrays Werte.

$this->keysArr = array(
 "oauth_consumer_key" => (int)$this->appid,
 "access_token" => session('access_token'),
 "openid" => session('openid')
);

4. Controller-Aufruf

Die Transformation ist abgeschlossen und kann in durchgeführt werden Fügen Sie dem verwendeten Controller den folgenden Code hinzu:

use extend\qqlogin\QC;
// 处理qq登录
public function qqlogin()
{
 $qq = new QC();
 $url = $qq->qq_login();
 $this->redirect($url);
}
// qq登录回调函数
public function qqcallback(UserModel $user)
{
 $qq = new QC();
 $qq->qq_callback();
 $qq->get_openid();
 $qq = new QC();
 $datas = $qq->get_user_info();
 * // 拿到用户信息后的处理
 *
}

切记:

在回调函数里面要实例化两次QC才能拿到用户信息,第二次实例化的时候才有openidaccess_token两个参数。

相关推荐:

ThinkPHP实现图片上传操作的方法

基于thinkPHP实现的微信自定义分享功能

Das obige ist der detaillierte Inhalt vonImplementierung der QQ-Anmeldefunktion eines Drittanbieters im thinkPHP5-Projekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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