使用新浪微博API的OAuth认证发布微博实例

继续前面的文章《新浪微博OAuth认证和储存的主要过程详解》,现在我们就使用它来发布微博。

1.打开open.qq.com   添加创建应用:-》输入常规的数据  你会看到对应的APP
ID和KEY值,这是对你身份证的唯一的验证

我们已经将用户新浪微博的oauth_token和oauth_secret保存到

2.打开  
点击->添加网站->输入相关信息 
这里比较特别注意的是,回调地址那里填上你域名就可以了以上申核需要一到两天时间,耐心等待。。。

$_SESSION[‘oauth_token’]=$result[‘oauth_token’];
$_SESSION[‘oauth_secret’]=$result[‘oauth_secret’];

3.打开

SDK包,如果你的虚拟空间file_get_contents不技持https,可以考虑用curl函数来替代,好多童鞋常常因为获取不到access_token也就是这个原因。任何一个包不是一气呵成了,还需你配置相关的配置,这个繁索的调试过程我就在这里展开谈了。说说原理->通过你的网站登陆QQ
state和scope->获得access_token->再获得每个QQ唯一的身份ID  openid

里面,现在要做的就很简单了··就是调用sinaOauth的类进行发布。。

4.在这里你调试成功后,获得ID后,还需和你当前网站帐号绑定,才能下次登陆的时候自动去识别你的相关绑定帐号内容

代码如下:

常见问题:

//Statuses/update
$c = new WeiboClient( WB_AKEY , 
           WB_SKEY , 
           $_SESSION['last_key']['oauth_token'] , 
           $_SESSION['last_key']['oauth_token_secret'] );

$msg = $c->update("测试发表微博");
if ($msg === false || $msg === null){
  echo "Error occured";
  return false;
}
if (isset($msg['error_code']) && isset($msg['error'])){
  echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] );
  return false;
} 
echo($msg['id']." : ".iconv('UTF-8', 'GB2312',
$msg['text'])." - ".$msg["created_at"]);

1.Warning: session_start() [function.session-start]:
open(/tmpsess_s9b1ahi6vnvc0pfl2e0dcd0l10, O_RDWR) failed: 解决方法:No
such file or directory (2)
inD:powhostbbcarblogwebtestqqSDKcommsession.php on line 196

这样最简单的就OK了····

找到sssion.php
session_save_path 
加上注释//,注释掉设置路径

以上所述就是本文的全部内容了,希望大家能够喜欢。

2.Notice: file_get_contents() [function.file-get-contents]: Unable
to find the wrapper “https” – did you forget to enable it when you
configured PHP? inD:powhostbbcarblogwebtestqqSDKcommutils.php on line 37

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

解决方法:

找到 Utils.php  function get_url_contents
函数内容直接用下面代码替代,因为file_get_content默认不支持访问https,如果要支持需配置php.ini,激活
php_openssl.dll 模块,这个大家百度配置一下便可

php代码

 代码如下

$ch = curl_init();   
curl_setopt($ch,
CURLOPT_URL,$url);   
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);   
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
$result = curl_exec($ch);   
return $result

下面是一个完整的实例

下面是一个QQ登录API示范接口。程序为PHP、具体代码如下:

 代码如下

