/** * @brief 请求临时token.请求需经过URL编码,编码时请遵循 RFC 1738 * * @param $appid * @param $appkey * * @return 返回字符串格式为:oauth_token=xxx&oauth_token_secret=xxx */ function get_request_token($appid, $appkey) { //请求临时token的接口地址, 不要更改!! $url = "http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token?"; //生成oauth_signature签名值。签名值生成方法详见(http://wiki.opensns.qq.com/wiki/【QQ登录】签名参数oauth_signature的说明) //(1) 构造生成签名值的源串(HTTP请求方式 & urlencode(uri) & urlencode(a=x&b=y&...)) $sigstr = "GET" . "&" . rawurlencode("http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token") . "&"; //必要参数 $params = array(); $params["oauth_version"] = "1.0"; $params["oauth_signature_method"] = "HMAC-SHA1"; $params["oauth_timestamp"] = time(); $params["oauth_nonce"] = mt_rand(); $params["oauth_consumer_key"] = $appid; //对参数按照字母升序做序列化 $normalized_str = get_normalized_string($params); $sigstr .= rawurlencode($normalized_str); //(2)构造密钥 $key = $appkey . "&"; //(3)生成oauth_signature签名值。这里需要确保PHP版本支持hash_hmac函数 $signature = get_signature($sigstr, $key); //构造请求url $url .= $normalized_str . "&" . "oauth_signature=" . rawurlencode($signature); //echo "$sigstr\n"; //echo "$url\n"; //echo $url; return file_get_contents($url); }
/** * @brief 获取access_token。请求需经过URL编码,编码时请遵循 RFC 1738 * * @param $appid * @param $appkey * @param $request_token * @param $request_token_secret * @param $vericode * * @return 返回字符串格式为:oauth_token=xxx&oauth_token_secret=xxx&openid=xxx&oauth_signature=xxx&oauth_vericode=xxx×tamp=xxx */ function get_access_token($appid, $appkey, $request_token, $request_token_secret, $vericode) { global $global_arg; //请求具有Qzone访问权限的access_token的接口地址, 不要更改!! $url = "http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token?"; //生成oauth_signature签名值。签名值生成方法详见(http://wiki.opensns.qq.com/wiki/【QQ登录】签名参数oauth_signature的说明) //(1) 构造生成签名值的源串(HTTP请求方式 & urlencode(uri) & urlencode(a=x&b=y&...)) $sigstr = "GET" . "&" . QQConnect_urlencode("http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token") . "&"; //必要参数,不要随便更改!! $params = array(); $params["oauth_version"] = "1.0"; $params["oauth_signature_method"] = "HMAC-SHA1"; $params["oauth_timestamp"] = time(); $params["oauth_nonce"] = mt_rand(); $params["oauth_consumer_key"] = $appid; $params["oauth_token"] = $request_token; $params["oauth_vericode"] = $vericode; //对参数按照字母升序做序列化 $normalized_str = get_normalized_string($params); $sigstr .= QQConnect_urlencode($normalized_str); //echo "sigstr = $sigstr"; //(2)构造密钥 $key = $appkey . "&" . $request_token_secret; //(3)生成oauth_signature签名值。这里需要确保PHP版本支持hash_hmac函数 $signature = get_signature($sigstr, $key); //构造请求url $url .= $normalized_str . "&" . "oauth_signature=" . QQConnect_urlencode($signature); $global_arg = $url; return file_get_contents($url); }
/** * @brief 所有post 请求都可以使用这个方法 * * @param $url * @param $appid * @param $appkey * @param $access_token * @param $access_token_secret * @param $openid * */ function do_post($url, $appid, $appkey, $access_token, $access_token_secret, $openid) { //构造签名串.源串:方法[GET|POST]&uri&参数按照字母升序排列 $sigstr = "POST" . "&" . rawurlencode($url) . "&"; //必要参数,不要随便更改!! $params = $_POST; $params["oauth_version"] = "1.0"; $params["oauth_signature_method"] = "HMAC-SHA1"; $params["oauth_timestamp"] = time(); $params["oauth_nonce"] = mt_rand(); $params["oauth_consumer_key"] = $appid; $params["oauth_token"] = $access_token; $params["openid"] = $openid; unset($params["oauth_signature"]); //对参数按照字母升序做序列化 $sigstr .= rawurlencode(get_normalized_string($params)); //签名,需要确保php版本支持hash_hmac函数 $key = $appkey . "&" . $access_token_secret; $signature = get_signature($sigstr, $key); $params["oauth_signature"] = $signature; $postdata = get_urlencode_string($params); //echo "$sigstr******\n"; //echo "$postdata\n"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch, CURLOPT_URL, $url); $ret = curl_exec($ch); curl_close($ch); return $ret; }
/** * @brief get a request token by appid and appkey * rfc1738 urlencode * @param $appid * @param $appkey * * @return a string, the format as follow: * oauth_token=xxx&oauth_token_secret=xxx */ function get_request_token($appid, $appkey) { //获取request token接口, 不要随便更改!! $url = "http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token?"; //构造签名串.源串:方法[GET|POST]&uri&参数按照字母升序排列 $sigstr = "GET" . "&" . rawurlencode("http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token") . "&"; //必要参数,不要随便更改!! $params = array(); $params["oauth_version"] = "1.0"; $params["oauth_signature_method"] = "HMAC-SHA1"; $params["oauth_timestamp"] = time(); $params["oauth_nonce"] = mt_rand(); $params["oauth_consumer_key"] = $appid; //对参数按照字母升序做序列化 $normalized_str = get_normalized_string($params); $sigstr .= rawurlencode($normalized_str); //签名,需要确保php版本支持hash_hmac函数 $key = $appkey . "&"; $signature = get_signature($sigstr, $key); //构造请求url $url .= $normalized_str . "&" . "oauth_signature=" . rawurlencode($signature); //echo "$sigstr\n"; //echo "$url\n"; return file_get_contents($url); }