2017-11-06 14 views
-1

私はtwitter autorization(OAuth)のためにPHPを使用しています。応答でユーザメールを取得できません。OAuth Twitter(Php)

define('ACCOUNT_EMAIL','https://api.twitter.com/1.1/account/verify_credentials.json'); 
$oauth_nonce = md5(uniqid(rand(), true)); 
$oauth_timestamp = time(); 

$oauth_token = $response['oauth_token']; 
$oauth_token_secret = $response['oauth_token_secret']; 
$screen_name = $response['screen_name']; 

//create oauth signature 
$params = array(
    'oauth_consumer_key=' . CONSUMER_KEY . URL_SEPARATOR, 
    'oauth_nonce=' . $oauth_nonce . URL_SEPARATOR, 
    'oauth_signature_method=HMAC-SHA1' . URL_SEPARATOR, 
    'oauth_timestamp=' . $oauth_timestamp . URL_SEPARATOR, 
    'oauth_token=' . $oauth_token . URL_SEPARATOR, 
    'oauth_version=1.0' . URL_SEPARATOR, 
    'screen_name=' . $screen_name, 
    //'include_email=true' 
); 
$oauth_base_text = 'GET' . URL_SEPARATOR . urlencode(ACCOUNT_EMAIL) . URL_SEPARATOR . implode('', array_map('urlencode', $params)); 

$key = CONSUMER_SECRET . '&' . $oauth_token_secret; 
$signature = base64_encode(hash_hmac("sha1", $oauth_base_text, $key, true)); 

// get userinfo 
$params = array(
    'oauth_consumer_key=' . CONSUMER_KEY, 
    'oauth_nonce=' . $oauth_nonce, 
    'oauth_signature=' . urlencode($signature), 
    'oauth_signature_method=HMAC-SHA1', 
    'oauth_timestamp=' . $oauth_timestamp, 
    'oauth_token=' . urlencode($oauth_token), 
    'oauth_version=1.0', 
    'screen_name=' . $screen_name, 
    //'include_email=true' 
); 

$url = ACCOUNT_EMAIL . '?' . implode(URL_SEPARATOR, $params); 
$response = file_get_contents($url); 
print_r($response); 

** include_email =真が開いているとき - 私は何も得ます。 include_email = trueのがブロックされると は - 。私は(メールなし)すべてのuserinfoを取得**

私の管理者プロファイルでは、私は、ユーザーから依頼メールアドレスを設定し、Twitterのサポートで特別許可のための情報を送信します。 キーも再生成します。 での問題は何ですか、それ&

+0

のfile_get_contentsは(あなたはおそらく人間が読めるエラーメッセージを見つけるでした)、ケースにはHTTPステータスコードがエラーを示す最後のURLの図です。それを回避する方法(ストリームコンテキストを渡す方法)を調べたり、エラーが発生した場合に自動的にレスポンスボディを保持しないリクエスト(cURLなど)を使用してください。 – CBroe

答えて

0

cURLの

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curl, CURLOPT_HEADER, TRUE); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLINFO_HEADER_OUT, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($curl); 
curl_close($curl); 
print_r($result); 

1電子メールのない道

url = https://api.twitter.com/1.1/account/verify_credentials.json?oauth_consumer_key=XXXXXXXX&oauth_nonce=XXXXXX&oauth_signature=XXXXX&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1509963372&oauth_token=XXXXXX&oauth_version=1.0&screen_name=ssds 

結果 = HTTP/1.1 200 OK +すべてのフィールドを追加します

2道

url = https://api.twitter.com/1.1/account/verify_credentials.json?oauth_consumer_key=XXXXXXXX&oauth_nonce=XXXXXX&oauth_signature=XXXXX&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1509963372&oauth_token=XXXXXX&oauth_version=1.0&screen_name=ssds&include_email=true 

結果 = HTTP/1.1 401許可が必要+ { "エラー":[{ "コード":32、 "メッセージ": "あなたの認証ができませんでした。"}]}

2つの方法は電子メールで動作しません。

0

私はこの問題を解決してメールを受け取っています!

これはレスポンスボディを破棄します

define('ACCOUNT_EMAIL','https://api.twitter.com/1.1/account/verify_credentials.json'); 

curl_setopt($curl, CURLOPT_URL, ACCOUNT_EMAIL . '?include_email=true&screen_name='.$screen_name);