이 수업은 무엇에 사용될 수 있나요?
QQ 사용자 o인증 로그인
사용자 정보 가져오기
공유 추가
앨범 목록 가져오기
사진 앨범 만들기
사진 업로드
일기 올리기
댓글 달기
웨이보 올리기
인증공간 팬인지 확인하기 Weibo에 사진 메시지 게시
Weibo 사용자 정보 가져오기
사용자 청취자 목록 가져오기
사용자 청취 목록 가져오기
Tencent 사용자의 말 듣기 웨이보
获取财付는 일반적으로 사용되는 收货地址
- /**
- *
- * QQ 오픈 플랫폼 API
- * @author maojianlw@139.com
- * @since 2013-06-20
- * @link http://www.eaglephp.com
- *
- */
- class QQ
- {
-
- 비공개 $ appid = null;
-
- private $appkey = null;
-
- private $callbcak = null;
-
- private $APIMap = array();
-
- private $ keyArr = array();
-
- const VERSION = '2.0';
-
- const AUTH_CODE_URL = 'https://graph.qq.com/oauth2.0/authorize';
-
- const ACCESS_TOKEN_URL = 'https://graph.qq.com/oauth2.0/token';
-
- const OPENID_URL = 'https://graph.qq.com/oauth2.0/me';
-
- const SCOPE = 'get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,get_ten pay_addr' ;
-
-
-
- 공개 함수 __construct($appid, $appkey, $callbcak)
- {
- $this->appid = $appid;
- $this-> ;appkey = $appkey;
- $this->callbcak = $callbcak;
- }
-
-
- /**
- * 로그인
- */
- 공용 함수 로그인()
- {
- $state = md5(uniqid(rand(), true)); // 生成唯一随机串防CSRF攻击
- Session::set('state', $state);
- $keysArr = array(
- 'response_type' => 'code',
- ' client_id' => $this->appid,
- 'redirect_uri' => $this->callbcak,
- 'scope' => self::SCOPE,
- 'state' => ; $state
- );
- header('Location:'.self::AUTH_CODE_URL.'?'.http_build_query($keysArr));
- }
-
-
- /**
- *
- * 콜백 함수는 access_token 및 open_id를 반환합니다.
- *
- */
- 공개 함수 콜백()
- {
- $state = Session::get('state');
-
- // 验证state防止CSRF攻击
- if (HttpRequest::getGet('state') != $state) throw_Exception('상태가 일치하지 않습니다. CSRF의 피해자일 수 있습니다.');
- Session::set('state', null);
-
- $keysArr = array(
- 'grant_type' => 'authorization_code',
- 'client_id' => $this->appid,
- 'redirect_uri' => $ this->callbcak,
- 'client_secret' => $this->appkey,
- 'code' => HttpRequest::getGet('code')
- );
-
- $response =curlRequest(self::ACCESS_TOKEN_URL.'?'.http_build_query($keysArr));
- 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)) throw_Exception($msg->error.' '.$msg->error_description);
- }
-
- $params = array();
- parse_str($response, $params);
- Session::set('access_token', $params['access_token']);
-
- // 根据token请求获取openid
- $response =curlRequest(self::OPENID_URL.'?access_token='.$params['access_token']);
-
- if(strpos($ 응답, '콜백') !== false){
-
- $lpos = strpos($response, '(');
- $rpos = strrpos($response, ')');
- $response = substr($response, $lpos 1, $rpos - $lpos -1);
- }
-
- $user = json_decode($response);
- if(isset($user- >error)) throw_Exception($msg->error.' '.$msg->error_description);
- Session::set('open_id', $user->openid);
- 반환 배열 ('액세스 토큰' => $params['access_token'], 'open_id' => $user->openid);
- }
-
-
- /**
- *
- * 초기화 데이터
- *
- */
- 보호 함수 _initAPI()
- {
- $this->keysArr = array(
- 'oauth_consumer_key' => (int)$this->appid,
- 'access_token' => 세션::get('access_token'),
- 'openid' => 세션::get('open_id')
- );
-
- /**
- *
- * APIMap 초기화
- * 필요하지 않음을 나타내려면 #을 추가하세요. 그렇지 않으면 URL이 전달되지 않습니다(이 매개변수는 URL에 표시되지 않습니다). 'key' => 'val' 키가 정의되지 않은 경우를 의미합니다. 그런 다음 기본값을 사용합니다. val
- * rule array(baseUrl, argListArr, method)
- *
- * @var array
- */
-
- $this->APIMap = array(
- /* qzone */
- 'add_blog' => array(
- 'https://graph.qq.com/blog/add_one_blog',
- array('title', 'format' => 'json', 'content' => null),
- 'POST'
- ),
- 'add_topic' => array(
- 'https://graph.qq.com/shuoshuo/add_topic',
- array('richtype','richval' ,'con','#lbs_nm','#lbs_x','#lbs_y','format' => 'json', '#third_source'),
- 'POST'
- ),
- 'get_user_info' => 배열(
- 'https://graph.qq.com/user/get_user_info',
- 배열('형식' => 'json'),
- 'GET'
- ),
- 'add_one_blog' => array(
- 'https://graph.qq.com/blog/add_one_blog',
- array('title', 'content', 'format' => 'json'),
- 'GET '
- ),
- '앨범 추가' => array(
- 'https://graph.qq.com/photo/add_album',
- array('앨범 이름', '#albumdesc', '#priv', 'format' => 'json') ,
- '포스트'
- ),
- 'upload_pic' => array(
- 'https://graph.qq.com/photo/upload_pic',
- array('picture', '#photodesc', '#title', '#albumid', '#mobile', '#x', '#y', '#needfeed', '#successnum', '#picnum', 'format' => 'json'),
- 'POST'
- ),
- '목록_앨범' => array(
- 'https://graph.qq.com/photo/list_album',
- array('format' => 'json')
- ),
- 'add_share' => array(
- 'https://graph.qq.com/share/add_share',
- array('제목', 'url', '#comment','#summary','#images',' 형식' => 'json','#type','#playurl','#nswb','site','fromurl'),
- 'POST'
- ),
- 'check_page_fans' => array(
- 'https://graph.qq.com/user/check_page_fans',
- array('page_id' => '314416946','format' => 'json')
- ) ,
- /* wblog */
-
- 'add_t' => array(
- 'https://graph.qq.com/t/add_t',
- array('format' => 'json', 'content','#clientip','#longitude', '#호환플래그'),
- 'POST'
- ),
- 'add_pic_t' => array(
- 'https://graph.qq.com/t/add_pic_t',
- array('content', 'pic', 'format' => 'json', '#clientip', ' #경도', '#위도', '#syncflag', '# Compatiblefalg'),
- 'POST'
- ),
- 'del_t' => array(
- 'https://graph.qq.com/t/del_t',
- array('id', 'format' => 'json'),
- 'POST'
- ),
- 'get_repost_list' => array(
- 'https://graph.qq.com/t/get_repost_list',
- array('flag', 'rootid', 'pageflag', 'pagetime', 'reqnum', 'twitterid', '형식' => 'json')
- ),
- 'get_info' => array(
- 'https://graph.qq.com/user/get_info',
- array('format' => 'json')
- ),
- 'get_other_info' => array(
- 'https://graph.qq.com/user/get_other_info',
- array('format' => 'json', '#name', 'fopenid')
- ),
- 'get_fanslist' => array(
- 'https://graph.qq.com/relation/get_fanslist',
- array('format' => 'json', 'reqnum', 'startindex', '#mode', ' #install', '#sex')
- ),
- 'get_idollist' => array(
- 'https://graph.qq.com/relation/get_idollist',
- array('format' => 'json', 'reqnum', 'startindex', '#mode', ' #설치')
- ),
- 'add_idol' => array(
- 'https://graph.qq.com/relation/add_idol',
- array('format' => 'json', '#name-1', '#fopenids-1'),
- 'POST'
- ),
- 'del_idol' => array(
- 'https://graph.qq.com/relation/del_idol',
- array('format' => 'json', '#name-1', '#fopenid-1') ,
- 'POST'
- ),
- /* 지불 */
-
- 'get_tenpay_addr' => array(
- 'https://graph.qq.com/cft_info/get_tenpay_addr',
- array('ver' => 1,'limit' => 5,'offset' => 0, 'format' => 'json')
- )
- );
- }
-
-
- 보호 함수 _applyAPI($baseUrl, $argsList, $method)
- {
- $params = HttpRequest::getPost();
- $optionArgList = '';
- $keysArr = $this->keysArr;
- $pre = '#';
- foreach($ argsList as $k=>$v)
- {
- if(!is_string($k))
- {
- $k = $v;
- if(strpos($v, $ pre) === 0)
- {
- $v = $pre;
- $k = substr($k, 1);
- if(preg_match('/-(d$)/' , $k, $matchs))
- {
- $k = str_replace($matchs[0], '', $k);
- $optionArgList[$matchs[1]][] = $k ;
- }
- }
- else $v = null;
- }
- if(!isset($params[$k]) || $params[$k] === '' )
- {
- if($v == $pre) continue;
- elseif($v) $params[$k] = $v;
- else
- {
- if( isset($_FILES[$k]) && $_FILES[$k]['name']!='')
- {
- $uploadDir = getUploadAddr().'QQ'.__DS__;
- mk_dir ($uploadDir);
- $uploadObj = 새 Upload();
- $fileInfo = $uploadObj->uploadOne($_FILES[$k], $uploadDir);
- $img = $uploadDir.$ fileInfo[0]['savename'];
- $params[$k] = "@{$img}";
- }
- else throw_Exception("param {$k} 값이 전달되지 않습니다.") ;
- }
- }
- $keysArr[$k] = $params[$k];
- }
-
- // 检查选填参数必填一의 정형형
- $i = 0;
- if(isset($optionArgList[1]))
- {
- foreach ($optionArgList[1] as $k=>$v) if(array_key_exists($v, $keysArr)) $i ;
- if(!$i) throw_Exception('QQ_api_param_error,['.implode(' ,', $optionArgList[1]).'] 하나의 값이 있어야 합니다.');
- }
-
- $baseUrl .= ($method == 'GET') ? '?'.http_build_query($keysArr) : '';
- $response =curlRequest($baseUrl, $keysArr, $method);
- return json_decode($response, true);
- }
-
-
- 공개 함수 __call($name, $args)
- {
- $this->_initAPI();
- if(!array_key_exists($name, $this->APIMap) ) throw_Exception("QQ_api_{$name}이(가) 존재하지 않습니다.");
-
- //从APIMap获取api엇应参数
- $baseUrl = $this->APIMap[$name][0];
- $argsList = $this->APIMap[$name][1];
- $method = isset($this->APIMap[$name][2]) ? $this->APIMap[$name][2] : 'GET';
-
- $responseArr = $this->_applyAPI($baseUrl, $argsList, $method);
-
- //检查返回ret判断api是否成功调用
- if($responseArr['ret'] == 0) return $responseArr;
- else throw_Exception('QQ_API_'.$name.' [ret:'.$ responseArr['ret'].'] [errcode:'.$responseArr['errcode'].'] '.$responseArr['msg']);
- }
-
-
- }
-
复代码
|