Skip to content

Instantly share code, notes, and snippets.

@jy00295005
Created June 9, 2013 14:18
Show Gist options
  • Save jy00295005/5743714 to your computer and use it in GitHub Desktop.
Save jy00295005/5743714 to your computer and use it in GitHub Desktop.
a oauth client based on codeigniter PHP
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* strategy_sauth.php
*
* A Oauth client
*
* @author Chen Ting
* @copyright free to use
* @link
* @since Version 0.0.1
* @filesource
*/
class Strategy_oauth
{
//defaults 全局变量
var $app_id = "YOU APPID" ;
var $app_secret = "YOU APP SECRET" ;
var $redirect_url = "YOU REDIRECT URL";
var $grant_type = "authorization_code";
var $post_token_url = "ACCESS TOKEN REQUEST URL";
var $post_user_url = "ACCESS USER DATA REQUEST";
//post request
private function post_my_curl($curlPost,$post_url)
{
$ch = curl_init();//初始化curl
curl_setopt($ch,CURLOPT_URL,$post_url);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//运行curl
curl_close($ch);
return $data;
}
//使用code交换token
public function get_oauth_token($code)
{
//local变量
$curlPost = 'client_id='.urlencode($this->app_id).
'&client_secret='.urlencode($this->app_secret).
'&redirect_uri='.urlencode($this->redirect_url).
'&code='.urlencode($code).
'&grant_type='.urlencode($this->grant_type).
'';
//获取令牌
$token_json = $this->post_my_curl($curlPost,$this->post_token_url);
$token_arr = json_decode($token_json,TRUE);
//检查是否有token返回值,没有弹出,有则使用token继续取用户数据
if (!$token_arr['access_token']) {
return FALSE; //登陆失败
} else {
$access_token = $token_arr['access_token'];
$curlPost = 'access_code='.urlencode($access_token).'';
$user_detail_json = $this->post_my_curl($curlPost,$this->post_user_url);
$user_detail_arr = json_decode($user_detail_json,TRUE);
if ($user_detail_arr['error'] == 1) {
return FALSE; //登陆失败
} else {
return $user_detail_arr;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment