如何修复 grant_type 错误为 NULL - Pay Pal 的 REST API 访问令牌不支持授权类型
How to fix grant_type error is NULL - unsupported grant type with Pay Pal's REST API for access token
我正在调用 Paypal 的 REST API 来获取访问令牌 https://developer.paypal.com/docs/api/overview/#get-an-access-token
我正在使用带有 superagent 的节点来进行 AJAX 调用。
这是我的代码:
const basicAuth = Buffer.from(`${PAYPAL_CLIENT}:${PAYPAL_SECRET}`).toString('base64')
request
.post(PAYPAL_OAUTH_API)
.set('Accept', 'application/json')
.set('grant_type', 'client_credentials')
.set('Authorization', `Basic ${basicAuth}`)
.send()
.end((result) => {
console.log(result.response.error)
})
这是包含我遇到的错误的日志
{ Error: cannot POST /v1/oauth2/token/ (400)
at Response.toError (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\response.js:94:15)
at ResponseBase._setStatusProperties (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\response-base.js:123:16)
at new Response (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\response.js:41:8)
at Request._emitResponse (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\index.js:850:20)
at parser (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\index.js:1036:38)
at IncomingMessage.res.on (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\parsers\json.js:19:7)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
status: 400,
text: '{"error":"unsupported_grant_type","error_description":"Grant Type is NULL"}',
method: 'POST',
path: '/v1/oauth2/token/' }
为什么我收到错误消息 unssuported grant type - grant type is NULL?
在邮递员中它可以工作,但我无法让它与超级代理和节点一起工作。 Paypal 给出了两个例子 here with postman 和 curl。为什么它不能与 superagent 一起使用?
来自您链接到的贝宝文档:
If you use a command-line tool other than cURL, set the Accept header
to application/x-www-form-urlencoded
来自您链接到的 superget
个文档:
By default sending strings will set the Content-Type
to application/x-www-form-urlencoded
因此将您的请求更改为:
// PAYPAL_LINK = "https://api.sandbox.paypal.com"
// PAYPAL_OAUTH_API = "/v1/oauth2/token"
request(PAYPAL_LINK)
.post(PAYPAL_OAUTH_API)
.send('grant_type=client_credentials')
.auth(PAYPAL_CLIENT, PAYPAL_SECRET)
.then(response => console.log(response))
.catch(error => console.error(error))
如果您希望响应为 json
,可选择设置 Accept: application/json
我正在调用 Paypal 的 REST API 来获取访问令牌 https://developer.paypal.com/docs/api/overview/#get-an-access-token
我正在使用带有 superagent 的节点来进行 AJAX 调用。
这是我的代码:
const basicAuth = Buffer.from(`${PAYPAL_CLIENT}:${PAYPAL_SECRET}`).toString('base64')
request
.post(PAYPAL_OAUTH_API)
.set('Accept', 'application/json')
.set('grant_type', 'client_credentials')
.set('Authorization', `Basic ${basicAuth}`)
.send()
.end((result) => {
console.log(result.response.error)
})
这是包含我遇到的错误的日志
{ Error: cannot POST /v1/oauth2/token/ (400)
at Response.toError (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\response.js:94:15)
at ResponseBase._setStatusProperties (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\response-base.js:123:16)
at new Response (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\response.js:41:8)
at Request._emitResponse (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\index.js:850:20)
at parser (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\index.js:1036:38)
at IncomingMessage.res.on (C:\Users\shlomo\projects\tribewise-backend-v1\node_modules\superagent\lib\node\parsers\json.js:19:7)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
status: 400,
text: '{"error":"unsupported_grant_type","error_description":"Grant Type is NULL"}',
method: 'POST',
path: '/v1/oauth2/token/' }
为什么我收到错误消息 unssuported grant type - grant type is NULL? 在邮递员中它可以工作,但我无法让它与超级代理和节点一起工作。 Paypal 给出了两个例子 here with postman 和 curl。为什么它不能与 superagent 一起使用?
来自您链接到的贝宝文档:
If you use a command-line tool other than cURL, set the
Accept header
toapplication/x-www-form-urlencoded
来自您链接到的 superget
个文档:
By default sending strings will set the
Content-Type
toapplication/x-www-form-urlencoded
因此将您的请求更改为:
// PAYPAL_LINK = "https://api.sandbox.paypal.com"
// PAYPAL_OAUTH_API = "/v1/oauth2/token"
request(PAYPAL_LINK)
.post(PAYPAL_OAUTH_API)
.send('grant_type=client_credentials')
.auth(PAYPAL_CLIENT, PAYPAL_SECRET)
.then(response => console.log(response))
.catch(error => console.error(error))
如果您希望响应为 json
Accept: application/json