【问题标题】:hotmail: user authentication and contact retrieval with PHPhotmail:使用 PHP 进行用户身份验证和联系人检索
【发布时间】:2013-05-04 14:33:32
【问题描述】:

我正在尝试编写一个 PHP 脚本,它允许我做两件事:

  1. 允许用户使用他们的 Hotmail(我认为它现在称为“实时”?)帐户向网站验证自己的身份

  2. 从 Hotmail 中检索经过身份验证的用户联系人列表。

在过去的 6 个小时里,我在互联网上搜索了至少一个我可以修改/扩展以完成上述两件事的工作示例。例如,这里在 SO 上提出了几十个类似的问题 - NONE 提供的答案不再有效(诚然,其中一些问题已经存在几年了)。

我尝试了 Microsoft 网站并下载了他们的 API 的最新版本,该 API 似乎以相当惊人的速度发展。我终于找到了API which has not been deprecated (yet?)

我按照说明进行操作,当我尝试进行身份验证时,由于我的努力,我收到了以下消息:

We're unable to complete your request
Windows Live ID is experiencing technical difficulties. Please try again later.

我立即尝试了online version of the demo,不出所料,它就像一个魅力。

顺便说一句,我设法为 Yahoo 和 GMail 实现了相同的功能,使用它们的 OPEN API,每个不到一个小时。现在,我对所有专有事物的彻底仇恨(对不起,微软)有可能导致我在这里失去了一点情节。

实际上有没有人(2012 年)设法在 PHP 中获得一个工作示例,它允许:

  1. Hotmail(实时?)用户身份验证
  2. Hotmail 用户联系人电子邮件检索

如果你有,一个代码 sn-p,或者我可以找到这样一个 sn-p 的链接将非常有用,因为到目前为止,我浪费了整个下午试图通过 PHP 使用 Microsoft Live API .

PS:不,我对 OpenInviter 不感兴趣,它坏了。

【问题讨论】:

  • 听起来你应该看看open id
  • @Dagon:请告诉我,您认为 open id 将如何帮助我使用 Hotmail 帐户对用户进行身份验证?
  • @Dagon:openid 是用于身份验证的 - 所以它只提供真实性,仅此而已
  • 我可以确认 hotmail(也与 outlook.com 相同)oauth 正在运行。我目前正在开发我的网站以进行 hotmail 身份验证(用户注册和后续登录),并且在过去一周进行了大量测试。我没有看到您的特定错误消息,所以可能是端点不正确或签名错误的结果?
  • @mulllhausen:也许你会好心地发布你的代码的基本要素 sn-p 以便我可以测试它 - 到目前为止,似乎没有任何工作?

标签: php oauth hotmail


【解决方案1】:

我围绕每个服务提供商的单个数组编写了自己的 oauth 库。此数组包含执行身份验证和检索用户数据所需的所有数据。我用于 msdn 的数组(即 hotmail、outlook、xbox、msn)是:

$msdn = array
(
  'oauth_version'              => '2',
  'oauth_method'               => 'GET',
  'redirect_user_params'       => array
  (
    'url'                      => 'https://oauth.live.com/authorize',
    'response_type'            => 'code',
    'http_params'              => array
   (
     'url',
     'client_id',
     'redirect_uri',
     'response_type',
     'scope',
     'state'
   )
 ),
 'obtain_access_token_params'  => array
 (
   'url'                       => 'https://oauth.live.com/token',
   'grant_type'                => 'authorization_code',
   'http_params'               => array
   (
     'url',
     'client_id',
     'client_secret',
     'code',
     'grant_type',
     'redirect_uri',
     'scope'
    )
  ),
  'scope'                      => 'wl.signin wl.basic',
  'obtain_user_data_params'    => array
  (
    'url'                      => 'https://apis.live.net/v5.0/me',
    'http_params'              => array
    (
      'url',
      'access_token',
      'scope'
    )
  ),
  'client_id'                  => 'xxxxx', // = oauth_consumer_key in oauth 1.0 lingo
  'client_secret'              => 'xxxxxxxxxxxxxxx',
  'readme_url'                 => 'http://msdn.microsoft.com/en-us/library/live/hh243647.aspx'
);

三个 oauth 阶段(即“重定向用户”、“获取访问令牌”和“获取用户数据”)中的每一个的参数都在 http_params 数组中。在 msdn 的情况下,这些参数最终出现在我使用 curl 发出的 url 的查询查询字符串中(因为 msdn 只接受 GET,不接受 POST)。

我没有尝试检索用户的联系地址簿,但这只是使用您需要的任何额外信息扩展scope 元素的情况(在此处记录http://msdn.microsoft.com/en-us/library/live/hh243646.aspx)。从http_params 数组中可以看出,scope 参数用于三个 oauth 阶段。

【讨论】:

    【解决方案2】:

    CloudSponge test drive 上尝试 Hotmail/MSN/Live 导入,看看这是否是您希望的用户体验。

    如果它适合您,您可以使用我们的小部件或我们的 API。如果您想使用 API,我们已经编写了 PHP wrapper 以方便您使用。

    【讨论】:

      【解决方案3】:

      如果您只输入 www.domain.com,请确认您的回调 url 是 http://,然后得到这个问题..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        相关资源
        最近更新 更多