【问题标题】:Oauth 1.0 - Connection to an ApiOauth 1.0 - 连接到 Api
【发布时间】:2017-06-20 21:36:18
【问题描述】:

我正在尝试与一个 API 建立连接,该 API 将为我的网站提供有关汽车和其他东西的信息。问题是我可以从 PostMan 连接它,因为它会生成签名和通知。 我遇到的问题是,当我想连接抛出 PHP 时,OAUTH 类不会生成通知和签名,所以我可以连接。 我也尝试过使用 CURL 并且发生了更好的事情。

我当前的代码是这样的:

$config = array(
    'consumer_key' => 'XXXXXXXXXXXXXXXXXXXXXXX',
    'consumer_secret' => 'XXXXXXXXXXXXXXXXXXXXXXX',
    'request_uri' => 'http://bdc.autobild.es/autobild'
);
$oauth = new OAuth($config['consumer_key'], 
$config['consumer_secret'], OAUTH_SIG_METHOD_HMACSHA1); 
$requestTokenInfo = $oauth->getRequestToken('http://bdc.autobild.es/autobild/','http://localhost/myfolder/');
d($requestTokenInfo);

$accessTokenInfo = $oauth->getAccessToken('http://bdc.autobild.es/autobild/');
d($accessTokenInfo);

$requestInfo = $oauth->getLastResponseInfo();
d($requestInfo);

$oauth->fetch("http://bdc.autobild.es/autobild/list?type=coche");
$data = $oauth->getLastResponseInfo();
d($data);

谢谢!

【问题讨论】:

  • 这是进行身份验证还是在您通过身份验证后执行 API 请求?
  • 第一部分是进行身份验证,第二部分是在这种情况下获取汽车列表。

标签: php api oauth


【解决方案1】:

这是我对 OAuth 服务进行身份验证的方式,也许它会很有用:

signin.php

//Gets the request token 
session_start();
$oauth = new OAuth($config['consumer_key'], $config['consumer_secret'], OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_FORM); 
$requestTokenInfo = $oauth->getRequestToken("<oauth token URL>", $_SERVER["SERVER_NAME"]."/callback.php");
$_SESSION["tokenInfo"] = $requestTokenInfo;
header("Location: <oauth authorize URL>?token='.$requestTokenInfo["oauth_token"]); //May vary on your OAuth service

callback.php

session_start();
$oauth = new OAuth($config['consumer_key'], $config['consumer_secret'], OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_FORM); 
$oauth->setToken($_REQUEST['oauth_token'], $_SESSION["tokenInfo"]["secret"]);
$accessTokenInfo = $oauth->getAccessToken("<oauth authorize URL>");
$_SESSION["accessToken"] = $accessTokenInfo;
unset($_SESSION["tokenInfo"]); //Its work is done

现在每当我需要获取一些 API 数据时:

session_start();
$oauth = new OAuth($config["consumer_key"], $config["consumer_secret"], OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI); 
$oauth->setToken($_SESSION["accessToken"]["token"],$_SESSION["accessToken"]["secret"]);

$oauth->fetch("URL");
$data = $oauth->getLastResponse();
$requestInfo = $oauth->getLastResponseInfo();
$responseHeaders = $oauth->getLastResponseHeaders();

这适用于您需要代表用户执行请求的情况。用户将被重定向到服务的 oauth 授权器,然后如果他们授权您的应用程序,则使用他们的令牌返回回调页面。

如果服务提供了一些可直接从您的应用访问的方法(通常获取应用使用信息等与这些方法相关联),那么您可能可以跳过其中的大部分内容:

$oauth = new OAuth($config['consumer_key'], $config['consumer_secret'], OAUTH_SIG_METHOD_HMACSHA1); 

$oauth->fetch(url); 

【讨论】:

  • 我无法获得访问令牌,API 总是返回 "Services_Endpoint_"autobild"has_been_setup_successfully" 但任何类似于令牌的东西。我不知道我是否已通过身份验证,但是当我想获取数据时,API 会返回此错误消息“致命错误:未捕获的异常 'OAuthException' 并带有消息 'Invalid auth/bad request”
  • @PacoGómezCapón 是 API 提供商,提供任何类型的文档,说明需要使用哪些端点来获取访问令牌?
  • 他们给了我一份小文档,但我只有一个端点、密钥和密钥。我已经用 Postman 进行了尝试,它与 API 正确连接,我可以像其他 API 一样获取数据,问题是当我尝试使用 PHP 时。在所有情况下,如果有更多的文档,一切都会变得更容易。谢谢。
  • @PacoGómezCapón 请记住(对于最后一个代码),您可以使用更多参数,例如,oauth 构造函数可能需要 OAUTH_AUTH_TYPE_URI 作为最后一个参数(默认为 form)和 @ 987654326@ 可能需要您指定 http 方法(例如,如果您需要 post 而不是 get,请使用 post)
  • 是的,我知道。但我也写了这个,它继续出现同样的问题...... :( 我要编辑第一个代码。
【解决方案2】:

我找到了解决方案。问题是这里缺少一个参数:

$oauth = new OAuth($config['consumer_key'], $config['consumer_secret'], OAUTH_SIG_METHOD_HMACSHA1); 

正确的做法是:

$oauth = new OAuth($config['consumer_key'], $config['consumer_secret'], OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI); 

所以,完整的代码是这样的:

    $config = array(
        'consumer_key' => 'XXXXXXXXXXXXXXXXXXXXXXXX',
        'consumer_secret' => 'XXXXXXXXXXXXXXXXXXXXXXXX',
    );

    $oauth = new OAuth($config['consumer_key'], $config['consumer_secret'], OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);    

    $requestInfo = $oauth->getLastResponseInfo();

    $oauth->fetch("http://example.es/list?type=car");
    $data = $oauth->getLastResponse();
    var_dump($data);

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2014-10-14
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多