>  기사  >  백엔드 개발  >  원클릭 로그인을 구현하고 사용자 정보를 얻는 PHP WeChat 타사 방법(자세한 예)

원클릭 로그인을 구현하고 사용자 정보를 얻는 PHP WeChat 타사 방법(자세한 예)

墨辰丷
墨辰丷원래의
2018-06-01 09:36:101223검색

이 글에서는 주로 원클릭 로그인을 달성하고 사용자 정보를 얻기 위한 PHP 버전의 WeChat 제3자 로그인 방법을 소개합니다. 필요한 경우 WeChat 제3자 로그인 관련 주의사항과 구현 기술을 자세히 분석합니다.

참고: WeChat을 사용하여 제3자 웹페이지에 로그인하려면 "서비스 계정"이 필요하므로 공식 웹사이트에서 신청해야 합니다.

처음에는 WeChat 공개 플랫폼에 들어가 개발 모드를 열고 oauth2의 콜백 주소를 입력해야 합니다. 예를 들어 www.baidu.com 또는 zhidao만 입력하면 됩니다. .baidu.com 프로젝트의 경우 2차 도메인 이름에 2차 도메인 이름

Front-end url 인증 주소를 쓰고, URL에 프로젝트의 메소드에 appid와 oauth 주소를 입력합니다. 자세한 내용은 아래 코드에서 확인할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

5c5e12da9166f0c72af3a3bb54ba3245Authorization5db79b134e9f6b82c0b36e0489ee08ed

백그라운드 로직에 대해 이야기해 보겠습니다. 먼저 WeChat 인터페이스의 SDK를 호출합니다. (추후 예정입니다)

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

그런 다음 WeChat 공식

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

에서 제공한 appid와 secret을 입력하고 SDK 클래스를 초기화하고 코드를 얻은 후 얻은 코드를 사용하여 openid를 가져옵니다. 아래 코드 주석!

$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

계속해서 SDK 메서드를 호출해 사용자 정보를 가져왔습니다. 이때 $Row는 var_dump를 사용하여 쉽게 저장할 수 있는 키 값을 확인할 수 있습니다.

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

사용자 정보를 얻었지만 이것만으로는 충분하지 않습니다. 등록할 필요가 없습니다. 그래서 우리는 각 사용자가 가지고 있는 유일한 자격 증명을 사용해야 합니다. 다른 공식 계정에 대한 다른 openid는 사용자 계정의 느낌으로 이해할 수 있습니다.여기서 사용하는 것은 openid를 쿠키에 저장하는 솔루션으로, 이는 사용자 로그인의 느낌과 유사합니다. 다른 활용 방법도 있으니 저에게 메시지를 남겨서 소통해보세요!

이전 a 링크의 승인 여부도 확인할 수 있습니다! openid를 사용하여 권한이 없는 사용자가 해당 주소로 직접 이동할 수 있도록 하여 사용자의 한 단계 작업을 저장합니다.

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();
}

SDK 코드: WeChat 공식 매뉴얼, 자세한 내용은 다루지 않겠습니다. 저 스스로 연구는 매우 간단합니다!

<?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;
  }
}

요약: 위 내용은 이 기사의 전체 내용입니다. 모든 사람의 연구에 도움이 되기를 바랍니다.

관련 권장 사항:

phpmysql 데이터를 삽입하고 ID를 반환하는 방법

php 중국어와 영어 혼합 문자열을 차단하는 방법

ThinkPHP5 유효성 검사기의 구체적인 사용


JSON PHP에서 Json 문자열을 객체/배열로 역직렬화하는 방법


위 내용은 원클릭 로그인을 구현하고 사용자 정보를 얻는 PHP WeChat 타사 방법(자세한 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.