2015-02-07 105 views
0

我正在使用paypal API并与此文档流动make your firest callPaypal API with angular | 400(错误请求)

我得到一个错误消息的状态码400(错误请求):

对象{错误: “INVALID_REQUEST”,ERROR_DESCRIPTION: “grant_type是必需的参数”}

'Authorization': "Basic RU9KMlMtWjZPb05fbGVfS1MxZDc1d3NaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA6RUNsdXNNRVVrOGU5aWhJN1pkVkxGNWNaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA=", 

在这种我使用了示例提供的Client-Id和Secret,并将它们编码为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) 
    }); 
+0

那么你的问题是什么? – mindparse 2015-02-07 19:44:50

回答

2

根本原因是你的数据被编码为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'} 
}) 
0

您需要包含'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。我从来没有过,但我不能确定你的环境和角版本:

$httpProvider.defaults.useXDomain = true;