我正在使用PHP构建CRM webapp,它将从用户的所有电子邮件和社交媒体帐户中提取,并允许他们阅读和回复所有电子邮件,或撰写新邮件。现在,我只是想尝试使用OAuth 1.0使用Gmail,但我遇到了一些麻烦。
我可以成功获取请求令牌和授权令牌,一旦用户授权我,Google会重定向回我的应用程序,就像它应该...但现在我如何从用户的收件箱中提取消息? This link说我需要使用用户的电子邮件拨打电话才能访问其收件箱,但如何获取用户的电子邮件地址?我如何处理Google返回给我的oauth_verifier和oauth_token?
答案 0 :(得分:0)
我明白了。有两个步骤:
首先,在您实际访问任何用户信息之前,您必须将请求令牌升级为访问令牌。这是OAuth流程的第三步(Google页面上的用户授权是第二步);我对最后一步是什么感到困惑,并且认为用户正在完成Google页面上的第二步和第三步。 Google's OAuth Playground帮助澄清了这一点。无论如何,在Google(或您的服务提供商是谁)将用户重定向回您的应用程序之后,您使用oauth_verifier和oauth_token将请求令牌升级为访问令牌。不要忘记使用你的oauth_token_secret(除了你的consumer_secret_key)来为最后一个请求生成签名!那个小细节花了我很多时间!有关如何正确执行此操作的详细信息,请参阅this question的答案。
现在,如果您像我一样,并希望谷歌处理用户登录的电子邮件地址(而不是在您的应用程序中自己收集该信息),您需要再次提出请求才能访问用户的收件箱。在我看来,这是Google的文档确实失败的地方,因为您似乎需要用户的谷歌ID(gmail地址)来使用他们的任何API,但是可以完成OAuth流程而无需从用户那里获取。这是导致我困惑的原因,也是我的问题所在。我仍然没有100%明确你应该怎么做,但我现在所做的就是在我的范围内添加“https://www.google.com/m8/feeds/”,然后调用“https://www.google.com/m8/feeds/contacts/default/full?max-results=0”来获取恰好包含用户的gmail地址的空xml联系人列表。然后,您可以解析XML以获取用户的电子邮件,并以愉快的方式进行操作。使用“https://www.googleapis.com/auth/userinfo#email”范围获取用户的电子邮件也可能(也许更可取),但我还没有尝试过。