Jadual Kandungan
error:
msg? :
Rumah pembangunan bahagian belakang tutorial php QQ登录OAuth2.0 php接入种

QQ登录OAuth2.0 php接入种

Jun 13, 2016 pm 01:18 PM
config function session url

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pengenalan fungsi PHP—get_headers(): Dapatkan maklumat pengepala respons URL Pengenalan fungsi PHP—get_headers(): Dapatkan maklumat pengepala respons URL Jul 25, 2023 am 09:05 AM

Pengenalan fungsi PHP—get_headers(): Gambaran keseluruhan mendapatkan maklumat pengepala respons URL: Dalam pembangunan PHP, kita selalunya perlu mendapatkan maklumat pengepala respons halaman web atau sumber jauh. Fungsi PHP get_headers() boleh dengan mudah mendapatkan maklumat pengepala respons URL sasaran dan mengembalikannya dalam bentuk tatasusunan. Artikel ini akan memperkenalkan penggunaan fungsi get_headers() dan menyediakan beberapa contoh kod yang berkaitan. Penggunaan fungsi get_headers(): get_header

Bagaimana untuk menyelesaikan kegagalan sesi Bagaimana untuk menyelesaikan kegagalan sesi Oct 18, 2023 pm 05:19 PM

Kegagalan sesi biasanya disebabkan oleh tamat tempoh seumur hidup sesi atau penutupan pelayan. Penyelesaian: 1. Memanjangkan hayat sesi; 2. Gunakan storan berterusan;

Penyelesaian kepada masalah merentas domain Sesi PHP Penyelesaian kepada masalah merentas domain Sesi PHP Oct 12, 2023 pm 03:00 PM

Penyelesaian kepada masalah silang domain PHPSession Dalam pembangunan pemisahan front-end dan back-end, permintaan merentas domain telah menjadi kebiasaan. Apabila menangani isu merentas domain, kami biasanya melibatkan penggunaan dan pengurusan sesi. Walau bagaimanapun, disebabkan oleh sekatan dasar asal penyemak imbas, sesi tidak boleh dikongsi secara lalai merentas domain. Untuk menyelesaikan masalah ini, kita perlu menggunakan beberapa teknik dan kaedah untuk mencapai perkongsian sesi merentas domain. 1. Penggunaan kuki yang paling biasa untuk berkongsi sesi merentas domain

Mengapa NameResolutionError(self.host, self, e) daripada e dan cara menyelesaikannya Mengapa NameResolutionError(self.host, self, e) daripada e dan cara menyelesaikannya Mar 01, 2024 pm 01:20 PM

Sebab ralat adalah NameResolutionError(self.host,self,e)daripada, yang merupakan jenis pengecualian dalam pustaka urllib3 Sebab ralat ini adalah bahawa resolusi DNS gagal, iaitu nama hos atau alamat IP yang telah cuba diselesaikan tidak dapat ditemui. Ini mungkin disebabkan oleh alamat URL yang dimasukkan tidak betul atau pelayan DNS tidak tersedia buat sementara waktu. Bagaimana untuk menyelesaikan ralat ini Mungkin terdapat beberapa cara untuk menyelesaikan ralat ini: Semak sama ada alamat URL yang dimasukkan adalah betul dan pastikan ia boleh diakses Pastikan pelayan DNS tersedia, anda boleh cuba menggunakan arahan "ping" dalam baris arahan untuk menguji sama ada pelayan DNS tersedia Cuba akses tapak web menggunakan alamat IP dan bukannya nama hos jika di belakang proksi

Apakah maksud fungsi? Apakah maksud fungsi? Aug 04, 2023 am 10:33 AM

Fungsi bermaksud fungsi. Ia adalah blok kod yang boleh digunakan semula dengan fungsi tertentu Ia boleh menerima parameter input, melakukan operasi tertentu, dan mengembalikan hasil daripada blok yang boleh digunakan semula. kod untuk meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod.

Apakah perbezaan antara html dan url Apakah perbezaan antara html dan url Mar 06, 2024 pm 03:06 PM

Perbezaan: 1. Definisi yang berbeza, url ialah pencari sumber seragam, dan html ialah bahasa penanda hiperteks 2. Terdapat banyak url dalam html, tetapi hanya satu halaman html boleh wujud dalam url 3. html merujuk kepada; halaman web, dan url merujuk kepada alamat tapak web.

Bagaimana untuk melaksanakan log masuk SMS dalam aplikasi sesi kongsi Redis Bagaimana untuk melaksanakan log masuk SMS dalam aplikasi sesi kongsi Redis Jun 03, 2023 pm 03:11 PM

1. Melaksanakan log masuk SMS berdasarkan sesi 1.1 Carta alir log masuk SMS 1.2 Melaksanakan penghantaran kod pengesahan SMS Perihalan permintaan hujung hadapan: Penerangan kaedah permintaan POST laluan permintaan/pengguna/kod parameter permintaan telefon (nombor telefon) nilai pulangan Tiada antara muka belakang pelaksanaan: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){/1

Petua pengoptimuman buruk: Cara mengurangkan rangkak URL pendua dan meningkatkan kecekapan Petua pengoptimuman buruk: Cara mengurangkan rangkak URL pendua dan meningkatkan kecekapan Jun 22, 2023 pm 01:57 PM

Scrapy ialah rangka kerja perangkak Python yang berkuasa yang boleh digunakan untuk mendapatkan sejumlah besar data daripada Internet. Walau bagaimanapun, apabila membangunkan Scrapy, kami sering menghadapi masalah merangkak URL pendua, yang membuang banyak masa dan sumber serta menjejaskan kecekapan. Artikel ini akan memperkenalkan beberapa teknik pengoptimuman Scrapy untuk mengurangkan rangkak URL pendua dan meningkatkan kecekapan perangkak Scrapy. 1. Gunakan atribut start_urls dan allowed_domains dalam perangkak Scrapy untuk

See all articles