Maison  >  Article  >  développement back-end  >  Méthode tierce PHP WeChat pour implémenter la connexion en un clic et obtenir des informations utilisateur (exemple détaillé)

Méthode tierce PHP WeChat pour implémenter la connexion en un clic et obtenir des informations utilisateur (exemple détaillé)

墨辰丷
墨辰丷original
2018-06-01 09:36:101224parcourir

Cet article présente principalement la version PHP de la méthode tierce WeChat pour réaliser une connexion en un clic et obtenir des informations sur l'utilisateur. Il analyse plus en détail les précautions pertinentes et les compétences de mise en œuvre de la connexion tierce WeChat. Les amis dans le besoin peuvent s'y référer. à cela

Notez que si vous souhaitez utiliser WeChat pour vous connecter à une page Web tierce, vous avez besoin d'un "compte de service", vous devez donc en faire la demande sur le site officiel.

Au début, vous devez accéder à la plateforme publique WeChat pour ouvrir le mode développement, et renseigner l'adresse de rappel de oauth2. Remplissez simplement le nom de domaine de votre projet. Par exemple : www. .baidu.com ou zhidao.baidu com. Si votre projet est dans un nom de domaine de deuxième niveau, écrivez le nom de domaine de deuxième niveau

adresse d'autorisation de l'url front-end. adresse dans la méthode dans votre projet dans l'url. Vous pouvez voir les détails dans le code ci-dessous. Allez sur.

Copier le code Le code est le suivant :

a7d80bdc8e345974ded9f4972160d44bAutorisation5db79b134e9f6b82c0b36e0489ee08ed

Parlons de la logique d'arrière-plan, appelez d'abord le SDK pour l'interface WeChat. (sera disponible plus tard)

include('./Card/Common/class_weixin_adv.php');

puis remplissez l'appid et le secret donnés par le responsable de WeChat

$weixin=new class_weixin_adv("appid", "secret");

Initialisez la classe SDK, récupérez le code, et utilisez le code obtenu pour obtenir l'openid. Voir les commentaires de code ci-dessous !

$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=".$_GET['code']."&grant_type=authorization_code";
$res = $weixin->https_request($url);//调用SDK方法获取到res 从中可以得到openid
$res=(json_decode($res, true));//转换成array 方便调用openid

Continuez à appeler la méthode SDK pour obtenir les informations utilisateur à. cette fois, $row a obtenu les informations utilisateur. Vous pouvez utiliser var_dump pour voir la valeur clé pour un stockage facile dans la base de données

$row=$weixin->get_user_info($res['openid']);

Obtention des informations utilisateur. C'est fait, mais cela ne suffit pas. Ce dont nous avons besoin, c'est de ne pas avoir besoin de s'inscrire ! Nous devons donc utiliser openid, c'est un certificat unique. Chaque utilisateur a un openid différent pour différents comptes publics. d'un compte utilisateur. La solution que j'utilise ici est de stocker l'openid dans un cookie, ce qui est similaire à la sensation d'un utilisateur se connectant. Certaines vérifications des données clés doivent uniquement être comparées à l'openid dans la base de données. peut être utilisé L'imagination de chacun ! Vous pouvez me laisser un message pour communiquer

Concernant l'autorisation du lien précédent, vous pouvez également déterminer si le cookie a openid, afin que les utilisateurs non autorisés puissent accéder directement au adresse, enregistrant à l'utilisateur une étape d'opération.

Ce qui suit est le code logique complet, vous pouvez vous y référer !

public function oauth2(){
 include('./Card/Common/class_weixin_adv.php');
  $weixin=new class_weixin_adv("appid", "secret");
  if (isset($_GET['code'])){
    $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=".$_GET['code']."&grant_type=authorization_code";
    $res = $weixin->https_request($url);
    $res=(json_decode($res, true));
    $row=$weixin->get_user_info($res['openid']);
    if ($row['openid']) {
      //这里写上逻辑,存入cookie,数据库等操作
      cookie('weixin',$row['openid'],25920);
    }else{
      $this->error('授权出错,请重新授权!');
    }
  }else{
    echo "NO CODE";
  }
  $this->display();
}

Code SDK : manuel officiel de WeChat, je ne parlerai plus, faites simplement vos propres recherches, c'est très simple !

<?php
/**
 * 微信SDK
 * pan041ymail@gmail.com
 */
class class_weixin_adv
{
  var $appid = "";
  var $appsecret = "";
  //构造函数,获取Access Token
  public function __construct($appid = NULL, $appsecret = NULL)
  {
    if($appid){
      $this->appid = $appid;
    }
    if($appsecret){
      $this->appsecret = $appsecret;
    }
    $this->lasttime = 1395049256;
    $this->access_token = "nRZvVpDU7LxcSi7GnG2LrUcmKbAECzRf0NyDBwKlng4nMPf88d34pkzdNcvhqm4clidLGAS18cN1RTSK60p49zIZY4aO13sF-eqsCs0xjlbad-lKVskk8T7gALQ5dIrgXbQQ_TAesSasjJ210vIqTQ";
    if (time() > ($this->lasttime + 7200)){
      $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;
      $res = $this->https_request($url);
      $result = json_decode($res, true);
      $this->access_token = $result["access_token"];
      $this->lasttime = time();
    }
  }
//获取用户基本信息
  public function get_user_info($openid)
  {
    $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN";
    $res = $this->https_request($url);
    return json_decode($res, true);
  }
//https请求
  public function https_request($url, $data = null)
  {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
      curl_setopt($curl, CURLOPT_POST, 1);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
  }
}

Résumé : Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

phpComment insérer des données MySQL et renvoyer l'identifiant

phpMéthode pour intercepter des chaînes mixtes chinoises et anglaises

Utilisation spécifique du validateur ThinkPHP5

JSON PHP Dans, la méthode de désérialisation d'une chaîne Json en objet/tableau

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn