【问题标题】:Paypal API with angular | 400 (Bad Request)带角度的贝宝 API | 400(错误请求)
【发布时间】:2015-04-07 16:21:35
【问题描述】:

我正在使用 paypal API 并处理此文档 make your firest call

我收到带有错误消息的状态代码 400(错误请求):

Object {error: "invalid_request", error_description: "grant_type is an required parameter"}

'Authorization': "Basic RU9KMlMtWjZPb05fbGVfS1MxZDc1d3NaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA6RUNsdXNNRVVrOGU5aWhJN1pkVkxGNWNaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA=",

在这种情况下,我使用了示例提供的 Client-Id 和 Secret,并将它们编码为 base 64。

$http({
            url: 'https://api.sandbox.paypal.com/v1/oauth2/token',
            method: 'POST',
            headers: {'Content-Type': 'application/x-www-form-urlencoded', 
                      'Authorization': "Basic RU9KMlMtWjZPb05fbGVfS1MxZDc1d3NaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA6RUNsdXNNRVVrOGU5aWhJN1pkVkxGNWNaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA=",
                      'Accept-Language': 'en_US'
                      },
            data: { grant_type: 'client_credentials' }
    }).success(function (data, status, headers, config) {
                console.log(data)
    }).error(function (data, status, headers, config) {
                console.log(data)
    });

【问题讨论】:

  • 那么你的问题是什么?

标签: angularjs paypal


【解决方案1】:

根本原因是您的数据被编码为 JSON 而不是application/x-www-form-urlencoded,所以您需要做的是 URL 编码数据,例如:

$http({
    method: 'POST',
    url: url,
    data: $.param({grant_type: 'client_credentials'}),
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})

【讨论】:

    【解决方案2】:

    您需要包含“withCredentials”选项。确保在您的客户端 ID 和您的密钥之间放置一个冒号。您根本不需要对这些值进行编码,只需使用 Paypal 提供的值即可。我也认为数据字段不应该是一个对象,因为 Paypal 似乎需要一个字符串。

    如果您不使用 Windows,我相信您需要将内容类型设置为 JSON,但那里的文档有点含糊。也许两个都试试?我认为这个请求配置应该可以工作:

    url: 'https://api.sandbox.paypal.com/v1/oauth2/token',
    method: 'POST',
    withCredentials: true,
    headers: {'Content-Type': 'application/json', 
              'Authorization': 'Basic {Client-Id}:{Secret}',
              'Accept-Language': 'en_US'
             },
    data: 'grant_type=client_credentials'
    

    最后,您可能需要配置您的 $httpProvider。我从来不需要,但我不确定你的环境和 Angular 版本:

    $httpProvider.defaults.useXDomain = true;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-21
      • 2016-04-07
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2011-08-25
      相关资源
      最近更新 更多