杭州神话信息技术有限公司

标题: QQ php简略版oauth requst_token 代码 获取第一步oauth_token [打印本页]

作者: wogoule.com    时间: 2011-4-27 13:59:12     标题: QQ php简略版oauth requst_token 代码 获取第一步oauth_token

<?php
include_once( 'weibooauth.php' );//该代码的引用请下载sina的php SDK源代码  里面有附带  地址是http://open.t.sina.com.cn/wiki/index.php/SDK  我用了其中一个OAuthUtil::parse_parameters静态方法,主要作用是用来解析从服务端返回的字串 (requst_token),将字串变成数组
//参数排列
$key='你申请的key';
$secret='你申请的secret';
$base_string;
$callback_url='http://www.monoob.com/qq/callback.php';
$authorize_url='https://open.t.qq.com/cgi-bin/authorize';
$request_url='https://open.t.qq.com/cgi-bin/request_token';
$request_url_http;
$oauth_callback='http://www.monoob.com/qq/qq.php';
$oauth_consumer_key;
$oauth_nonce;
$oauth_signature;
$oauth_signature_method='HMAC-SHA1';
$oauth_timestamp;
$oauth_version='1.0';


//方法
function generate_nonce(){
    $mt = microtime();
    $rand = mt_rand();
    return md5($mt . $rand);
}
$oauth_nonce = generate_nonce();

function generate_timestamp(){
    return time();
}
$oauth_timestamp = generate_timestamp();

function generate_base_string(){
    global $request_url;
    global $oauth_callback;
    global $key;
    global $oauth_nonce;
    global $oauth_signature_method;
    global $oauth_timestamp;
    global $oauth_version;
    $str .= 'GET&';
    $str .= urlencode($request_url);
    $str .= '&';
    $str1 .= 'oauth_callback';
    $str1 .= '%3D';
    $str1 .= urlencode(urlencode($oauth_callback));//特别注意  我在这里头大了两天  这里需要对url处理两次
    $str1 .= '%26';
    $str1 .= 'oauth_consumer_key';
    $str1 .= '%3D';
    $str1 .= urlencode($key);
    $str1 .= '%26';
    $str1 .= 'oauth_nonce';
    $str1 .= '%3D';
    $str1 .= urlencode($oauth_nonce);
    $str1 .= '%26';
    $str1 .= 'oauth_signature_method';
    $str1 .= '%3D';
    $str1 .= urlencode($oauth_signature_method);
    $str1 .= '%26';
    $str1 .= 'oauth_timestamp';
    $str1 .= '%3D';
    $str1 .= urlencode($oauth_timestamp);
    $str1 .= '%26';
    $str1 .= 'oauth_version';
    $str1 .= '%3D';
    $str1 .= urlencode($oauth_version);
    $str .= $str1;
    return $str;
}
$base_string = generate_base_string();
//print_r($base_string);
$secret1=$secret.'&';
$oauth_signature = base64_encode(hash_hmac('sha1', $base_string, $secret1, true));
//print_r($oauth_signature);
$request_url_http .= $request_url;
$request_url_http .= '?';
$request_url_http .= 'oauth_callback';
$request_url_http .= '=';
$request_url_http .= urlencode($oauth_callback);
$request_url_http .= '&';
$request_url_http .= 'oauth_consumer_key';
$request_url_http .= '=';
$request_url_http .= $key;
$request_url_http .= '&';
$request_url_http .= 'oauth_nonce';
$request_url_http .= '=';
$request_url_http .= $oauth_nonce;
$request_url_http .= '&';
$request_url_http .= 'oauth_signature';
$request_url_http .= '=';
$request_url_http .= urlencode($oauth_signature);
$request_url_http .= '&';
$request_url_http .= 'oauth_signature_method';
$request_url_http .= '=';
$request_url_http .= $oauth_signature_method;
$request_url_http .= '&';
$request_url_http .= 'oauth_timestamp';
$request_url_http .= '=';
$request_url_http .= $oauth_timestamp;
$request_url_http .= '&';
$request_url_http .= 'oauth_version';
$request_url_http .= '=';
$request_url_http .= $oauth_version;
//print_r($request_url_http);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request_url_http);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
$token = OAuthUtil::parse_parameters( $output); //请求的第一步已然完成,这么简略的代码,没有什么复杂的类,如果你还看不懂,那我也没办法了,这个是我自己尝试写出来的,对php还处于入门阶段

作者: agag    时间: 2011-4-27 15:22:32

学习一下。谢谢 分享 。
作者: cnexpo001    时间: 2011-4-27 15:56:36

谢谢 分享 。
作者: mapleaf    时间: 2011-4-28 16:26:32

不错哦 有一些人碰到这问题了咧。
作者: 字典啦    时间: 2011-4-29 11:54:04

帮你定了呀 哈哈
作者: chibang    时间: 2011-4-29 11:55:24

我不懂PHp。




欢迎光临 杭州神话信息技术有限公司 (http://cenwor.com/) Powered by Discuz! X2