ホームページ  >  記事  >  バックエンド開発  >  Sina、Tencent、Taobao のログインを実装するための PHP コード

Sina、Tencent、Taobao のログインを実装するための PHP コード

WBOY
WBOYオリジナル
2016-07-25 08:56:181073ブラウズ
  1. session_start();

  2. class openlogin{
  3. public $_URL = "";
  4. public $config = array();

  5. $this->openlogin();
  6. }
  7. function openlogin(){

  8. }

  9. /*获取登陆页面URL*/

  10. public function login_url(){
  11. if(empty($this->config)){
  12. return false;
  13. }
  14. $config = $this->config;
  15. $login_url = $config['login_url'];
  16. $_SESSION['state'] = $state = md5(uniqid(rand(), TRUE));
  17. $array = array(
  18. "response_type"=>"code",
  19. "state" => $state,
  20. "client_id"=>$config['appkey'],
  21. "redirect_uri"=>urlencode ( $config['redirect_uri'] )
  22. );

  23. $this->set($array);

  24. $url = $this->combineURL($login_url , $this->_param);
  25. if($url){
  26. @header("場所:".$ url);
  27. }else{
  28. return false;
  29. }
  30. }

  31. /*获取access_token*/

  32. public function get_access_token(){
  33. if(empty($this->config)){
  34. return false;
  35. }

  36. $config = $this->config;

  37. if(! $config['code'] = $_REQUEST['code'] ){

  38. return false;
  39. }

  40. $url = $config['authorization_url'];

  41. $state = $_SESSION['state'];
  42. $array = array(
  43. "grant_type"=>"authorization_code",
  44. "client_id" => $config[ 'appkey'],
  45. "client_secret"=>$config['appsecret'],
  46. "code"=>$config['code'],
  47. "redirect_uri"=>urlencode( $config['redirect_uri' ] ),
  48. "state"=>$state
  49. );
  50. $this->set($array);
  51. return $this->post_contents($url);
  52. }
  53. /* set $ this->_param 数组*/
  54. public function set($array) {
  55. if(empty($array)){
  56. return false;
  57. }
  58. $this->_param = array();
  59. foreach($array as $name=>$value){
  60. $this->_param[$name] = $value;
  61. }
  62. }
  63. /**
  64. * post_contents
  65. * サーバーは投稿リクエストを通じてコン​​テンツを取得します
  66. * @param string $url リクエストされた URL、結合されます
  67. * @return string リクエストによって返されたコンテンツ
  68. */
  69. public function post_contents($url){
  70. if( empty($url)){
  71. return false;
  72. }
  73. $param = $this->combineURL("" , $this->_param);
  74. $ch =curl_init();
  75. // 設置URLと相应的選択
  76. curl_setopt($ch, CURLOPT_URL, $url);
  77. curl_setopt($ch、CURLOPT_FAILONERROR、false);
  78. curl_setopt($ch、CURLOPT_RETURNTRANSFER、true);
  79. curl_setopt($ch、CURLOPT_SSL_VERIFYPEER、0);
  80. curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
  81. curl_setopt($ch, CURLOPT_POST, 1);
  82. curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
  83. // 抓取URL并ハンドル它传递给浏览器
  84. $response =curl_exec($ch);
  85. curl_close($ch);
  86. return $response;
  87. }
  88. /**
  89. * get_contents
  90. * サーバーは get リクエストを通じてコン​​テンツを取得します
  91. * @param string $url リクエストされた URL、結合されます
  92. * @return string リクエストによって返されたコンテンツ
  93. */
  94. public function get_contents($url){
  95. $ch =curl_init();
  96. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  97. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  98. curl_setopt($ch, CURLOPT_URL, $url);
  99. $response =curl_exec($ch);
  100. curl_close($ch);

  101. //----------请求は空

  102. if(empty($response)){
  103. return false;
  104. }

  105. return $response;

  106. }

  107. /**

  108. * combinURL
  109. * splice url
  110. * @param string $baseURL based on url
  111. * @param array $keysArr パラメータリスト配列
  112. * @return string 結合された URL を返します
  113. */
  114. public function combinURL($baseURL,$keysArr){
  115. if( $baseURL=="" ){
  116. $combined = "";
  117. }else{
  118. $combined = $baseURL." ?";
  119. }
  120. $valueArr = array();

  121. foreach($keysArr as $key => $val){

  122. $valueArr[] = "$key=$val";
  123. }

  124. $keyStr = implode("&",$valueArr);

  125. $combined .= ($keyStr);
  126. return $combined;
  127. }
  128. }

  129. //php实现QQ登录

  130. class qq_openlogin extends openlogin{
  131. private $openname = "qq";
  132. public $config = array(
  133. "appkey"=>"あなたの appkey",
  134. "appsecret"=>"あなたの appsecret",
  135. "redirect_uri" =>"XXXXX",
  136. "login_url" => "https://graph.qq.com/oauth2.0/authorize",
  137. "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,
  138. get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,get_tenpay_addr",
  139. "authorization_url"=>"https://graph.qq.com/ oauth2.0/token"
  140. );

  141. function __construct()

  142. {
  143. $this->qq_openlogin();
  144. }
  145. function qq_openlogin(){
  146. parent::__construct();
  147. }

  148. function get_access_token(){

  149. $response =parent::get_access_token();
  150. /*检测错误が発生したかどうか*/
  151. if(strpos($response, "callback") !== false){

  152. $lpos = strpos($response, "(");

  153. $rpos = strrpos($response, ")");
  154. $response = substr($response, $lpos + 1, $rpos - $lpos -1);
  155. $msg = json_decode($response);

  156. if(isset($msg->error)){

  157. return false;
  158. }
  159. }

  160. $params = array();

  161. parse_str($response, $params);
  162. /*access_token == $params[access_token]*/
  163. /*获取openid */
  164. $response = $this->get_contents(" https://graph.qq.com/oauth2.0/me?access_token=".$params['access_token']);

  165. //--------检测错误が発生したかどうか

  166. if(strpos($response, "callback") !== false){

  167. $lpos = strpos($response, "(");

  168. $rpos = strrpos($response, ")");
  169. $response = substr($response, $lpos + 1, $rpos - $lpos -1);
  170. }

  171. $user = json_decode($response);

  172. if(isset($user->error)){
  173. return false;
  174. }

  175. /*

  176. ユーザー情報の取得に必要なパラメータ:openid(ユーザーのID、QQ番号と1対1対応)、access_token(Access_TokenはAuthorization_Codeを使用して取得可能、またはaccess_tokenに有効性がある) 3ヶ月の期間 ),oauth_consumer_key(user appid),format(戻り形式)
  177. */
  178. /*データベース保存*/
  179. $open_param = array(
  180. "openid"=>$user->openid,
  181. " access_token"=> ;$params['access_token']
  182. );
  183. //
  184. $open_param['oauth_consumer_key'] = $this->config['appkey'];
  185. $open_param['format'] = "json ";
  186. / *URL を結合*/
  187. $get_user_url = $this->combineURL("https://graph.qq.com/user/get_user_info",$open_param);
  188. //ユーザー情報を取得します
  189. $userinfo = $this-> ;get_contents($get_user_url);

  190. $userinfo = json_decode($userinfo);

  191. /p>

  192. //php は Weibo ログインを実装します

  193. class weibo_openlogin extends openlogin{
  194. private $openname = "weibo";
  195. public $config = array(
  196. "appkey"=>"your appkey",
  197. " appsecret"= >"あなたのappsecret",
  198. "login_url" => "https://api.weibo.com/oauth2/authorize",
  199. "redirect_uri"=>"XXXXXXX",
  200. "authorization_url"=> ;"https://api.weibo.com/oauth2/access_token"
  201. );

  202. 関数 __construct()

  203. {
  204. $this->qq_openlogin();
  205. }
  206. 関数qq_openlogin() {
  207. parent::__construct();
  208. }

  209. function get_access_token(){

  210. $response =parent::get_access_token();
  211. $userinfo = json_decode($response);
  212. return $ userinfo;
  213. }
  214. }

  215. //phpは淘宝ログインを実装します

  216. class taobao_openlogin extends openlogin{
  217. private $openname = "taobao";
  218. public $config = array(
  219. "appkey "=> ;"あなたのアプリキー",
  220. "appsecret"=>"あなたのアプリシークレット",
  221. "redirect_uri"=>"XXXXX",
  222. "authorization_url"=>"https://oauth.taabao.com/トークン",
  223. "login_url"=>"https://oauth.taabao.com/authorize"
  224. );

  225. function __construct()

  226. {
  227. $this->qq_openlogin( );
  228. }
  229. function qq_openlogin(){
  230. parent::__construct();
  231. }

  232. function get_access_token(){

  233. $response =parent::get_access_token();
  234. $userinfo = json_decode( $response);
  235. return $userinfo;
  236. }

  237. }

  238. if($_GET['openname']){
  239. $openname = $_GET['openname']。" _openlogin";
  240. $openlogin = new $openname();
  241. if(!isset($_REQUEST['code'])){
  242. //リクエスト URL
  243. $url = $openlogin->login_url();
  244. if( !$url ){
  245. echo "0";
  246. exit();
  247. }
  248. }else{
  249. if(isset($_REQUEST["state"]) && ($_SESSION['state'] != $_REQUEST[" state"] )){
  250. echo "1";
  251. exit();
  252. }
  253. $rs = $openlogin->get_access_token();
  254. print_r( $rs );
  255. }
  256. }
  257. ?>< /p>
コードをコピー

附、人人网登陆番号。

  1. class renren_openlogin extends openlogin{

  2. private $openname = "renren";
  3. public $config = array(
  4. "appid"=>"あなたの appid",
  5. "appkey"=>"あなたのアプリキー",
  6. "appsecret"=>"あなたの秘密鍵",
  7. "redirect_uri"=>"XXXXXX",
  8. "authorization_url"=>"https://graph.renren .com/oauth/token",
  9. "login_url"=>"https://graph.renren.com/oauth/authorize"
  10. );

  11. function __construct()

  12. {
  13. $this->qq_openlogin();
  14. }
  15. function qq_openlogin(){
  16. parent::__construct();
  17. }

  18. function get_access_token(){

  19. $response =parent::get_access_token();

  20. $userinfo = json_decode($response);

  21. return $userinfo;

  22. /*
  23. access_token:取得するアクセス トークン;
  24. expires_in:アクセス トークンの有効期間、秒は数秒;
  25. fresh_token:刷新アクセス トークンのリフレッシュ トークン、长期有效、不会期;
  26. スコープ:アクセス トークンの最終的なアクセス制限は、ユーザーに与えられる制限リストです (ユーザーは許可画面にいるときに、特定の要求の制限を無効にする可能性があります)。
  27. /*获取登陆页面URL*/

  28. public function login_url(){
  29. if(empty($this->config)){
  30. return false;
  31. }
  32. $config = $this->config;
  33. $login_url = $config['login_url'];
  34. $array = array(
  35. "response_type"=>"code",
  36. "client_id"=> $config['appid'],
  37. "redirect_uri"=>urlencode( $config['redirect_uri'] )
  38. );

  39. $this->set($array);

  40. $url = $this->combineURL($login_url , $this->_param);

  41. if($url){

  42. @header("Location:".$url);
  43. }else{
  44. return false;
  45. }
  46. }
  47. }

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