<?php /** 
* 申请 
* 列表 
*/ 
session_start();  
$qq_oauth_config = array(  
    ‘oauth_consumer_key’=>’*******’,//APP ID  
   
‘oauth_consumer_secret’=>’******************’,//APP
KEY  
   
‘oauth_callback’=>”  
   
‘oauth_request_token_url’=>””,  
   
‘oauth_authorize_url’=>”,  
   
‘oauth_request_access_token_url’=>”,  
    ‘user_info_url’ =>
”,  
);  
$action = isset($_GET[‘action’]) ? $_GET[‘action’] : ”;  
 
 
$qq = new qq_oauth($qq_oauth_config);  
switch($action){  
    //用户登录 Step1:请求临时token  
    case ‘login’:  
        $token = $qq->oauth_request_token();  
        $_SESSION[‘oauth_token_secret’] =
$token[‘oauth_token_secret’];  
        $qq->authorize($token[‘oauth_token’]);  
    break;  
    //Step4:Qzone引导用户跳转到第三方应用  
    case ‘reg’:  
        $qq->register_user();  
        $access_token = $qq->request_access_token();  
        if($token = $qq->save_access_token($access_token)){  
            //保存,一般发给用户cookie,以及用户入库  
            //var_dump($token);  
            $_SESSION[‘oauth_token’] = $token[‘oauth_token’];  
            $_SESSION[‘oauth_token_secret’] =
$token[‘oauth_token_secret’];  
            $_SESSION[‘openid’] = $token[‘openid’];  
            header(‘Content-Type: text/html; charset=utf-8’);  
            $user_info = json_decode($qq->get_user_info());  
            if($user_info->ret!=0){  
                exit(“获取头像昵称时发生错误”.$user_info->msg);  
            } else {  
                echo ‘QQ昵称:’,$user_info->nickname,  
                ‘<img src=”‘,$user_info->figureurl,'” />’,  
                ‘<img src=”‘,$user_info->figureurl_1,'”
/>’,  
                ‘<img src=”‘,$user_info->figureurl_2,'”
/>’;  
            }  
              
        }  
    break;  
    default :  
}  
 
 
class qq_oauth{  
    private $config;  
    function __construct($config){  
        $this->config = $config;  
    }  
    /** 
     * 返回配置 
     * @param string $name 
     *  
     */ 
    function C($name){  
        return isset($this->config[$name]) ? 
$this->config[$name] : FALSE;  
    }  
    /** 
     * 构建请求URL 
     * @param string $url 
     * @param array $params 
     * @param string $oauth_token_secret 
     *  
     */ 
    function
build_request_uri($url,$params=array(),$oauth_token_secret=”){  
        $oauth_consumer_key = $this->C(‘oauth_consumer_key’);  
        $oauth_consumer_secret =
$this->C(‘oauth_consumer_secret’);  
          
        $params = array_merge(array(  
            ‘oauth_version’=>’1.0’,  
            ‘oauth_signature_method’=>’HMAC-SHA1’,  
            ‘oauth_timestamp’=>time(),  
            ‘oauth_nonce’=>rand(1000,99999999),  
            ‘oauth_consumer_key’=>$oauth_consumer_key,  
        ),$params);  
        $encode_params = $params;  
        ksort($encode_params);  
        $oauth_signature =
‘GET&’.urlencode($url).’&’.urlencode(http_build_query($encode_params));  
        $oauth_signature =
base64_encode(hash_hmac(‘sha1′,$oauth_signature,$oauth_consumer_secret.’&’.$oauth_token_secret,true));  
        $params[‘oauth_signature’] = $oauth_signature;  
        return $url.’?’.http_build_query($params);  
    }  
    /** 
     * 校验回调是否返回约定的参数  
     */ 
    function check_callback(){  
        if(isset($_GET[‘oauth_token’]))  
            if(isset($_GET[‘openid’]))  
                if(isset($_GET[‘oauth_signature’]))  
                    if(isset($_GET[‘timestamp’]))  
                        if(isset($_GET[‘oauth_vericode’]))  
                            return true;  
        return false;  
    }  
     
