개발 전략_서버사이드
선행 조건 읽기
이 개발 가이드는 인증 코드를 사용하여 액세스 토큰을 얻는 인증 확인 프로세스를 기반으로 합니다. 웹/왑 웹사이트와 같이 웹 서버에서 액세스해야 하는 애플리케이션에 적합합니다.
이 개발 가이드를 읽기 전에 [QQ 로그인] 인증 코드를 사용하여 액세스 토큰 얻기를 읽고 인증 프로세스를 이해하세요.
1. 경험해 보세요
참고:
이 경험은 서버리스 모드를 기반으로 하지만 경험 효과는 서버 모드와 동일합니다.
1. 브라우저 접속: http://qzs.qq.com/qzone/openapi/client.html.
2. 페이지에서 "로그인" 버튼을 클릭하세요:
3. 팝업 로그인 상자에 QQ 계정과 비밀번호를 입력하세요:
4. 로그인에 성공하면, 지정된 콜백 주소로 이동하세요. 액세스 토큰 포함:
2. 빨리 시작하세요
준비
1. 접속 신청
2. 홈페이지와 Qzone의 원활한 연결을 위해 서버에서 openapi.qzone.qq.com을 ping해 주세요.
1단계: QQ 로그인 버튼 배치
웹사이트에서 "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. 사용자가 승인을 위해 "확인"을 클릭하면 지정된 리디렉션_uri로 성공적으로 점프하고 승인 코드를 따릅니다(이 코드는 10분 이내에 만료됩니다).
예를 들어 콜백 주소가 www.qq.com/my.php이면 다음으로 이동합니다.
http://www.qq.com/my.php?code=520DD95263C1CFEA0870FBB66E**** **
참고:
콜백 주소는 해당 웹사이트의 홈페이지나 웹사이트의 사용자 센터로 설정하는 것이 좋습니다.
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개월이며 사용자가 다시 로그인하면 자동으로 새로 고쳐집니다.
제3자 웹사이트에서는 OpenAPI를 호출하여 사용자 정보에 액세스하고 수정할 때 나중에 사용할 수 있도록 액세스 토큰 정보를 저장할 수 있습니다.
4단계: 액세스 토큰을 사용하여 사용자의 OpenID 획득
1. 다음 주소로 요청을 보내세요. access_token 등 매개변수 값을 원하는 값으로 바꿉니다.):
https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN# 🎜🎜##🎜 🎜#
callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
1 웹사이트에서 get_user_info 인터페이스를 호출하는 것이 좋습니다. 사용자는 로그인하여 사용자의 아바타와 닉네임을 획득하고 웹사이트에 표시하여 사용자 경험을 통일시킵니다. 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. 샘플 코드
//앱의 APPID
$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))
// 상태 매개변수는 CSRF 공격을 방지하는 데 사용되며 승인 성공 후 콜백 중에 그대로 반환됩니다.
$_SESSION['state'] = md 5(uniqid(rand(), TRUE))
/ / URL 연결
$dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
. $app_id "&redirect_uri=" . . $ _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&"
. "클라이언트_ID=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&코드=" . $code;
$response = file_get_contents($token_url);
if (strpos($response, "callback") !== false)
{
$lpos = strpos( 정의 ;
$msg = json_decode($response);
if (isset($msg->error))
{
에코 "<h3> 오류:</ h3>" . $msg->error;
에코 "<h3>msg :</h3>" . $msg->error_description;
exit;
}
}
$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>error:</h3>" . $user->error;
에코 "<h3>msg :</h3>" . 정의 CSRF의 .");
}
?>