2015-02-07 145 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;