любой может помочь мне, потому что я застрял, чтобы получить токен от:
https://www.parcel2go.com/api/docs/articles/intro.html
Пример запроса токена:
POST /auth/connect/token HTTP/1.1
Host: sandbox.parcel2go.com
User-Agent: insomnia/5.14.6
Content-Type: application/x-www-form-urlencoded
Accept: */*
grant_type=client_credentials
&scope=public-api%20payment
&client_id=<client_id>
&client_secret=<client_secret>
Вот фотография от почтальона, где все работает нормально:
У меня есть 2 решения:
Решение № 1:
Вот сервер:
const express = require("express");
const app = express();
const ClientOAuth2 = require("client-oauth2");
const p2gAuth = new ClientOAuth2({
clientId: "52bec26d025a4b8db2248a90da1e455a:testing",
clientSecret: "testing123",
accessTokenUri: "https://sandbox.parcel2go.com/auth/connect/token",
scopes: ["public-api", "payment"]
});
app.get("/api/getToken", (req, res) => {
p2gAuth.credentials.getToken().then(function(user) {
console.log(user); //=> { accessToken: '...', tokenType: 'bearer', ... }
});
});
app.listen(3001, () =>
console.log("Express server is running on localhost:3001")
);
Я получаю ответ:
(node:22703) UnhandledPromiseRejectionWarning: Error: Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method).
at getAuthError (/Users/mario/Documents/VS/mario-p2g/node_modules/client-oauth2/src/client-oauth2.js:121:15)
at /Users/Mario/Documents/VS/mario-p2g/node_modules/client-oauth2/src/client-oauth2.js:269:21
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:22703) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:22703) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Решение № 2:
Кто-нибудь объяснит мне, что делать, и лучше всего я хотел бы знать, как использовать это в запросе на выборку, что не так с этим кодом:
const express = require("express");
const app = express();
const fetch = require("node-fetch");
app.get("/api/getToken", (req, res) => {
fetch("https://sandbox.parcel2go.com/auth/connect/token", {
method: "POST",
headers: {
"User-Agent": "insomnia/5.14.6",
"Content-Type": "application/x-www-form-urlencoded",
Accept: "*/*"
},
body: {
grant_type: "client_credentials",
client_id: "52bec26d025a4b8db2248a90da1e455a:testing",
client_secret: "testing123",
scope: ["public-api", "payment"]
}
})
.then(response => response.json())
.then(body => {
if (body) {
res.json(body);
} else {
res.json({ error: "no body after respond" });
}
})
.catch(error => {
res.json(error);
console.log("Server failed to return data: " + error);
});
});
app.listen(3001, () =>
console.log("Express server is running on localhost:3001")
);