贝宝 API 与 angular | 400(错误请求)
Paypal API with angular | 400 (Bad Request)
我正在使用 paypal API 并使用此文档 make your firest call。
我收到状态代码 400(错误请求)和一条错误消息:
对象{错误:"invalid_request",error_description:"grant_type is a 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)
});
您需要包含 '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;
根本原因是您的数据被编码为 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'}
})
我正在使用 paypal API 并使用此文档 make your firest call。
我收到状态代码 400(错误请求)和一条错误消息:
对象{错误:"invalid_request",error_description:"grant_type is a 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)
});
您需要包含 '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;
根本原因是您的数据被编码为 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'}
})