Cet article présente principalement l'implémentation de la fonction de connexion tierce QQ dans le projet thinkPHP5. Il analyse en détail les étapes spécifiques et les compétences opérationnelles associées pour modifier l'interface de connexion QQ et l'intégrer dans le projet thinkPHP5 sous la forme de. exemples. Les amis dans le besoin peuvent s'y référer. Suivant
L'exemple de cet article décrit l'implémentation de la fonction de connexion tierce QQ dans le projet thinkPHP5. Je le partage avec vous pour votre référence. Les détails sont les suivants :
Récemment, j'ai utilisé le framework thinkPHP 5 pour créer un projet de boutique de mariage. Pendant le processus de développement, une connexion tierce était requise. Le cas fourni par Tencent est que plusieurs fichiers interagissent les uns avec les autres. Il contient l'implémentation. Il est très triste de constater que la fonction attendue ne peut pas être complétée via include ou require dans le contrôleur. Il faut le modifier. La modification est la suivante :
1. Trouver le fichier core dans le SDK officiel
Lorsqu'il est utilisé en dehors du framework, il est include 'qqConnectAPI.php'
. Ouvrez ce fichier pour voir. Il contient plusieurs autres fichiers. Les fichiers du dossier comm ne sont rien d'autre que la définition de certaines constantes et l'enregistrement des informations de votre APP KEY. Il suffit de mettre quelques fichiers de classe dans le dossier de classe. Allez simplement dans tp5, et si vous regardez attentivement le code, vous constaterez que vous pouvez réellement implémenter la fonction tant que vous obtenez trois classes.
2. Mettez-le dans le framework tp
tp5 recommande de mettre les éléments tiers qui ne sont pas installés par composer dans le répertoire d'extension Suivant , car nous devrons peut-être créer d'autres extensions à l'avenir, nous allons créer ici un dossier qqlogin séparé lié à la connexion qq
Vous pouvez voir qu'il n'y a que trois catégories. dans celui-ci, que j'ai supprimé. J'ai créé une classe Recorder et une classe ErrorCase, la fonction de ces deux-là est d'enregistrer certaines informations, telles que access_token, et je vais les supprimer directement ici. Notez également que selon la spécification psr4, le nom de la classe doit être cohérent avec le nom du fichier, vous devez donc changer le nom du fichier et ajouter l'espace de noms extendqqlogin, Toutes les classes de tp5 doivent avoir le espace de noms .
De plus, afin d'empêcher tp5 de trouver les fichiers dont nous avons besoin, il est préférable d'enregistrer un espace de noms racine dans le fichier config.php, à la ligne 30 :
// 注册的根命名空间 'root_namespace' => [ 'extend\qqlogin' => '../extend/qqlogin/', 'extend\baidu' => '../extend/bdlogin/' ],
3. Transformer le code source
Parce que QC.php hérite de Oauth.php, nous le modifions de ce dernier. et supprimez-le. Je ne parlerai pas de require_once et de l'ajout de l'espace de noms. Tout d'abord, regardez les attributs du membre. La constante de classe est l'adresse de la plate-forme Tencent. Il y a trois attributs. pas nécessaire. Commentez-les ou supprimez-les directement. La même chose est vraie ci-dessous. Vous devriez imaginer que vous avez une rancune contre ces deux mots, et les commenter ou les supprimer lorsque vous les voyez.
// protected $recorder; public $urlUtils; // protected $error; public $state; public $appid = "****"; public $callback = "http://****/index/user/qqcallback"; public $scope = "get_user_info";
Les quatre attributs suivants doivent être ajoutés. L'état est utilisé pour empêcher les attaques CSRF. Vous pouvez savoir quels sont les trois attributs suivants en regardant. les documents officiels. Ceux-ci étaient à l'origine stockés dans inc.php dans le dossier comm, mais maintenant ils sont directement récupérés et transformés en attributs de membre.
Construisez ensuite la fonction et instanciez trois classes. Deux d'entre elles n'existent plus, et comme mentionné ci-dessus, ces deux mots ont de la rancune, alors commentez-les ou supprimez-les lorsque vous les voyez.
Regardez la première méthode de membre ci-dessousqq_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"); }
Nous avons déjà ces deux mots. Nous avons à nouveau besoin de ces choses. N'oubliez pas que nous avons ajouté trois attributs de membre ci-dessus. Nous avons déjà ces valeurs et utilisons-les ci-dessous. Lors de la vérification de l'état, nous pouvons le vérifier via la session. TP5 fournit une fonction d'assistant pour écrire la session : $this->appid
session('state',$this->state);
de tp5 pour réaliser le saut dans le contrôleur. $this->redirect()
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"]); }
suivante est similaire. La liste des paramètres est construite à l'aide de la session et la valeur de retour est écrite directement dans la session. get_openid()
$this->keysArr = array( "oauth_consumer_key" => (int)$this->appid, "access_token" => session('access_token'), "openid" => session('openid') );
4. Appel du contrôleur
La transformation est terminée et vous pouvez contrôlez-le Il est utilisé dans l'appareil, et le code est joint ci-dessous :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才能拿到用户信息,第二次实例化的时候才有openid和access_token两个参数。
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!