【问题标题】:Get email on OAuth Twitter (Php)在 OAuth Twitter (Php) 上获取电子邮件
【发布时间】:2018-04-18 08:50:33
【问题描述】:

我将 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 支持的特殊权限。 也重新生成密钥。 有什么问题&

【问题讨论】:

  • file_get_contents 将丢弃响应正文(如果您可能会发现人类可读的错误消息),以防 HTTP 状态代码指示错误。去研究如何避免这种情况(涉及在流上下文中传递),或者使用其他东西来发出请求(例如 cURL),这样在发生错误时不会自动保留响应正文。

标签: php email twitter oauth


【解决方案1】:

添加卷曲

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

一种方式

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":"Could not authenticate you."}]}

电子邮件的两种方式不起作用。

【讨论】:

  • 有人能从这个 api 调用中获得电子邮件吗?我遇到了与上面提到的相同的问题
【解决方案2】:

我解决了这个问题并收到了电子邮件!

这是最后一个 url 的视图

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

【讨论】:

    猜你喜欢
    • 2016-01-22
    • 2016-12-09
    • 2012-01-31
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 2019-12-22
    • 2017-08-12
    相关资源
    最近更新 更多