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

墨辰丷
Libérer: 2023-03-28 20:14:02
original
1223 Les gens l'ont consulté

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 :

Autorisation

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');
Copier après la connexion

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

$weixin=new class_weixin_adv("appid", "secret");
Copier après la connexion

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
Copier après la connexion

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']);
Copier après la connexion

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();
}
Copier après la connexion

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;
  }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!