開発戦略_サーバーサイド
前提条件を読む
この開発戦略は、認可コードを使用してアクセス トークンを取得する認可検証プロセスに基づいており、からアクセスする必要があるアプリケーションに適しています。 Web/wap Web サイトなどの Web サーバー。
この開発ガイドを読む前に、[QQ ログイン] 認証コードを使用したアクセス トークンの取得を読んで、認証プロセスを理解してください。
1. 体験してください
注:
この体験はサーバーレス モードに基づいていますが、体験効果は次のとおりです。と同じ サーバー側のモードは同じです。
1. ブラウザ アクセス: http://qzs.qq.com/qzone/openapi/client.html。
2. ページの [ログイン] ボタンをクリックします:
3. ポップアップ ログイン ボックスに QQ アカウント番号とパスワードを入力します:
4. ログインに成功したら、URL にアクセス トークンを指定して、指定したコールバック アドレスにジャンプします:
#2. すぐに始めましょう
準備
1. Web サイトが QQ ログインのアプリケーションを送信し、appid と appkey を正常に取得していることを確認してください。アクセスを申請する
2. ウェブサイトと Qzone 間の接続がスムーズであることを確認するために、サーバー上で openapi.qzone.qq.com に ping を実行してください。
ステップ 1: QQ ログイン ボタンを配置する
Web サイトでは、「QQ ログイン」ボタンの画像をダウンロードし、ボタンを適切に配置する必要があります。 UI仕様の位置に従ってページを移動します。
ボタン アイコンのダウンロード ボタンの配置仕様
ステップ 2: 認証コードを取得します
1. ブラウザを開いて、次のアドレスにアクセスします ( client_id、redirect_uri、scope およびその他のパラメーター値を独自の値に置き換えます):
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id= [YOUR_APPID] &redirect_uri=[YOUR_REDIRECT_URI]&scope=[THE_SCOPE]
2. ユーザーがすでにログインしている場合は、確認ページがポップアップ表示されます。ログインしていない場合は、次のようなログイン ページが表示されます:
3. ログインに成功すると、認証ボックスがポップアップ表示され、ユーザーに認証を指示します (最初の場合のみ)ログイン成功、および最初の訪問 以下に示すように、未承認の OpenAPI が使用される場合、承認ページが表示されます:
注:
ユーザーが [スキップ] をクリックした場合」と指定すると、コールバック アドレスにジャンプし、デフォルトのアバター、ニックネーム、性別が返されます。
サードパーティ アプリケーションで承認項目を制御すること、つまり、使用する必要がある OpenAPI 名のみをパラメーター スコープで渡すことをお勧めします。認可項目が多いほど、ユーザーが認可を拒否する可能性が高くなるためです。
4. ユーザーが「承認」をクリックすると、指定された redirect_uri に正常にジャンプし、承認コードに従います (このコードは 10 分以内に期限切れになることに注意してください )。
たとえば、コールバック アドレスが www.qq.com/my.php の場合、
http://www.qq.com/my にジャンプします。 php? code=520DD95263C1CFEA0870FBB66E******
注:
コールバック アドレスは Web サイトのホームページまたはユーザー センターに設定することをお勧めします。ウェブサイトの。
ステップ 3: 認証コードを通じてアクセス トークンを取得する
1. 次のアドレスにリクエストを送信します (パラメーター値を置き換えてください)パラメータの説明については、ここを参照してください):
https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=[YOUR_APP_ID]&client_secret=[ YOUR_APP_Key] &code=[The_AUTHORIZATION_CODE]&state=[The_CLIENT_STATE]&redirect_uri=[YOUR_REDIRECT_URI]
2. アクセス トークンを取得できます:
access_token= YOUR_ACCESS_TOKEN&expires_in=3600
は、コールバック URL (以下のサンプル コードを参照) に対応するプログラムでリクエストを受け入れ、アクセス トークンの取得作業を完了できます。
特別な注意事項:
取得したアクセス トークンの有効期間は 3 か月で、ユーザーが再度ログインすると自動的に更新されます。
サードパーティ Web サイトは、OpenAPI を呼び出してユーザー情報にアクセスして変更するときに、後で使用するためにアクセス トークン情報を保存できます。
ステップ 4: アクセス トークンを使用してユーザーの OpenID を取得します
1. 次のアドレスにリクエストを送信します (access_token とその他のパラメーターの値は置き換えてください)独自の ):
https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN
2.ユーザー OpenID を取得します。返されるパッケージは次のとおりです:
callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
ステップ 5: アクセス トークンと OpenID を使用してユーザー データにアクセスし、変更します。
1. ユーザー エクスペリエンスを統一するために、ユーザーがログインした後、Web サイトで get_user_info インターフェイスを呼び出してユーザーのアバターとニックネームを取得し、Web サイトに表示することをお勧めします。
2. 他の OpenAPI を呼び出してユーザー データにアクセスし、変更します。 OpenAPI の詳細については、[QQ ログイン] API ドキュメントを参照してください。
get_user_info インターフェイスの呼び出しを例にします:
(1) get_user_info の URL にリクエストを送信します (access_token、appid、およびその他のパラメーターの値は独自の値に置き換えてください):
https://graph.qq.com/user/get_user_info?access_token=YOUR_ACCESS_TOKEN&oauth_consumer_key=YOUR_APP_ID&openid=YOUR_OPENID
(2) 正常に戻った後、ユーザー データを取得できます:
{
"ret":0, "msg":"", "nickname":"YOUR_NICK_NAME", ...
}
#3. サンプルコード
$app_id = "YOUR_APP_ID";
//アプリケーションの APPKEY
$app_secret = "YOUR_APP_KEY";
//コールバック認証成功後のアドレス
$my_url = "YOUR_REDIRECT_URL";
//ステップ 1: 認証コードの取得
session_start();
$code = $_REQUEST["code"];
if(empty ($code))
{
//state パラメーターは CSRF 攻撃を防ぐために使用されます。承認成功後のコールバック中に変更されずに戻されます。
$_SESSION['state' ] = md5(uniqid(rand(), TRUE));
//URL の接続
$dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. . $_SESSION['state'];
echo("<script> top.location.href= '" . $dialog_url . "'</ script>");
}
if($_REQUEST['state'] == $_SESSION['state'])
{
//拼接URL
$token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
。 「client_id=」。 $app_id 。 「&redirect_uri=」。 urlencode($my_url)
。 「&client_secret=」。 $app_secret 。 「&code=」。 $code;
$response = file_get_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>error:</h3>" 。 $msg->error;
echo "
msg :
" 。 $msg->error_description;終了;
}
}
$params = array();
parse_str($response, $params);
$graph_url = "https:/ /graph.qq.com/oauth2.0/me?access_token="
$params['access_token'];
$str = file_get_contents($graph_url);
if (strpos($str, "コールバック") !== 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>エラー:</h3>」 。 $user->error;
echo "<h3>msg :</h3>" 。 $user->error_description;
exit;
}
echo("Hello " . $user->gt;openid);
}
else
{
echo( 「状態が一致しません。あなたは CSRF の被害者である可能性があります。」);
}
?>