我们能否从 Twitter OAuth API 中获取电子邮件地址?

57

如何获取接受我的Twitter应用程序的用户的电子邮件地址?

我浏览了很多论坛,但是它们都提到这是不可能的。此外,这些帖子已经超过一年了。请问是否可以使用PHP通过Twitter API获取用户电子邮件地址?

我正在使用以下URL获取Twitter用户详细信息:

https://api.twitter.com/1.1/account/verify_credentials.json


在这里,我将得到一个解决方案,也可以解决供应商提出的问题。即如何处理那种情况。 - Vinoth Babu
我在 Twitter 的文档中找不到它!只在 Twitter 社区论坛上找到了答案:https://twittercommunity.com/t/twitter-oauth-after-connect-get-primary-email-address/1563/11 - jonprasetyo
2
@PaulDessert 这个供应商的工作人员在一个公开的论坛上表示,他们实现了某些功能但没有记录下来。因此可以推断,例如那些开发该功能的人员,知道如何使用该功能,尽管它根本没有出现在 API 文档中。这些相同的人可能能够为像 Vinoth 这样的人提供他在其他地方找不到的帮助。 - jeteon
截至2017年1月7日,我创建的这个仓库可以正常工作,并向您展示了如何提取用户的电子邮件地址。https://github.com/DZuz14/CompleteSignInWithTwitterPHP - Dan Zuzevich
6个回答

100

现在可以通过填写表格申请提升权限来实现:

  1. 前往https://support.twitter.com/forms/platform
  2. 选择“我需要访问特殊权限”
  3. 输入应用名称和ID。这些信息可以在https://apps.twitter.com/获得 -- 应用程序ID是您单击应用后浏览器地址栏中的数字部分。
  4. 请求权限:"电子邮件地址"
  5. 提交并等待响应
  6. 获得授权后,Twitter应用程序的“权限”部分会添加一个附加的权限设置。进入“其他权限”并勾选“请求用户的电子邮件地址”复选框即可。

请注意,用户电子邮件地址必须经过验证,否则Twitter将拒绝提供它。(请参阅提升权限文档页面中的include_email参数描述。)


1
他们是否真的容易授予这个权限?还是只保留给已经成功的应用程序? - anges244
1
@anges244 看起来他们很容易授予许可,至少对于从未收到投诉的开发人员来说是如此。我的应用程序甚至还没有在线上运行,所以他们不可能已经查看过它。 - tremby
2
@aleemb,一旦您获得了权限,如何获取电子邮件地址?我使用此额外的权限授权了我的测试用户,但仍然无法在“users/show”响应中看到电子邮件地址。是否需要添加某些内容到请求中? - tremby
1
@tremby 我不确定,但我认为你需要调用 accounts/verify_credentials (https://dev.twitter.com/rest/reference/get/account/verify_credentials) 这个 API。 - anges244
2
我在 Twitter 开发者论坛(https://twittercommunity.com/t/email-not-being-returned-from-verify-credentials-yes-were-whitelisted/63443/2)上找到了答案。在 PHP 源代码中,我将参数列表指定为 array('include_email'=>true),这在 URL 中变成 include_email=1。我将源代码更改为 array('include_email'=>'true'),然后它开始工作了。多么奇怪的 API!在此 URL 的前面布尔参数的值 skip_status 被记录为“当设置为 true、t 或 1 时,状态将不会...”。但是 include_email 表示“当设置为 true 时,电子邮件将被返回”。 - sootsnoot
显示剩余7条评论

43

现在你可以从Twitter API中获取用户电子邮件地址,而且这变得更加容易了。只需按照以下步骤操作...

  1. 进入 Twitter Apps

  2. 点击“创建新应用程序”

  3. 填写所有必要的凭据,并点击“创建你的Twitter应用程序”

  4. 现在点击“权限”选项卡 -> 选中“请求用户的电子邮件地址”字段并单击“更新设置”。(参见下面的图片)

  5. 现在在 PHP 代码中,设置所有应用程序详细信息并添加此代码!

    $params = array('include_email' => 'true', 'include_entities' => 'false', 'skip_status' => 'true');

    $data = $connection->get('account/verify_credentials', $params); // 获取数据

    // 获取 Twitter 用户配置文件详细信息 $twt_id = $data->id; //Twitter 用户 id $twt_email = $data->email; //Twitter 用户电子邮件

全部完成。 希望对您有所帮助,祝您好运。 ;)

输入图片描述


2
在寻找了将近两个小时之后,这就是解决方案。这应该得到大量的赞同。截至我打字时,现在是2017年1月7日。在我找到的任何地方,其他构建URL的方式都没有起作用。 - Dan Zuzevich
5
重复操作后仍未获得电子邮件地址。 - Dhirender
对我也不起作用。还有其他方法吗?在开发阶段可以请求电子邮件地址吗? - shrawan_lakhe
1
您需要重新生成访问令牌才能从已经通过身份验证的用户获取电子邮件。这是Twitter的安全措施。 - Florian Doyen
如果您保存了 Twitter 用户,则需要在提供程序的数据库表中删除其条目。Twitter 文档中有这样的说明。但是,还要通过 $connection->get('account/verify_credentials', ['include_email' => true]) 返回的字段向下滚动,因为它位于底部。 - agm1984
谢谢,@agm1984。我刚刚从表中删除了该条目,现在它可以正常工作了。 - Mohit Rane

8

1
你应该提到“xAuth不适用于基于Web的应用程序”。这就是为什么你的答案不适用于OP的问题。 - TNT

5
是的,您可以获取电子邮件地址。现在可以通过填写一些权限来实现。 1.进入此链接:https://apps.twitter.com/ 2.在创建的应用程序中进入“权限”选项卡
3.选中应用程序中的附加权限复选框。
4.成功更新设置后,您可以从Twitter获取电子邮件地址。
如果在某些情况下您无法获取电子邮件地址,请检查您的Oauth Api请求url。
您的请求网址应该是这样的:https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true

2

无法从Twitter获取用户的电子邮件地址。您可以在此处查看。您可以在回调页面上打开一个表单页面,并在该页面上获取用户的电子邮件地址。您可以参考此处的示例用法。


Huseyin BABAL:感谢您的回复。我可以知道在dev.twitter.com上的链接吗,以便我可以向客户展示并继续进行。 - Vinoth Babu
谢谢,我会按照你说的去做。 - Vinoth Babu
3
Twitter常见问题链接已损坏 :( - Asaph
1
这似乎即将发生变化twitter社区讨论。看起来它几乎已经实现了,但还没有正式文档化。 - jeteon
1
我认为这将要改变:https://twittercommunity.com/t/how-to-get-email-from-twitter-user-using-oauthtokens/558/175。 - jeteon

1

以下是我使用linqtoTwitter库在ASP.Net中完成此操作的方法:

http://www.bigbrainintelligence.com/Post/get-users-email-address-from-twitter-oauth-ap

// call verify credentials api
var twitterCtx = new TwitterContext(authTwitter);
var verifyResponse =
      await
          (from acct in twitterCtx.Account
           where (acct.Type == AccountType.VerifyCredentials) && (acct.IncludeEmail == true)
           select acct)
          .SingleOrDefaultAsync();

if (verifyResponse != null && verifyResponse.User != null)
{
    User twitterUser = verifyResponse.User;
    //assign email to existing authentication object
    loginInfo.Email = twitterUser.Email;

}

你使用的凭证存储是什么?我尝试了他们的代码示例,但只能获取“我的”用户帐户信息,而不是刚刚登录的用户信息。 - Tim Wheeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接