>  기사  >  백엔드 개발  >  PHP 버전 QQ 인터넷 OAuth 샘플 코드 공유

PHP 버전 QQ 인터넷 OAuth 샘플 코드 공유

WBOY
WBOY원래의
2016-07-25 08:45:001125검색

국내 QQ 사용자들의 인기로 인해 현재 주요 웹사이트에서는 QQ 로그인 포트를 제공하기 위해 최선을 다하고 있습니다. 참고로 PHP 버전을 살펴보겠습니다.

  1. /**
  2. * QQ 인터넷 oauth
  3. * @author dyllen
  4. *
  5. */
  6. class Oauth
  7. {
  8. //인증 코드 URL 가져오기
  9. const PC_CODE_URL = 'https: //graph.qq.com/oauth2.0/authorize';
  10. //액세스 토큰 URL 가져오기
  11. const PC_ACCESS_TOKEN_URL = 'https://graph.qq.com/oauth2.0/token' ;
  12. //사용자 Open Id Url 가져오기
  13. const OPEN_ID_URL = 'https://graph.qq.com/oauth2.0/me';
  14. //사용자 인증 후 콜백 주소
  15. public $redirectUri = null;
  16. // 앱 ID
  17. public $appid = null;
  18. //앱 키
  19. public $appKey = null;
  20. //권한 부여 목록
  21. //쉼표로 구분된 여러 문자열
  22. public $scope = null;
  23. //권한 부여 코드
  24. public $code = null ;
  25. //액세스 토큰 갱신 인증서
  26. public $refreshToken = null;
  27. //액세스 토큰
  28. public $accessToken = null;
  29. / /액세스 토큰 유효성 기간(초)
  30. public $expiresIn = null;
  31. //state
  32. public $state = null;
  33. public $openid = null;
  34. / /construct
  35. 공개 함수 __construct($config=[])
  36. {
  37. foreach($config as $key => $value) {
  38. $this->$key = $value;
  39. }
  40. }
  41. /**
  42. * 코드를 얻기 위한 URL 가져오기
  43. * @throws InvalidArgumentException
  44. * @return string
  45. */
  46. 공개 함수 codeUrl()
  47. {
  48. if (!$this->redirectUri) {
  49. throw new Exception('매개변수 $redirectUri를 설정해야 합니다.');
  50. }
  51. $query = [
  52. 'response_type' => 'code',
  53. 'client_id' = > this->appid,
  54. 'redirect_uri' => $this->redirectUri,
  55. 'state' => $this->getState(),
  56. 'scope' = > this->scope,
  57. ];
  58. return self::PC_CODE_URL '?' .
  59. }
  60. /**
  61. * 取액세스 토큰
  62. * @throws 예외
  63. * @return 부울
  64. * /
  65. 공개 함수 getAccessToken()
  66. {
  67. $params = [
  68. 'grant_type' => 'authorization_code',
  69. 'client_id' => 🎜> 'client_secret' => $this->appKey,
  70. 'code' => $this->code,
  71. 'redirect_uri' => $this->redirectUri,
  72. ];
  73. $url = self::PC_ACCESS_TOKEN_URL . http_build_query($params);
  74. $content = $this->getUrl($url);
  75. parse_str ($content , $res);
  76. if ( !isset($res['access_token']) ) {
  77. $this->thrwoError($content);
  78. }
  79. $this- >accessToken = $res['access_token'];
  80. $this->expiresIn = $res['expires_in'];
  81. $this->refreshToken = $res['refresh_token'] ;
  82. true를 반환합니다.
  83. }
  84. /**
  85. * 刷새로운 액세스 토큰
  86. * @throws 예외
  87. * @return 부울
  88. */
  89. 공개 함수 RefreshToken()
  90. {
  91. $params = [
  92. 'grant_type' => 'refresh_token',
  93. 'client_id' => $this->appid,
  94. 'client_secret' => $this->appKey,
  95. 'refresh_token' => ->refreshToken,
  96. ];
  97. $url = self::PC_ACCESS_TOKEN_URL . http_build_query($params);
  98. $content = $this->getUrl( $url) ;
  99. pars_str($content, $res);
  100. if ( !isset($res['access_token']) ) {
  101. $this->thrwoError($content);
  102. }
  103. $this->accessToken = $res['access_token'];
  104. $this->expiresIn = $res['expires_in'];
  105. $this->refreshToken = $res ['refresh_token'];
  106. return true;
  107. }
  108. /**
  109. * 사용자 오픈 ID 가져오기
  110. * @return 문자열
  111. */
  112. 공용 함수 getOpenid()
  113. {
  114. $params = [
  115. 'access_token' => $this->accessToken,
  116. ];
  117. $url = self::OPEN_ID_URL
  118. $this->openid = $this->parseOpenid( $this->getUrl($url) );
  119. return $this->openid;
  120. }
  121. /**
  122. * URL 콘텐츠를 가져오는 get 메서드
  123. * @param string $url
  124. * @return 혼합
  125. */
  126. 공개 함수 getUrl($url)
  127. {
  128. $ch = 컬_init();
  129. 컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE) ; $response 반환;
  130. }
  131. /**
  132. * post방식 취급 url 내용
  133. * @param string $url
  134. * @param array $keysArr
  135. * @param number $flag
  136. * @return mixed
  137. */
  138. 공개 함수 postUrl($url, $keysArr, $flag = 0)
  139. {
  140. $ch = cur_init();
  141. if (! $flag) 컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  142. 컬_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  143. 컬_setopt($ch, CURLOPT_POST, TRUE);
  144. 컬_setopt($ch, CURLOPT_POSTFIELDS , $keysArr);
  145. 컬_setopt($ch, CURLOPT_URL, $url);
  146. $ret = 컬_exec($ch);
  147. 컬_close($ch);
  148. return $ret;
  149. }
  150. /**
  151. * 상태
  152. * @return 문자열
  153. */
  154. 보호 함수 getState()
  155. {
  156. $this->state = md5(uniqid(rand() , true));
  157. //state暂存在缓存里面
  158. //自己定义
  159. //。。。。。。。。
  160. return $this->state;
  161. }
  162. /**
  163. * 상태 확인
  164. * @return boolean
  165. */
  166. 보호 함수 verifyState()
  167. {
  168. //。。。。。。
  169. }
  170. /**
  171. * 예외 발생
  172. * @param string $error
  173. * @throws 예외
  174. */
  175. 보호 함수 thrwoError($error)
  176. {
  177. $subError = substr($error, strpos($error, "{"));
  178. $ subError = strstr($subError, "}", true) . "}";
  179. $error = json_decode($subError, true);
  180. throw new Exception($error['error_description'], (int)$error['error']);
  181. }
  182. /**
  183. * openid 인터페이스의 반환 데이터에서 openid
  184. 를 구문 분석합니다. * @param string $str
  185. * @return string
  186. */
  187. 보호 함수 parseOpenid($str)
  188. {
  189. $subStr = substr($str, strpos($str, "{") );
  190. $subStr = strstr($subStr, "}", true) . "}";
  191. $strArr = json_decode($subStr, true);
  192. if(!isset($strArr['openid'])) {
  193. $this->thrwoError($str);
  194. }
  195. return $strArr['openid'];
  196. }
  197. }
复system代码

以上所述就是本文의 전체 부서 内容了 ,希望大家能够喜欢。

互联, PHP


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.