【问题标题】:Cannot call the PayPal Sync API due to Authorization Failure由于授权失败,无法调用 PayPal Sync API
【发布时间】:2018-09-13 11:33:44
【问题描述】:

我正在尝试使用相对较新的 PayPal Sync API 下载我的 PayPal 交易。我正在关注the Sync API guide。我首先登录 PayPal 开发者仪表板 My Apps & Credentials page,滚动到 REST API 应用程序 部分,创建一个应用程序,单击它,然后为两个应用程序启用 Transaction Search沙盒和真实帐户。

然后我使用沙盒帐户的客户端 ID 和密钥生成访问令牌。我确认客户 ID 和密码正确且有效。我的 cURL 命令如下(注意我在 Windows 10 上使用 cURL):

curl -v https://api.sandbox.paypal.com/v1/oauth2/token ^
   -H "Accept: application/json" ^
   -H "Accept-Language: en_US" ^
   -u "<my-client-id>:<my-secret>" ^
   -d "grant_type=client_credentials"

我收到了类似以下的回复(我添加了格式):

{
  "scope":"https://uri.paypal.com/services/reporting/search/read 
           https://api.paypal.com/v1/payments/.* 
           https://uri.paypal.com/services/applications/webhooks 
           openid",
  "nonce":"2018-04-04T02:20:02Z...",
  "access_token":"<my-access-token>",
  "token_type":"Bearer",
  "app_id":"<my-app-id>",
  "expires_in":32400
}

然后,我将访问令牌复制到同步 API 指南页面上的 the sample command 中。这是我运行的命令:

curl -v -X GET https://api.sandbox.paypal.com/v1/reporting/transactions?transaction_id=5TY05013RG002845M&fields=all&page_size=100&page=1 ^
  -H "Content-Type: application/json" ^
  -H "Authorization: Bearer <my-access-token>"

我收到以下错误响应:

< HTTP/1.1 401 Unauthorized
...
< Content-Length: 244
< Connection: close
< Content-Type: application/json
<
{
  "name":"AUTHENTICATION_FAILURE",
  "message":"Authentication failed due to invalid authentication credentials or a missing Authorization header.",
  "links":[{
    "href":"https://developer.paypal.com/docs/api/overview/#error",
    "rel":"information_link"
  }]
}

我尝试了很多方法来纠正这个错误,包括:

  1. 在命令中添加“Accept: application/json”和“Accept-Language: en_US”标头。
  2. 创建新 Secret 并生成新访问令牌。
  3. 使用新的客户端 ID 和密钥创建新应用并生成新的访问令牌。
  4. 禁用事务搜索,重新启用,然后再次发送命令。
  5. 在真实帐户中试用。

这些尝试中的每一个都产生了相同的结果。我注意到,在访问令牌响应的范围部分中,它不包含与同步 API 的指定路径(/v1/reporting/transactions)类似的路径。不过,这只是一个观察结果,我不确定这是否相关。

我通读了整个 Sync API 指南和文档大约五次,并且非常彻底地搜索了 Google 和 StackOverflow。我看到evidence 有人正在通过与 Sync API 的初始连接,所以我相当肯定这个 API 可以工作。

有人可以帮我了解我缺少什么吗? 是不是我需要等待一两天才能让他们的系统赶上来? PayPal 的开发者文档对用户不是很友好,他们的开发者仪表板非常有问题。

【问题讨论】:

    标签: paypal paypal-sandbox paypal-rest-sdk


    【解决方案1】:

    看来这个错误可能是由 cURL 或我使用它的方式引起的。凭直觉,我使用Hurl.it 来执行这个示例请求,并且请求成功(HTTP 200)。然后我尝试了另一个请求,在给定日期范围内搜索所有交易,这也成功了。我将标记已回答的问题。

    【讨论】:

    • 我在 node.js 上遇到了同样的问题。你是怎么解决这个问题的?
    【解决方案2】:

    我也有同样的问题。在 URL 周围加上双引号为我解决了这个问题。其他 API 端点有效(身份验证、授权/xyz),因为它们中没有任何特殊的 URL 字符。在事务搜索中,查询字符串分隔符由 Bash 解析。

    你上面的卷曲线变成:

    curl -v -X "GET https://api.sandbox.paypal.com/v1/reporting/transactions?transaction_id=5TY05013RG002845M&fields=all&page_size=100&page=1" \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer <my-access-token>"
    

    希望对某人有所帮助。

    【讨论】:

    • 引号解决了我的问题。谢谢
    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多