Ошибка при получении заказов от salesforce sfcc - PullRequest
0 голосов
/ 20 февраля 2020

При выполнении приведенного ниже кода я получаю токен такого формата, как Bearer {token}

Теперь, когда я выполняю getOrderList (), я получаю ошибку 400 Bad Request.

Я не уверен что я делаю не так? Я использую этот https://documentation.b2c.commercecloud.salesforce.com/DOC1/index.jsp?topic=%2Fcom.demandware.dochelp%2FOCAPI%2F15.2%2Fshop%2FResources%2FOrders.html в качестве справки для получения всех заказов из отдела продаж, пока он создан недавно.

Может кто-нибудь помочь мне с этим?

'use strict';
const fetch = require('node-fetch');
const ocapi_path = require('./ocapi_path');

const envDomain = 'Domainhere';
const envClientId = 'clientidHere';
const getToken = async (domain = envDomain, clientId = envClientId) => {
  const response = await fetch(
    `${domain}/s/site-id/dw/shop/v19_1/customers/auth?client_id=${clientId}`,
    {
      method: 'POST',
      body: JSON.stringify({ type: 'guest' }),
      headers: {
        'Content-Type': 'application/json',
        'Cache-Control': 'no-cache',
      },
    },
  );
  if (!response.ok) {
    const json = await response.json();
    throw new Error(`OCAPI error response: ${JSON.stringify(json)}`);
  }

  return response.headers.get('Authorization');
};

const getOrderList = async (token) => {
  const domain = envDomain;
  const response = await fetch(
    `${domain}/s/site-id/dw/shop/v19_1/orders?status=completed`,
    {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
        'Cookie': token,
        Authorization: token,
      },
    },
  );
  if (response.ok) {
    return await response.json();
  }

  return null;
};


const getTheResult = async () => {
    const token =  await getToken();
    const result =  await getOrderList(token);
    console.log(result);
}

getTheResult();

1 Ответ

0 голосов
/ 20 февраля 2020

Вам необходимо обменять токен доступа на учетные данные сеанса, а затем использовать их для вызова API заказов.

  1. Получить токен для guest (вы сделали это)
  2. Обменный токен для кредитов сеанса :

Чтобы получить сеанс для гостя или зарегистрированного клиента, вы должны передать действительный ресурс JWT / сессионному ресурсу. JWT должен быть передан как заголовок запроса Авторизация: Носитель. В случае успеха вы возвращаете сессионные куки.

REQUEST:
POST /dw/shop/v20_2/sessions HTTP/1.1
Host: example.com
x-dw-client-id: ...
Authorization: Bearer <token>

RESPONSE:
HTTP/1.1 204 NO CONTENT
Set-Cookie : dwsecuretoken_a85a5236a2e852d714eb6f1585efb61c=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT;
Set-Cookie : dwsid=eXv5R3FZGI4BBfbK1Opk5s1mJ-41Aw7ZuaMKxeye5xa16fJMX--AnNkXsvmakbi1UZSzP1zoPmUILgoom1_jKg==;
Set-Cookie : dwanonymous_a85a5236a2e852d714eb6f1585efb61c=bdjalnzmfrkJ0FtYliwud5db67; Max-Age=15552000;
Cache-Control: max-age=0,no-cache,no-store,must-revalidate
API заказа вызовов с кредитами сеанса из предыдущего шага:
REQUEST:
GET /dw/shop/v15_2/orders?status=completed HTTP/1.1
Host: example.com
Cookie: dwsecuretoken_a85a5236a2e852d714eb6f1585efb61c="";dwsid=eXv5R3FZGI4BBfbK1Opk5s1mJ-41Aw7ZuaMKxeye5xa16fJMX--AnNkXsvmakbi1UZSzP1zoPmUILgoom1_jKg==; dwanonymous_a85a5236a2e852d714eb6f1585efb61c=bdjalnzmfrkJ0FtYliwud5db67;
Content-Type: application/json; charset=UTF-8

RESPONSE:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

{
   "_v" : "15.2",
   "count" : ...,
   "data" : [...],
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...