在 OAuth Twitter (Php) 上获取电子邮件

问题描述 投票:0回答:3

我使用 Php 进行 twitter 授权(OAuth)。无法收到用户电子邮件回复。

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=true 打开时 - 我什么也得不到。include_email=true 被阻止时 - 我得到所有用户信息(没有电子邮件)。**

在我的管理员配置文件中,我设置了向用户请求电子邮件地址并发送信息以获得 Twitter 支持中的特殊许可。 也重新生成密钥。 有什么问题吗&

php email twitter oauth
3个回答
0
投票

添加卷曲

$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 需要授权 + {"errors":[{"code":32,"message":"无法验证您的身份。"}]}

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);

0
投票

{METHOD}&{URL_WITHOUT_QUERY_PARAMS}&{OTHER_PARAMS}

创建签名时,GET 查询参数不能是

{URL_WITHOUT_QUERY_PARAMS}
的一部分,而是作为
{OTHER_PARAMS}
的一部分。请注意,
{OTHER_PARAMS}
必须按字母顺序排序。

https://oauth.net/core/1.0a/

附录 A.5.1。生成签名基字符串

要生成签名,首先需要生成签名基字符串。该请求包含以下参数(不包括 oauth_signature),这些参数被排序并连接成规范化字符串:

oauth_consumer_key: dpf43f3p2l4k3l03 oauth_令牌: nnch734d00sl2jdk oauth_signature_method: HMAC-SHA1 oauth_时间戳: 1191242096 oauth_nonce: kllo9940pd9333jh oauth_版本: 1.0 文件: 假期.jpg 尺寸: 原来的 以下输入用于生成签名基字符串:

1.)

获取

2.)

http://photos.example.net/photos

3.) file=vacation.jpg&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_nonce=kllo9940pd9333jh&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1191242096&oauth_token=nnch734d00sl2jdk&oauth _版本=1.0&大小=原始

签名基串是:

GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal

© www.soinside.com 2019 - 2024. All rights reserved.