Marketplace Coop

Заказы и Продажи

Система управления заказами и продажами — это сердце любого marketplace. От создания корзины до получения оплаты и доставки — вся цепочка покупательского процесса покрывается API.

Типичный workflow продажи в marketplace:

  1. Покупатель добавляет товары в корзину (не хранится как отдельный объект)
  2. Создается заказ с покупательскими данными
  3. Выставляется счет на оплату
  4. Покупатель оплачивает заказ
  5. Заказ передаётся в логистику для доставки

Создание заказа

При оформлении заказа передаются данные покупателя, список товаров с количеством и ценой. Цена фиксируется в момент создания заказа, чтобы защититься от изменений цен.

POST
      
const response = await fetch(ENDPOINT_URL + '/v1/order', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ACCESS_TOKEN',
  },
  body: JSON.stringify({
    shop: "romashka",
    customer: {
      name: "Иванов Иван",
      email: "ivan@example.com",
      phone: "+79123456789"
    },
    items: [
      {
        product: "oolong-tea-500g",
        qty: 2,
        price: 12500,
        currency: "RUB"
      }
    ],
    shipping_address: {
      line1: "ул. Примерная, д. 10",
      city: "Москва",
      country: "RU"
    }
  })
});

const result = await response.json();
      
    
POST
      
mutation OrderMutation {
  manageOrder(
    order: {
      shop: "romashka",
      customer: {
        name: "Иванов Иван",
        email: "ivan@example.com",
        phone: "+79123456789"
      },
      items: [
        {
          product: "oolong-tea-500g",
          qty: 2,
          price: 12500,
          currency: "RUB"
        }
      ],
      shipping_address: {
        line1: "ул. Примерная, д. 10",
        city: "Москва",
        country: "RU"
      }
    }
  ) {
    order {
      id
      order_id
      status
      total {
        amount
        currency
      }
      items {
        product {
          slug
          translate { title }
        }
        qty
        price
      }
    }
  }
}
      
    

Выставление счета (Invoice)

Счет выставляется после создания заказа и может быть привязан к конкретному платежу. На счете фиксируются все товары с их ценами.

POST
      
const response = await fetch(ENDPOINT_URL + '/v1/invoice', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ACCESS_TOKEN',
  },
  body: JSON.stringify({
    order: "ORD-001",
    due_date: "2025-01-15",
    items: [
      {
        description: "Улун Чай 500г x 2",
        qty: 2,
        price: 12500,
        currency: "RUB"
      }
    ]
  })
});
      
    
POST
      
mutation InvoiceMutation {
  manageInvoice(
    invoice: {
      order: "ORD-001",
      due_date: "2025-01-15",
      items: [
        {
          description: "Улун Чай 500г x 2",
          qty: 2,
          price: 12500,
          currency: "RUB"
        }
      ]
    }
  ) {
    invoice {
      id
      invoice_number
      due_date
      total {
        amount
        currency
      }
    }
  }
}
      
    

Регистрация оплаты

После оплаты заказа необходимо зарегистрировать платеж. Это позволяет отслеживать финансовые потоки.

POST
      
const response = await fetch(ENDPOINT_URL + '/v1/payment', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ACCESS_TOKEN',
  },
  body: JSON.stringify({
    order: "ORD-001",
    amount: 25000,
    currency: "RUB",
    method: "card",
    reference: "PAY-123456"
  })
});

const result = await response.json();
      
    
POST
      
mutation PaymentMutation {
  managePayment(
    payment: {
      order: "ORD-001",
      amount: 25000,
      currency: "RUB",
      method: "card",
      reference: "PAY-123456"
    }
  ) {
    payment {
      id
      amount
      currency
      status
      method
    }
  }
}
      
    

Статусы заказов

Заказ переходит через несколько статусов:

Получение списка заказов

GET
      
const response = await fetch(ENDPOINT_URL + '/v1/order?status=pending', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ACCESS_TOKEN',
  },
});
      
    
POST
      
query OrdersQuery {
  orders(status: "pending") {
    id
    order_id
    status
    total {
      amount
      currency
    }
    customer {
      name
      email
    }
  }
}
      
    

Отметка заказа как оплаченного

POST
      
const response = await fetch(ENDPOINT_URL + '/v1/order/ORD-001/paid', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ACCESS_TOKEN',
  },
});
      
    
POST
      
mutation MarkPaid {
  manageOrder(
    order: {
      identifier: "ORD-001"
    },
    mark_paid: true
  ) {
    order {
      id
      status
    }
  }
}
      
    

Далее: Логистика и Доставка