【问题标题】:Using eBay OAuth使用 eBay OAuth
【发布时间】:2017-07-21 19:13:45
【问题描述】:

我的代码如下所示。我正在尝试使用 eBay 对用户进行身份验证,以便能够获取访问令牌。在将用户重定向回我的重定向 URL 以使用访问令牌交换代码时,我收到错误:

HTTP/1.1 100 继续 HTTP/1.1 400 错误请求内容长度:109 Cneonction:关闭日期:2017 年 3 月 2 日星期四 06:47:51 GMT RlogId: t6ldssk%28ciudbq%60anng%7Fu2h%3F%3Cwk%7Difvqn*2%3D%3F%3E505-15a8dc659e6-0xf3 设置 Cookie:ebay=%5Esbf%3D%23%5E;Domain=.ebay.com;Path=/ X-EBAY-C-REQUEST-ID:ri=v22kQg9yaBLq,rci=2FDiyansIYnkONQC X-EBAY-C-版本:1.0.0 X-EBAY-REQUEST-ID: 15a8dc658f8.a0968eb.5f6ef.fff87b7e![] 内容类型:应用程序/json 连接:保持活动 {"error":"invalid_request","error_description":"'Authorization' 是 缺少标题:","error_uri":null}

我的 POST 请求有什么问题?

$auth_code = $_GET['code'];
$client_id = "Client ID";
$client_secret = "Client Secret";
$redirect_uri = "RuName";
$headers = array (
    'Content-Type'  => 'application/x-www-form-urlencoded',
    'Authorization' => sprintf('Basic %s',base64_encode(sprintf('%s:%s', $client_id, $client_secret)))
);
$apiURL = "https://api.sandbox.ebay.com/identity/v1/oauth2/token";
$urlParams = array (
        "grant_type" => "authorization_code",
        "code" => urlencode($auth_code),
        "redirect_uri" => $redirect_uri
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Should be removed on production
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, true );

curl_setopt($ch, CURLOPT_URL, $apiURL);
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers = array ('Authorization' => sprintf('Basic %s',base64_encode(sprintf('%s:%s', $client_id, $client_secret))),'Content-Type'  => 'application/x-www-form-urlencoded') );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $urlParams );

$resp = curl_exec ( $ch );
curl_close ( $ch );

print_r ( $resp );

【问题讨论】:

  • 能否请您提供完整的 oauth 连接部分到 ebay。我尽我所能,但不能再进一步了。我真的希望我可以使用你的帮助。我真的很感激。谢谢。

标签: php oauth ebay-api


【解决方案1】:

您的代码有两个小问题。首先是 CURLOPT_HTTPHEADER 需要一个字符串数组而不是关联数组。

$headers = array (
    'Content-Type: application/x-www-form-urlencoded',
    'Authorization: '.sprintf('Basic %s',base64_encode(sprintf('%s:%s', $client_id, $client_secret)))
);

第二个与 PHP 如何处理 CURLOPT_POSTFIELDS 选项有关。如documentation 中所述。

将数组传递给 CURLOPT_POSTFIELDS 会将数据编码为 multipart/form-data,同时传递一个 URL 编码的字符串将编码 数据为 application/x-www-form-urlencoded。

由于 eBay API 要求正文为 application/x-www-form-urlencoded,因此您需要传入一个字符串。您可以通过将数组传递给http_build_query 来使用您的数组来构建此字符串。

$urlParams = http_build_query(array (
        "grant_type" => "authorization_code",
        "code" => $auth_code,
        "redirect_uri" => $redirect_uri
));

我还推荐Postman 来测试向 eBay 发出 API 请求。它的功能之一是它还会为您创建 PHP curl 代码。下面的代码改编自 Postman 创建的代码。

<?php

$clientID = '<YOUR EBAY APP ID>';
$clientSecret = '<YOUR EBAY CERT ID>';
$ruName = '<YOUR EBAY RUNAME>';
$authCode = '<AUTH CODE>';

$url = 'https://api.sandbox.ebay.com/identity/v1/oauth2/token';

$headers = [
    'Content-Type: application/x-www-form-urlencoded',
    'Authorization: Basic '.base64_encode($clientID.':'.$clientSecret)
];

$body = http_build_query([
    'grant_type'   => 'authorization_code',
    'code'         => $authCode,
    'redirect_uri' => $ruName
]);

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL            => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_POSTFIELDS     => $body,
    CURLOPT_HTTPHEADER     => $headers
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response."\n";
}

【讨论】:

  • 你真的帮助了我。似乎有很多关于 Curl 的知识需要我学习。有效!!非常感谢大卫。
  • 今天,我有一个很棒的 eBay API 教程,但是我gettig "{"error":"invalid_grant","error_description":"提供的授权授权码无效或被发给另一个客户”} ”。我做错了什么?
  • 我从这里获得了 $authCode,请查看这张图片 - ibb.co/dWxPNa
  • @shubhamjain 你得到了错误的令牌。 eBay 提供称为“Auth 'n' Auth”的旧样式和更新的 OAuth 版本。从您的屏幕截图看来,您已经生成了一个“Auth 'n' Auth”令牌。此令牌不适用于新的 RESTFul API。在生成令牌之前,您需要选择页面顶部的“OAuth(新安全)”选项。
  • @DavidT.Sadler 根据您的 cmets 我已经使用 OAuth 生成了令牌,但仍然遇到问题。我已重用您在答案中发布的代码。有什么建议吗?
猜你喜欢
  • 2017-10-18
  • 2019-04-30
  • 1970-01-01
  • 2019-03-13
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 2020-02-03
相关资源
最近更新 更多