Заказы и Продажи
Система управления заказами и продажами — это сердце любого marketplace. От создания корзины до получения оплаты и доставки — вся цепочка покупательского процесса покрывается API.
Типичный workflow продажи в marketplace:
- Покупатель добавляет товары в корзину (не хранится как отдельный объект)
- Создается заказ с покупательскими данными
- Выставляется счет на оплату
- Покупатель оплачивает заказ
- Заказ передаётся в логистику для доставки
Создание заказа
При оформлении заказа передаются данные покупателя, список товаров с количеством и ценой. Цена фиксируется в момент создания заказа, чтобы защититься от изменений цен.
- REST API
- GraphQL
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();
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)
Счет выставляется после создания заказа и может быть привязан к конкретному платежу. На счете фиксируются все товары с их ценами.
- REST API
- GraphQL
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"
}
]
})
});
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
}
}
}
}
Регистрация оплаты
После оплаты заказа необходимо зарегистрировать платеж. Это позволяет отслеживать финансовые потоки.
- REST API
- GraphQL
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();
mutation PaymentMutation {
managePayment(
payment: {
order: "ORD-001",
amount: 25000,
currency: "RUB",
method: "card",
reference: "PAY-123456"
}
) {
payment {
id
amount
currency
status
method
}
}
}
Статусы заказов
Заказ переходит через несколько статусов:
- pending — заказ оформлен, ожидает обработки
- confirmed — заказ подтвержждён менеджером
- processing — заказ собирается на складе
- shipped — заказ передан в доставку
- delivered — заказ получен покупателем
- completed — заказ завершён, можно оставить отзыв
- cancelled — заказ отменён
Получение списка заказов
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/order?status=pending', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
});
query OrdersQuery {
orders(status: "pending") {
id
order_id
status
total {
amount
currency
}
customer {
name
email
}
}
}
Отметка заказа как оплаченного
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/order/ORD-001/paid', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
});
mutation MarkPaid {
manageOrder(
order: {
identifier: "ORD-001"
},
mark_paid: true
) {
order {
id
status
}
}
}
Далее: Логистика и Доставка