QQ登录OAuth2.0 php接入种
QQ登录OAuth2.0 php接入类
?
/** ? * ? * qq登录 ? * @author http://www.heui.org ? * ? */ class Oauth_qq { ?? private static $_instance ; ?? private $config = array (); ?
?? private function __construct( $config ) ?? { ???? $this ->Oauth_qq( $config ); ?? } ?
?? public static function getInstance( $config ) ?? { ???? if (!isset(self:: $_instance )) ???? { ?????? $c = __CLASS__ ; ?????? self:: $_instance = new $c ( $config ); ???? } ???? return self:: $_instance ; ?? } ?
?? private function Oauth_qq( $config ) ?? { ???? $this ->config = $config ; ???? $_SESSION [ "appid" ]??? = $this ->config[ 'appid' ]; ???? $_SESSION [ "appkey" ]?? = $this ->config[ 'appkey' ]; ???? $_SESSION [ "callback" ] = $this ->config[ 'callback' ]; ???? $_SESSION [ "scope" ] = "get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo" ; ?? } ?
?? function login() ?? { ???? $_SESSION [ 'state' ] = md5(uniqid(rand(), TRUE)); //CSRF protection ???? $login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" ???? . $_SESSION [ "appid" ] . "&redirect_uri=" . urlencode( $_SESSION [ "callback" ]) ???? . "&state=" . $_SESSION [ 'state' ] ???? . "&scope=" . $_SESSION [ "scope" ]; ???? header( "Location:$login_url" ); ?? } ?
?? function callback() ?? { ???? if ( $_REQUEST [ 'state' ] == $_SESSION [ 'state' ]) //csrf ???? { ?????? $token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&" ?????? . "client_id=" . $_SESSION [ "appid" ]. "&redirect_uri=" . urlencode( $_SESSION [ "callback" ]) ?????? . "&client_secret=" . $_SESSION [ "appkey" ]. "&code=" . $_REQUEST [ "code" ]; ?
?????? $response = get_url_contents( $token_url ); ?????? if ( strpos ( $response , "callback" ) !== false) ?????? { ???????? $lpos = strpos ( $response , "(" ); ???????? $rpos = strrpos ( $response , ")" ); ???????? $response ? = substr ( $response , $lpos + 1, $rpos - $lpos -1); ???????? $msg = json_decode( $response ); ???????? if (isset( $msg ->error)) ???????? { ?????????? echo "<h3 id="error">error:</h3>" . $msg ->error; ?????????? echo "<h3 id="msg">msg? :</h3>" . $msg ->error_description; ?????????? exit ; ???????? } ?????? } ?
?????? $params = array (); ?????? parse_str ( $response , $params ); ?
?????? $_SESSION [ "access_token" ] = $params [ "access_token" ]; ???? } ???? else ???? { ?????? echo ( "The state does not match. You may be a victim of CSRF." ); ???? } ?? } ?
?? function get_openid() ?? { ???? $graph_url = "https://graph.qq.com/oauth2.0/me?access_token=" ???? . $_SESSION [ 'access_token' ]; ?
???? $str ? = get_url_contents( $graph_url ); ???? if ( strpos ( $str , "callback" ) !== false) ???? { ?????? $lpos = strpos ( $str , "(" ); ?????? $rpos = strrpos ( $str , ")" ); ?????? $str ? = substr ( $str , $lpos + 1, $rpos - $lpos -1); ???? } ?
???? $user = json_decode( $str ); ???? if (isset( $user ->error)) ???? { ?????? echo "<h3 id="error">error:</h3>" . $user ->error; ?????? echo "<h3 id="msg">msg? :</h3>" . $user ->error_description; ?????? exit ; ???? } ?
???? //set openid to session ???? return $_SESSION [ "openid" ] = $user ->openid; ?? } ?
?? function get_user_info() ?? { ???? $get_user_info = "https://graph.qq.com/user/get_user_info?" ???? . "access_token=" . $_SESSION [ 'access_token' ] ???? . "&oauth_consumer_key=" . $_SESSION [ "appid" ] ???? . "&openid=" . $_SESSION [ "openid" ] ???? . "&format=json" ; ?
???? $info = get_url_contents( $get_user_info ); ???? $arr = json_decode( $info , true); ?
???? return $arr ; ?? } ?
?? public function __clone() ?? { ???? trigger_error( 'Clone is not allow' ,E_USER_ERROR); ?? } ?
} ?
/* 公用函数 */ if (!function_exists( "do_post" )) { ?? function do_post( $url , $data ) ?? { ???? $ch = curl_init(); ???? curl_setopt( $ch , CURLOPT_RETURNTRANSFER, TRUE); ???? curl_setopt( $ch , CURLOPT_POST, TRUE); ???? curl_setopt( $ch , CURLOPT_POSTFIELDS, $data ); ???? curl_setopt( $ch , CURLOPT_URL, $url ); ???? $ret = curl_exec( $ch ); ?
???? curl_close( $ch ); ???? return $ret ; ?? } } if (!function_exists( "get_url_contents" )) { ?? function get_url_contents( $url ) ?? { ???? if ( ini_get ( "allow_url_fopen" ) == "1" ) ???? return file_get_contents ( $url ); ?
???? $ch = curl_init(); ???? curl_setopt( $ch , CURLOPT_RETURNTRANSFER, TRUE); ???? curl_setopt( $ch , CURLOPT_URL, $url ); ???? $result =? curl_exec( $ch ); ???? curl_close( $ch ); ?
???? return $result ; ?? } } |
使用实例:
$config [ 'appid' ]??? = '' ; $config [ 'appkey' ]?? = '' ; $config [ 'callback' ] = '' ; $o_qq = Oauth_qq::getInstance( $config ); ?
//then $o_qq ->login(); //or $o_qq ->callback(); $o_qq ->get_openid(); $o_qq ->get_user_info();
|
原文:http://www.heui.org/archives/454

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 기능 소개 - get_headers(): URL의 응답 헤더 정보 얻기 개요: PHP 개발에서는 웹 페이지나 원격 리소스의 응답 헤더 정보를 얻어야 하는 경우가 많습니다. PHP 함수 get_headers()를 사용하면 대상 URL의 응답 헤더 정보를 쉽게 얻고 이를 배열 형식으로 반환할 수 있습니다. 이 기사에서는 get_headers() 함수의 사용법을 소개하고 관련 코드 예제를 제공합니다. get_headers() 함수 사용법: get_header

오류의 원인은 urllib3 라이브러리의 예외 유형인 NameResolutionError(self.host,self,e)frome입니다. 이 오류의 원인은 DNS 확인에 실패했기 때문입니다. 해결을 찾을 수 없습니다. 이는 입력한 URL 주소가 정확하지 않거나 DNS 서버를 일시적으로 사용할 수 없기 때문에 발생할 수 있습니다. 이 오류를 해결하는 방법 이 오류를 해결하는 방법은 여러 가지가 있습니다. 입력한 URL 주소가 올바른지 확인하고 액세스할 수 있는지 확인하십시오. DNS 서버를 사용할 수 있는지 확인하십시오. 명령줄에서 "ping" 명령을 사용해 볼 수 있습니다. DNS 서버를 사용할 수 있는지 테스트하려면 프록시 뒤에 있는 경우 호스트 이름 대신 IP 주소를 사용하여 웹사이트에 액세스해 보세요.

차이점: 1. 정의가 다릅니다. url은 균일한 리소스 위치 지정자이고 html은 하이퍼텍스트 마크업 언어입니다. 2. html에는 여러 개의 URL이 있을 수 있지만 하나의 url에는 단 하나의 html 페이지만 존재할 수 있습니다. 웹 페이지이고 url은 웹 사이트 주소를 나타냅니다.

함수는 특정 기능을 포함하는 재사용 가능한 코드 블록으로, 입력 매개변수를 받아들이고 특정 작업을 수행하며 결과를 반환하는 것이 목적입니다. 코드 재사용성과 유지 관리성을 향상시키는 코드입니다.

세션 실패는 일반적으로 세션 수명 만료 또는 서버 종료로 인해 발생합니다. 해결 방법은 다음과 같습니다. 1. 세션 수명을 연장합니다. 3. 쿠키를 사용합니다. 4. 세션 관리 미들웨어를 사용합니다.

PHPSession의 도메인 간 문제 해결 프런트엔드와 백엔드 분리 개발에서 도메인 간 요청이 표준이 되었습니다. 도메인 간 문제를 처리할 때 일반적으로 세션 사용 및 관리가 포함됩니다. 그러나 브라우저 원본 정책 제한으로 인해 기본적으로 도메인 간에 세션을 공유할 수 없습니다. 이 문제를 해결하려면 도메인 간 세션 공유를 달성하기 위한 몇 가지 기술과 방법을 사용해야 합니다. 1. 도메인 간 세션을 공유하기 위한 쿠키의 가장 일반적인 사용

1. 세션 기반 SMS 로그인 구현 1.1 SMS 로그인 흐름도 1.2 SMS 인증코드 전송 구현 프런트엔드 요청 설명: 요청 방법 설명 POST 요청 경로/사용자/코드 요청 매개변수 전화(전화번호) 반환 값 백엔드 인터페이스 없음 구현: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1인 경우 휴대폰 번호를 확인합니다.

JavaScript쿠키 JavaScript 쿠키를 사용하는 것은 선호도, 구매, 커미션 및 기타 정보를 기억하고 추적하는 가장 효과적인 방법입니다. 더 나은 방문자 경험이나 웹사이트 통계를 위해 필요한 정보입니다. PHPCookieCookies는 클라이언트 컴퓨터에 저장되고 추적 목적으로 보관되는 텍스트 파일입니다. PHP는 HTTP 쿠키를 투명하게 지원합니다. JavaScript 쿠키는 어떻게 작동하나요? 귀하의 서버는 쿠키 형태로 방문자의 브라우저에 일부 데이터를 보냅니다. 브라우저는 쿠키를 허용할 수 있습니다. 존재하는 경우 방문자의 하드 드라이브에 일반 텍스트 기록으로 저장됩니다. 이제 방문자가 사이트의 다른 페이지에 도달하면
