目次
error:
msg? :

QQ登录OAuth2.0 php接入种

Jun 13, 2016 am 10:39 AM
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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 関数の紹介 - get_headers(): URL の応答ヘッダー情報を取得します PHP 関数の紹介 - get_headers(): URL の応答ヘッダー情報を取得します Jul 25, 2023 am 09:05 AM

PHP 関数の紹介 - get_headers(): URL の応答ヘッダー情報の取得の概要: PHP 開発では、Web ページまたはリモート リソースの応答ヘッダー情報を取得する必要があることがよくあります。 PHP 関数 get_headers() を使用すると、対象 URL の応答ヘッダー情報を簡単に取得し、配列の形式で返すことができます。この記事では、get_headers() 関数の使用法を紹介し、関連するコード例をいくつか示します。 get_headers() 関数の使用法: get_header

e からの NameResolutionError(self.host, self, e) の理由とその解決方法 e からの NameResolutionError(self.host, self, e) の理由とその解決方法 Mar 01, 2024 pm 01:20 PM

エラーの理由は、urllib3 ライブラリの例外タイプである NameResolutionError(self.host,self,e)frome です。このエラーの理由は、DNS 解決が失敗したこと、つまり、ホスト名または IP アドレスが試みられたことです。解決できるものが見つかりません。これは、入力された URL アドレスが間違っているか、DNS サーバーが一時的に利用できないことが原因である可能性があります。このエラーを解決する方法 このエラーを解決するにはいくつかの方法があります。 入力された URL アドレスが正しいかどうかを確認し、アクセス可能であることを確認します。 DNS サーバーが利用可能であることを確認します。コマンド ラインで「ping」コマンドを使用してみてください。 DNS サーバーが利用可能かどうかをテストします。プロキシの背後にある場合は、ホスト名の代わりに IP アドレスを使用して Web サイトにアクセスしてみてください。

htmlとurlの違いは何ですか htmlとurlの違いは何ですか Mar 06, 2024 pm 03:06 PM

相違点: 1. 定義が異なります。URL はユニフォーム リソース ロケーターであり、HTML はハイパーテキスト マークアップ言語です。 2. HTML には多数の URL を含めることができますが、URL 内に存在できる HTML ページは 1 つだけです。 3. HTML は is を指します。 Web ページ、url は Web サイトのアドレスを指します。

機能とはどういう意味ですか? 機能とはどういう意味ですか? Aug 04, 2023 am 10:33 AM

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

セッション失敗を解決する方法 セッション失敗を解決する方法 Oct 18, 2023 pm 05:19 PM

セッション障害は通常、セッションの有効期間の期限切れまたはサーバーのシャットダウンによって発生します。解決策: 1. セッションの有効期間を延長する; 2. 永続ストレージを使用する; 3. Cookie を使用する; 4. セッションを非同期的に更新する; 5. セッション管理ミドルウェアを使用する。

PHP セッションのクロスドメイン問題の解決策 PHP セッションのクロスドメイン問題の解決策 Oct 12, 2023 pm 03:00 PM

PHPSession のクロスドメイン問題の解決策 フロントエンドとバックエンドの分離の開発では、クロスドメイン要求が標準になっています。クロスドメインの問題に対処するときは、通常、セッションの使用と管理が必要になります。ただし、ブラウザーのオリジンポリシーの制限により、デフォルトではセッションをドメイン間で共有できません。この問題を解決するには、いくつかの技術と方法を使用して、セッションのクロスドメイン共有を実現する必要があります。 1. ドメイン間でセッションを共有するための Cookie の最も一般的な使用法

Redis 共有セッション アプリケーションに SMS ログインを実装する方法 Redis 共有セッション アプリケーションに SMS ログインを実装する方法 Jun 03, 2023 pm 03:11 PM

1. セッションに基づく SMS ログインの実装 1.1 SMS ログインのフローチャート 1.2 SMS 検証コード送信の実装 フロントエンド リクエストの説明: リクエスト メソッドの説明 POST リクエスト パス /user/code リクエスト パラメータ 電話 (電話番号) 戻り値 バックエンド インターフェイスなし実装: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1。次の場合は携帯電話番号を確認します。

JavaScript Cookie と PHP Cookie の違いは何ですか? JavaScript Cookie と PHP Cookie の違いは何ですか? Sep 02, 2023 pm 12:29 PM

JavaScriptCookies JavaScript Cookie の使用は、設定、購入、手数料、その他の情報を記憶および追跡する最も効果的な方法です。訪問者のエクスペリエンスを向上させるために必要な情報やウェブサイトの統計。 PHPCookieCookie は、クライアント コンピューターに保存され、追跡目的で保持されるテキスト ファイルです。 PHP は HTTP Cookie を透過的にサポートします。 JavaScript Cookie はどのように機能しますか?サーバーは、訪問者のブラウザに Cookie の形式でデータを送信します。ブラウザは Cookie を受け入れることができます。存在する場合、それは訪問者のハードドライブにプレーンテキストレコードとして保存されます。さて、訪問者がサイト上の別のページに到達すると、

See all articles