Маркер учетных данных клиента OAuth 2 получен почтальоном, но не сервером - PullRequest
0 голосов
/ 21 марта 2019

любой может помочь мне, потому что я застрял, чтобы получить токен от: 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>

Вот фотография от почтальона, где все работает нормально:

postman screen shoot У меня есть 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")
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...