    function get_contents($url){  
        $curl = curl_init();  
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);  
        curl_setopt($curl,CURLOPT_URL,$url);  
        return curl_exec($curl);  
    }  
    /** 
     * Step1:请求临时token、Step2:生成未授权的临时token 
     */ 
    function oauth_request_token(){  
        $url =
$this->build_request_uri($this->C(‘oauth_request_token_url’));  
        $tmp_oauth_token = $this->get_contents($url);  
        parse_str($tmp_oauth_token);  
        /* 
        oauth_token 未授权的临时token 
        oauth_token_secret  token的密钥,该密钥仅限于临时token 
        error_code  错误码 
        */ 
        if(isset($error_code)) exit($error_code);  
        return array(  
            ‘oauth_token’=>$oauth_token,  
            ‘oauth_token_secret’=>$oauth_token_secret 
        );  
    }  
    /** 
     * Step3:引导用户到Qzone的登录页 
     * @param string $oauth_token 未授权的临时token 
     */ 
    function authorize($oauth_token){  
        $str = “HTTP/1.1 302 Found”;  
        header($str);  
        $url = $this->C(‘oauth_authorize_url’);  
        $query_strings = http_build_query(array(  
           
‘oauth_consumer_key’=>$this->C(‘oauth_consumer_key’),  
            ‘oauth_token’=>$oauth_token,  
            ‘oauth_callback’=>$this->C(‘oauth_callback’),  
        ));  
        header(‘Location: ‘.$url.’?’.$query_strings);  
    }  
    /** 
     * Step4:Qzone引导用户跳转到第三方应用 
     * @return bool 验证是否有效  
     */ 
    function register_user(){  
        /* 
         * oauth_token  已授权的临时token 
         * openid  
腾讯用户对外的统一ID,该OpenID与用户QQ号码一一对应 
         * oauth_signature 
签名值,方便第三方来验证openid以及来源的可靠性。 
         *      使用HMAC-SHA1算法: 
         *      源串:openid+timestamp(串中间不要添加’+’符号) 
         *      密钥:oauth_consumer_secret 
         * timestamp    openid的时间戳 
         * oauth_vericode  
授权验证码。 
         */ 
        if($this->check_callback()){  
            //校验签名  
            $signature =
base64_encode(hash_hmac(‘sha1’,$_GET[‘openid’].$_GET[‘timestamp’],$this->C(‘oauth_consumer_secret’),true));  
            if(!empty($_GET[‘oauth_signature’]) &&
$signature==$_GET[‘oauth_signature’]){  
                $_SESSION[‘oauth_token’] =
$_GET[‘oauth_token’];  
                $_SESSION[‘oauth_vericode’] =
$_GET[‘oauth_vericode’];  
                return;  
            }  
        }  
        //校验未通过  
        exit(‘UNKNOW REQUEST’);  
    }  
    /** 
     * Step5:请求access token  
     */ 
    function request_access_token(){  
        $url =
$this->build_request_uri($this->C(‘oauth_request_access_token_url’),array(  
            ‘oauth_token’=>$_SESSION[‘oauth_token’],  
            ‘oauth_vericode’=>$_SESSION[‘oauth_vericode’]  
        ),$_SESSION[‘oauth_token_secret’]);  
        return $this->get_contents($url);  
    }  
    /** 
     * Step6:生成access token (保存access token) 
     *  
     * 关于access_token 
     *
目前access_token(及其secret)是长期有效的,和某一个openid对应,目前可以支持线下获取该openid的信息。  
     *
当然,用户有权限在Qzone这边删除对第三方的授权,此时该access_token会失效,需要重新走整个流程让用户授权。 
     *
以后会逐步丰富access_token的有效性,长期有效、短期有效、用户登录时才有效等。 
     */ 
    function save_access_token($access_token_str){  
        parse_str($access_token_str,$access_token_arr);  
        if(isset($access_token_arr[‘error_code’])){  
            return FALSE;  
        } else {  
            return $access_token_arr;  
        }  
    }  
    /** 
     * 目前腾讯仅开放该API 
     * 获取登录用户信息,目前可获取用户昵称及头像信息。 
     *  
     */ 
    function get_user_info(){  
        $url =
$this->build_request_uri($this->C(‘user_info_url’),array(  
            ‘oauth_token’=>$_SESSION[‘oauth_token’],  
            ‘openid’=>$_SESSION[‘openid’],  
        ),$_SESSION[‘oauth_token_secret’]);  
        return $this->get_contents($url);  
    }  
}  

发表评论

电子邮件地址不会被公开。 必填项已用*标注