Описание API#
Выбор способа оплаты ‘CREATE’#
POST https://api-sand.podeli.ru/partners/v1/orders/create
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль МагазинаПартнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
Подсказка
Стандартное время жизни заказа - 6 часов. Лимит может быть изменен в большую или меньшую сторону по запросу партнера (ограничение устанавливается в часах)
Алгоритм действий
Клиент создает заказ на сайте Магазина-Партнера и переходит к выбору способа оплаты.
При выборе клиентом способа оплаты «Подели» вызывается метод CREATE.
Метод возвращает URL для перенаправления клиента на сайт «Подели» для авторизации, скоринга и при положительном сценарии оплаты первого платежа по заказу.
order* |
object |
Заказ |
||
id* |
string(44) |
Идентификатор заказа в Магазине-Партнере |
||
amount* |
number(18,2) |
Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
prepaidAmount* |
number(18,2) |
Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков |
||
items* |
object |
Позиции в заказе |
||
id* |
string(36) |
Идентификатор позиции в Магазине-Партнере |
||
article |
string(50) |
Артикул товара |
||
name* |
string(250) |
Наименование (описание) товара |
||
amount* |
number(18,2) |
Стоимость позиции для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
quantity* |
number(18,2) |
Количество товара в заказе. В случае нецелочисленного кол-ва передавать значение согласно правилу |
||
prepaidAmount* |
number(18,2) |
Сумма аванса, внесенного клиентом через другие способы оплаты, распределенная на конкретные товары в заказе |
||
isTwoStagePayment |
boolean |
Первый платеж по заказу двухстадийный или нет (по умолчанию = true) |
||
deliveryMethod |
string(20) |
Тип доставки (Mall, Delivery, Point of issue) |
||
courierId |
string(50) |
ID курьера |
||
recipient |
string(50) |
ФИО |
||
phoneRecipient |
string(11) |
Номер телефона получателя |
||
phoneRecipientMd5 |
string(50) |
Номер телефона получателя в зашифрованном виде (заполняется если передача данных в открытом виде невозможна) |
||
addressDelivery |
string(250) |
Адрес доставки или магазина или пункта выдачи, код КЛАДР |
||
comment |
string(250) |
Комментарий |
||
phoneMd5 |
string(50) |
Номер телефона клиента в зашифрованном виде (заполняется если передача данных в открытом виде невозможна) |
||
clientInfo* |
object |
Клиент |
||
firstName* |
string(60) |
Имя клиента |
||
lastName* |
string(60) |
Фамилия клиента |
||
middleName |
string(60) |
Отчество клиента |
||
birthdate |
string date |
Дата рождения клиента в формате YYYY-MM-DD |
||
phone* |
string(11) |
Телефон клиента в формате РФ с маской: «7XXXXXXXXXX». |
||
email* |
string(250) |
Email клиента |
||
subPartnerInfo |
object |
Информация о субпартнере: например, Магазин-Партнер подключился не напрямую к Подели, а через другого партнера (Юkassa, Коробка эквайринга и др.) Для партнеров, работающих напрямую с Подели, секция не используется |
||
login* |
string(250) |
Логин субпартнера |
||
name |
string(250) |
Наименование субпартнера |
||
inn |
string(12) |
ИНН субпартнера |
||
ogrn |
string(20) |
ОГРН субпартнера |
||
notificationUrl |
string(500) |
Адрес для http-нотификаций, если не указан, будет использоваться дефолтный из настроек магазина. Обязательно указывать протокол (https или http). |
||
failUrl* |
string(500) |
URL для редиректа клиента в случае неуспешной оплаты первого платежа по заказу. Обязательно указывать протокол (https или http). |
||
successUrl* |
string(500) |
URL для редиректа клиента в случае успешной оплаты первого платежа по заказу. Обязательно указывать протокол (https или http). |
||
failScoringUrl |
string(500) |
URL для редиректа клиента в случае отказа клиенту по скорингу. Обязательно указывать протокол (https или http). |
||
terminalId |
string(36) |
Идентификатор терминала |
||
orderSource |
string(36) |
Канал оформления заказа в Магазине-Партнере. Допустимые значения: mob, web |
||
comment1 |
string(500) |
Комментарий Магазина-Партнера |
||
comment2 |
string(500) |
Комментарий Магазина-Партнера |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор исходного запроса (для связи ответных сообщений) |
status* |
string order_stat us_text |
Статус заказа |
amount |
number double |
Общая сумма подлежащая оплате клиентом |
redirectUrl |
string |
Ссылка-редирект на страницу сервиса «Подели» |
error |
object |
Описания ошибок |
code* |
string |
Код ошибки |
text* |
string |
Текст ошибки |
200 |
Заявка успешно создана |
400 |
Неверно заданные параметры. Проверьте вводимые данные |
401 |
Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен) |
422 |
Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить) |
429 |
Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество) |
500 |
Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок) |
Тело запроса
Пример запроса:
Способ оплаты
{
"order":
{
"id": "test_order",
"amount": 5000.0,
"prepaidAmount": 1000.0,
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8867e",
"article": "3ABC14858383D",
"name": "Клавиатура проводная HyperX Alloy Elite 2",
"amount": 2500.0,
"quantity": 1,
"prepaidAmount": 500.0
},
{
"id": "30b925fb-42ae-469d-960e-7cb093d8868e",
"article": "3ABC14858383D",
"name": "Набор для кройки и шитья Нимбус 2000",
"amount": 2500.0,
"quantity": 1,
"prepaidAmount": 500.0
}],
"deliveryMethod": "Mall",
"courierId": "ttr_234",
"recipient": "Курьерский Иван Иванович",
"phoneRecipient": "89933779999",
"phoneRecipientMd5": "40c71716a4e95b19b15gfaa40d334616",
"addressDelivery": "ул. Первая 5, кв. 121, корпус, этаж,",
"comment": "qwerty",
"phoneMd5": "d495lc2eecb43cd4t6afd4532bf06108",
"isTwoStagePayment": true
},
"clientInfo":
{
"firstName": "Иван",
"lastName": "Иванов",
"middleName": "Иванович",
"birthdate": "1999-11-11",
"phone": "77100000158",
"email": "test@cinimex.ru"
},
"notificationUrl": "https://partner.site/notificationPoint",
"failUrl": "https://failUrl.com",
"successUrl": "https://successUrl.com"
}
Тело ответа
Пример ответа:
{
"status": "CREATED",
"amount": 5000.0,
"redirectUrl": "https://pokupka-sand.podeli.ru/login?guid=2add8220-0da6-4ef0-94d5-854ca4f920d8&amountAll=5000.0&amountFirst=1250.00&flowId=1"
}
Пример Ответа со Статус кодом 400:
{
"error": {
"code": "validation_error",
"text": "Structure 'order' must be filled"
}
}
Пример Ответа со Статус кодом 401:
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Пример Ответа со Статус кодом 422:
{
"error": {
"code": "duplicated_request",
"text": "Запрос с таким X-Correlation-ID fa8b069c-1875-4969-9d3b-494772b0d188 уже был отправлен ранее"
}
}
Пример Ответа со Статус кодом 429:
{
"error": {
"code": "req_number_exceeded",
"text": "Превышен лимит запросов к серверу"
}
}
Пример Ответа со Статус кодом 500:
{
"error": {
"code": "unknown_error",
"text": "При выполнении запроса возникла неизвестная ошибка"
}
}
Пример запроса CREATE на Python
Пример
import json
import requests
url = "https://api-sand.podeli.ru/partners/v1/orders/create"
body = {
'order': {
"id": 100, # Идентификатор заказа в Магазине-Партнере
"amount": 5000.00,
"prepaidAmount": 1000.0,
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8868d",
"article": "3ABC14858383D",
"name": "Компьютерная мышка",
"amount": 5000.00,
"quantity": 1,
"prepaidAmount": 0.0
}
]
},
"clientInfo": {
"birthdate": "1999-01-01",
"phone": "79999999999",
"email": "PetrovPetr@mall.ru"},
"notificationUrl": "https://partner.site/notificationPoint",
"failUrl": "https://failUrl.com",
"successUrl": "https://successUrl.com"}
responce = requests.request(method="POST",
url=url,
data=json.dumps(body),
headers={
"X-Correlation-ID": 'fa8b069c-1875-4969-9d3b-494772b0d188', # Идентификатор транзакции в формате UUID v4
"Authorization": "Basic dXNlck5hbWU6cGFzc3dvcmQ", # Логин и пароль в формате логин:пароль кодированное в base64
"Content-Type": "application/json; charset=utf-8"
},
verify=False, # Проверять ли SSL сертификат, для отладки на dev стенде можно выключать(False)
cert="C:\Users\developer\certs\client.pem") # Полный путь к сертификату
print(responce.status_code) # 200
print(responce.json()) # {'status': 'CREATED', 'amount': 5000.0, 'redirectUrl': 'https://pokupka-sand.podeli.ru/l ...
print(responce.json().get("status")) # CREATED
Создание заказа оффлайн ’CREATE_OFFLINE’#
POST https://api-sand.podeli.ru/partners/v1/orders/create_offline
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль МагазинаПартнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
Подсказка
Рекомендации по настройке таймаутов:
ожидание ответа на метод create - в 60 секунд
метод info по статусам опрашивать с периодичностью 10 сек до перехода заказа в терминальный статус
Алгоритм действий
Клиент, находясь в оффлайн Магазине Партнера показывает кассиру QR в мобильном приложении ПОДЕЛИ.
Кассир сканирует QR код, ПО кассы извлекает из него информацию об external_id клиента в «Подели» и вызывает метод CREATE_OFFLINE
В ПОДЕЛИ создается заказ, запускается скоринг по клиенту.
order* |
object |
Заказ |
||
id* |
string(44) |
Идентификатор заказа в Магазине-Партнере |
||
amount* |
number(18,2) |
Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
prepaidAmount* |
number(18,2) |
Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков |
||
items* |
object |
Позиции в заказе |
||
id* |
string(36) |
Идентификатор позиции в Магазине-Партнере |
||
article |
string(50) |
Артикул товара |
||
name* |
string(250) |
Наименование (описание) товара |
||
amount* |
number(18,2) |
Сумма для оплаты по позиции через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
quantity* |
number(18,2) |
Количество товара в заказе. В случае нецелочисленного кол-ва передавать значение согласно правилу |
||
prepaidAmount* |
number(18,2) |
Сумма аванса, внесенного клиентом через другие способы оплаты, распределенная на конкретные товары в заказе |
||
isTwoStagePayment |
boolean |
Первый платеж по заказу двухстадийный или нет (для этого метода всегда false) |
||
latitude |
number |
Широта |
||
longitude |
number |
Долгота |
||
mall* |
string(250) |
Торговый центр |
||
address* |
string(250) |
Адрес магазина |
||
cashRegisterNumber |
string(250) |
Номер кассы |
||
cashierNumber |
string(250) |
Номер кассира |
||
comment |
string(500) |
Комментарий |
||
clientInfo* |
object |
Клиент |
||
id
|
string |
external id Клиента в «Подели», закодированное в base64, полученный в QR коде |
||
terminalId |
string(36) |
Идентификатор терминала |
||
comment1 |
string(500) |
Комментарий Магазина-Партнера |
||
comment2 |
string(500) |
Комментарий Магазина-Партнера |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор исходного запроса (для связи ответных сообщений) |
Тело сообщения приходит пустым
200 |
Заявка успешно создана |
400 |
Неверно заданные параметры. Проверьте вводимые данные |
401 |
Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен) |
422 |
Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить) |
429 |
Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество) |
500 |
Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок) |
Тело запроса
Пример запроса:
Способ оплаты
{
"order":
{
"id": "test_order_offline",
"amount": 5000.0,
"prepaidAmount": 1000.0,
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8867e",
"article": "3ABC14858383D",
"name": "Клавиатура проводная HyperX Alloy Elite 2",
"amount": 2500.0,
"quantity": 1,
"prepaidAmount": 500.0
},
{
"id": "30b925fb-42ae-469d-960e-7cb093d8868e",
"article": "3ABC14858383D",
"name": "Набор для кройки и шитья Нимбус 2000",
"amount": 2500.0,
"quantity": 1,
"prepaidAmount": 500.0
}],
"latitude": 59.941630,
"longitude": 30.418515,
"mall": "ТРЦ Сити Молл",
"address": "...",
"cashRegisterNumber": "1234567890",
"cashierNumber": "0987654321",
"comment": "qwerty",
"isTwoStagePayment": false
},
"terminalId": "1234",
"comment1": "qwerty",
"comment2": "qwerty",
"clientInfo":
{
"id": "ODIw"
}
}
Тело ответа
Пример ответа со Статус кодом 200:
Пустой ответ (в ответе данного метода передается только код ответа)
Пример Ответа со Статус кодом 400:
{
"error": {
"code": "validation_error",
"text": "Structure 'order' must be filled"
}
}
Пример Ответа со Статус кодом 401:
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Пример Ответа со Статус кодом 422:
{
"error": {
"code": "duplicated_request",
"text": "Запрос с таким X-Correlation-ID fa8b069c-1875-4969-9d3b-494772b0d188 уже был отправлен ранее"
}
}
Пример Ответа со Статус кодом 429:
{
"error": {
"code": "req_number_exceeded",
"text": "Превышен лимит запросов к серверу"
}
}
Пример Ответа со Статус кодом 500:
{
"error": {
"code": "unknown_error",
"text": "При выполнении запроса возникла неизвестная ошибка"
}
}
Пример запроса CREATE_OFFLINE на Python
Пример
import json
import requests
url = "https://api-sand.podeli.ru/partners/v1/orders/create_offline"
body = {
'order': {
"id": 100, # Идентификатор заказа в Магазине-Партнере
"amount": 5000.00,
"prepaidAmount": 1000.0,
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8868d",
"article": "3ABC14858383D",
"name": "Компьютерная мышка",
"amount": 5000.00,
"quantity": 1,
"prepaidAmount": 0.0
}
]
},
"clientInfo": {
"id": "ODIw"
},
"notificationUrl": "https://partner.site/notificationPoint",
"failUrl": "https://failUrl.com",
"successUrl": "https://successUrl.com"}
responce = requests.request(method="POST",
url=url,
data=json.dumps(body),
headers={
"X-Correlation-ID": 'fa8b069c-1875-4969-9d3b-494772b0d188', # Идентификатор транзакции в формате UUID v4
"Authorization": "Basic dXNlck5hbWU6cGFzc3dvcmQ", # Логин и пароль в формате логин:пароль кодированное в base64
"Content-Type": "application/json; charset=utf-8"
},
verify=False, # Проверять ли SSL сертификат, для отладки на dev стенде можно выключать(False)
cert="C:\Users\developer\certs\client.pem") # Полный путь к сертификату
print(responce.status_code) # 200
print(responce.json()) # {'status': 'CREATED', 'amount': 5000.0, 'redirectUrl': 'https://pokupka-sand.podeli.ru/l ...
print(responce.json().get("status")) # CREATED
Подтверждение заказа ‘COMMIT’#
POST https://api-sand.podeli.ru/partners/v1/orders/{orderId}/commit
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль Магазина Партнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
Алгоритм действий
После получения от «Подели» статуса заказа „wait_for_commit“ (в виде HTTP-нотификации, либо при вызове метода INFO) Магазин-Партнер подтверждает сделку, вызывая метод COMMIT.
Сервис «Подели» посылает запрос на авторизацию захолдированного первого платежа по рассрочке в систему эквайринга банка.
Сервис «Подели» возвращает Магазину-Партнеру результат авторизации первого платежа по рассрочке в HTTP-нотификации.
order* |
object |
Заказ |
||
amount* |
number(18,2) |
Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
prepaidAmount* |
number(18,2) |
Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков |
||
items |
object |
Подтвержденные позиции в заказе. Cекцию необходимо заполнять только в случае, если корзина, переданная в CREATE, изменилась (не все позиции попали в итоговую корзину) |
||
id* |
string(36) |
Идентификатор позиции в Магазине-Партнере |
||
article |
string(50) |
Артикул товара |
||
quantity* |
number(18,2) |
Количество товара, отгрузку которого подтверждает Магазин-Партнер. Не должно превышать количество позиций товара, указанное при создании заказа методом CREATE |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор исходного запроса (для связи ответных сообщений) |
status* |
enum order_status_text |
Статус заказа |
|
amount |
number double |
Сумма для оплаты через «Подели» |
|
paymentSchedule |
object |
Данные по графику платежей |
|
paymentNumber* |
string |
Номер платежа |
|
paymentDate* |
string date |
Дата платежа |
|
paymentAmount* |
number |
Сумма платежа (в рублях, с точностью до 2 знаков) |
|
statusName* |
string |
Статус платежа |
|
typeName* |
string |
Тип платежа |
|
error |
object |
Описания ошибок |
|
code* |
string |
Код ошибки |
|
text* |
string |
Текст ошибки |
200 |
Заявка успешно создана |
400 |
Неверно заданные параметры. Проверьте вводимые данные |
401 |
Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен) |
422 |
Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить) |
429 |
Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество) |
500 |
Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок) |
Тело запроса
Пример запроса:
{
"order":{
"amount": 2100.00,
"prepaidAmount": 200.00
}
}
Тело ответа
Пример ответа:
Статус заказа
{
"status": "COMMITTED",
"amount": 5000.00,
"paymentSchedule": [
{
"paymentNumber": "1",
"paymentDate": "2022-07-13T09:45",
"paymentAmount": 1250.00,
"statusName": "HOLD",
"typeName": "MAIN"
},
{
"paymentNumber": "2",
"paymentDate": "2022-07-27T09:45",
"paymentAmount": 1250.00,
"statusName": "SCHEDULED",
"typeName": "MAIN"
},
{
"paymentNumber": "3",
"paymentDate": "2022-08-10T09:45",
"paymentAmount": 1250.00,
"statusName": "SCHEDULED",
"typeName": "MAIN"
},
{
"paymentNumber": "4",
"paymentDate": "2022-08-24T09:45",
"paymentAmount": 1250.00,
"statusName": "SCHEDULED",
"typeName": "MAIN"
}]
}
Пример Ответа со Статус кодом 400:
{
"error": {
"code": "validation_error",
"text": "Structure 'order' must be filled"
}
}
Пример Ответа со Статус кодом 401:
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Пример Ответа со Статус кодом 422:
{
"error": {
"code": "incorrect_order_status",
"text": "Ошибка при обработке заказа: в текущем статусе невозможно выполнить действие"
}
}
Пример Ответа со Статус кодом 429:
{
"error": {
"code": "req_number_exceeded",
"text": "Превышен лимит запросов к серверу"
}
}
Пример Ответа со Статус кодом 500:
{
"error": {
"code": "unknown_error",
"text": "При выполнении запроса возникла неизвестная ошибка"
}
}
Пример запроса COMMIT на Python
Пример
import json
import requests
url = "https://api-sand.podeli.ru/partners/v1/orders/100/commit" # Идентификатор заказа в Магазине-Партнере передается в адресной строке
body = {
"order":{
"amount": 5000.00,
"prepaidAmount": 1250.00
}
}
responce = requests.request(method="POST",
url=url,
data=json.dumps(body),
headers={
"X-Correlation-ID": 'fa8b069c-1875-4969-9d3b-494772b0d188', # Идентификатор транзакции в формате UUID v4
"Authorization": "Basic dXNlck5hbWU6cGFzc3dvcmQ", # Логин и пароль в формате логин:пароль кодированное в base64
"Content-Type": "application/json; charset=utf-8"
},
verify=False, # Проверять ли SSL сертификат, для отладки на dev стенде можно выключать(False)
cert="C:\Users\developer\certs\client.pem") # Полный путь к сертификату
print(responce.status_code) # 200
print(responce.json()) # {"status": "COMMITTED", "amount": 5000.00, "paymentSchedule": [{ "paymentNumber": "1", ...
print(responce.json().get("status")) # COMMITTED
Метод отмены заказа ‘CANCEL’#
POST https://api-sand.podeli.ru/partners/v1/orders/{orderId}/cancel
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль МагазинаПартнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
Алгоритм действий
При отмене заказа (по инициативе клиента или самого Магазина Партнера) вызывается метод CANCEL.
Отменить возможно только заказы в статусах: «created», «scoring», «wait_for_commit».
Сервис «Подели» отменяет заказ, отменяет холд первого платежа (если был выполнен), отменяет автоплатежи по графику.
cancellationInitiator* |
string |
Инициатор отмены Заказа - заполнить: shop - если заказ отменен Магазином Партнером client - если заказ отменен Клиентом |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор исходного запроса (для связи ответных сообщений) |
status* |
enum order_status_text |
Статус заказа |
|
amount |
number double |
Сумма для оплаты через «Подели» |
|
paymentSchedule |
object |
Данные по графику платежей |
|
paymentNumber* |
string |
Номер платежа |
|
paymentDate* |
string date |
Дата платежа |
|
paymentAmount* |
number |
Сумма платежа (в рублях, с точностью до 2 знаков) |
|
statusName* |
string |
Статус платежа |
|
typeName* |
string |
Тип платежа |
|
error |
object |
Описания ошибок |
|
code* |
string |
Код ошибки |
|
text* |
string |
Текст ошибки |
200 |
Заявка успешно создана |
400 |
Неверно заданные параметры. Проверьте вводимые данные |
401 |
Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен) |
422 |
Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить) |
423 |
Невозможно отменить заказа, платеж находится в обработке (Заказ в статусе APPROVED не может быть отменен) |
429 |
Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество) |
500 |
Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок) |
Тело запроса
Пример запроса:
{
"cancellationInitiator":"shop"
}
Тело ответа
Пример ответа:
{
"status": "CANCELLED",
"amount": 5000.00,
"paymentSchedule": []
}
Пример Ответа со Статус кодом 400:
{
"error": {
"code": "validation_error",
"text": "The 'cancellationInitiator' field must be filled in"
}
}
Пример Ответа со Статус кодом 401:
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Пример Ответа со Статус кодом 422:
{
"error": {
"code": "incorrect_order_status",
"text": "Ошибка при обработке заказа: в текущем статусе невозможно выполнить действие"
}
}
Пример Ответа со Статус кодом 429:
{
"error": {
"code": "req_number_exceeded",
"text": "Превышен лимит запросов к серверу"
}
}
Пример Ответа со Статус кодом 500:
{
"error": {
"code": "unknown_error",
"text": "При выполнении запроса возникла неизвестная ошибка"
}
}
Пример запроса CANCEL на Python
Пример запроса «Отмена заказа»
import json
import requests
url = "https://api-sand.podeli.ru/partners/v1/orders/100/cancel" # Идентификатор заказа в Магазине-Партнере передается в адресной строке
body = {
"cancellationInitiator":"shop"
}
responce = requests.request(method="POST",
url=url,
data=json.dumps(body),
headers={
"X-Correlation-ID": 'fa8b069c-1875-4969-9d3b-494772b0d188', # Идентификатор транзакции в формате UUID v4
"Authorization": "Basic dXNlck5hbWU6cGFzc3dvcmQ", # Логин и пароль в формате логин:пароль кодированное в base64
"Content-Type": "application/json; charset=utf-8"
},
verify=False, # Проверять ли SSL сертификат, для отладки на dev стенде можно выключать(False)
cert="C:\Users\developer\certs\client.pem") # Полный путь к сертификату
print(responce.status_code) # 200
print(responce.json()) # { "status": "CANCELLED", "amount": 5000.00, "paymentSchedule": []}
print(responce.json().get("status")) # CANCELLED
Возврат товара ‘REFUND’#
POST https://api-sand.podeli.ru/partners/v1/orders/{orderId}/refund
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль МагазинаПартнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
Алгоритм действий
При необходимости оформить возврат товаров из заказа Магазин Партнер вызывает метод REFUND.
Оформить возврат возможно только для заказов, которые были в статусе „completed“.
order* |
object |
Заказ |
|||
refund* |
object |
Возврат |
|||
id* |
string(36) |
id возврата в Магазине Партнере |
|||
initiator* |
string |
Инициатор возврата (допустимые значения - „client“, „shop“) |
|||
items* |
object |
Возвращаемые позиции из заказа |
|||
id* |
string(36) |
id позиции из заказа для возврата |
|||
refundedQuantity* |
number(18,2) |
Количество возвращаемого товара |
|||
refundedSum |
number(18,2) |
Сумма к возврату по товару, оплаченная через «Подели». Заполнение данного поля разрешается только для партнеров с которыми согласована возможность указания суммы к возврату (по бизнес-процессу невозможен полный возврат стоимости товара, например, удерживается комиссия). В остальных случаях данное поле не должно быть заполнено, а сумма к возврату будет рассчитана на стороне «Подели» на основе данных по заказу. |
|||
description |
string(250) |
описание возврата в свободной форме |
|||
comment1 |
string(500) |
Комментарий Магазина-Партнера |
|||
addParams |
object |
Дополнительные параметры возврата |
|||
key |
string |
Код дополнительного параметра |
|||
value |
string |
Значение дополнительного пар |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор исходного запроса (для связи ответных сообщений) |
order* |
object |
Заказ |
||
id* |
string |
Идентификатор заказа в Магазине-Партнера |
||
status* |
string |
Статус заказа |
||
items |
object |
Позиция в заказе |
||
id* |
string |
Идентификатор заказа в Магазине-Партнера |
||
article |
string |
Артикул товара |
||
name |
string |
Наименование (описание) товара |
||
amount* |
double |
Стоимость позиции для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
quantity* |
number |
Количество товара в заказе |
||
refund* |
object |
Возврат |
||
id* |
string |
id возврата |
||
status* |
string |
Статус возврата. Не отражает фактический статус операции |
||
refundRequestDate |
string date |
Дата заявления на возврат |
||
totalRefundedAmount* |
number |
Общая сумма возврата |
||
refundedAmountCredit* |
number |
Сумма возврата, уплаченная через «Подели» |
||
refundedPrepaidAmount* |
number |
Общая сумма возвращенной предоплаты другим способом, отличным от сервиса «Подели» (в рублях, с точностью до 2 знаков) |
||
refundedItems* |
object |
Возвращенные позиции из заказа |
||
id* |
string |
Идентификатор позиции в Магазине-Партнера |
||
refundedQuantity* |
number |
Количество возвращенного товара |
||
refundedAmount* |
number |
Сумма возвращенной оплаты |
||
refundedPrepaidAmount* |
number |
Сумма возвращенной предоплаты |
||
error |
object |
Описания ошибок |
||
code* |
string |
Код ошибки |
||
text* |
string |
Текст ошибки |
200 |
Заявка успешно создана |
400 |
Неверно заданные параметры. Проверьте вводимые данные |
401 |
Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен) |
422 |
Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить) |
429 |
Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество) |
500 |
Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок) |
Тело запроса
Пример запроса:
{
"order": {
"refund": {
"id": 1234466,
"initiator": "client",
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8867e",
"refundedQuantity": 1
}
],
"addParams": [
{
"key": "mall",
"value": "ТРЦ Сити Молл"
},
{
"key": "cashRegisterNumber",
"value": "1234567890"
},
{
"key": "cashierNumber",
"value": "0987654321"
},
{
"key": "terminalId",
"value": "1234"
}
],
"comment1": "комментарий"
}
}
}
Тело ответа
Пример ответа:
Отмена заказа
{
"order":
{
"id": "test_order",
"status": "REFUNDED",
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8867e",
"article": "3ABC14858383D",
"name": "Клавиатура проводная HyperX Alloy Elite 2",
"amount": 2500.00,
"quantity": 1
},
{
"id": "30b925fb-42ae-469d-960e-7cb093d8868e",
"article": "3ABC14858383D",
"name": "Набор для кройки и шитья Нимбус 2000",
"amount": 2500.00,
"quantity": 1
}]
},
"refund":
{
"id": "1234466",
"status": "PENDING",
"refundRequestDate": "2022-07-13T09:50:08.108628",
"totalRefundedAmount": 3000.00,
"refundedPrepaidAmount": 500.00,
"refundedAmountCredit": 2500.00,
"refundedItems": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8867e",
"refundedQuantity": 1,
"refundedAmount": 2500.00,
"refundedPrepaidAmount": 500.00
}]
}
}
Пример Ответа со Статус кодом 400:
{
"error": {
"code": "validation_error",
"text": "Structure 'order' must be filled"
}
}
Пример Ответа со Статус кодом 401:
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Пример Ответа со Статус кодом 422:
{
"error": {
"code": "incorrect_order_status",
"text": "Ошибка при обработке заказа: в текущем статусе невозможно выполнить действие"
}
}
Пример Ответа со Статус кодом 429:
{
"error": {
"code": "req_number_exceeded",
"text": "Превышен лимит запросов к серверу"
}
}
Пример Ответа со Статус кодом 500:
{
"error": {
"code": "unknown_error",
"text": "При выполнении запроса возникла неизвестная ошибка"
}
}
Пример запроса REFUND на Python
Пример запроса на возврат
import json
import requests
url = "https://api-sand.podeli.ru/partners/v1/orders/100/refund" # Идентификатор заказа в Магазине-Партнере передается в адресной строке
body = {
"order": {
"id": "100",
"refund": {
"id": 1234466,
"initiator": "client",
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8868d",
"refundedQuantity": 1
}
]
}
}
}
responce = requests.request(method="POST",
url=url,
data=json.dumps(body),
headers={
"X-Correlation-ID": 'fa8b069c-1875-4969-9d3b-494772b0d188', # Идентификатор транзакции в формате UUID v4
"Authorization": "Basic dXNlck5hbWU6cGFzc3dvcmQ", # Логин и пароль в формате логин:пароль кодированное в base64
"Content-Type": "application/json; charset=utf-8"
},
verify=False, # Проверять ли SSL сертификат, для отладки на dev стенде можно выключать(False)
cert="C:\Users\developer\certs\client.pem") # Полный путь к сертификату
print(responce.status_code) # 200
print(responce.json()) # { "order": { "id": "100", "status": "REFUNDED", "items": [{ "id": "3030b925fb-42ae-469d ...
print(responce.json().get("order").get("status") # REFUNDED
Получение информации по заказу ‘INFO’#
Доступен для вызова в любой момент после создания заказа методом CREATE.
GET https://api-sand.podeli.ru/partners/v1/orders/{orderId}/info
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль МагазинаПартнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
order* |
object |
Заказ |
||
id* |
string |
Идентификатор заказа в Магазине-Партнера |
||
amount |
number |
Сумма для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
prepaidAmount |
number |
Сумма аванса, внесенного клиентом через другие способы оплаты. Сумма указывается в рублях с точностью до двух знаков |
||
amountOrder |
number |
Общая сумма заказа (в рублях). Сумма указывается в рублях с точностью до двух знаков |
||
status* |
string |
Статус заказа |
||
date* |
date-time |
Дата заказа |
||
items |
object |
Позиции в заказе |
||
id* |
string |
Идентификатор заказа в Магазине-Партнера |
||
article |
string |
Артикул товара |
||
name |
string |
Наименование (описание) товара |
||
amount* |
double |
Стоимость позиции для оплаты через «Подели». Сумма указывается в рублях с точностью до двух знаков |
||
quantity* |
number |
Количество товара в заказе |
||
prepaidAmount |
number |
Сумма аванса, внесенного клиентом через другие способы оплаты, распределенная на конкретные позиции в заказе. Сумма указывается в рублях с точностью до двух знаков |
||
clientInfo |
object |
Клиент |
||
firstName |
string |
Имя клиента (Данные скрыты) |
||
lastName |
string |
Фамилия клиента (Данные скрыты) |
||
middleName |
string |
Отчество клиента (Данные скрыты) |
||
birthdate |
string |
Дата рождения клиента в формате YYYY-MM-DD (Данные скрыты) |
||
phone* |
string |
Телефон клиента в формате РФ с маской: «7XXXXXXXXXX» (Данные скрыты) |
||
string |
Email клиента |
|||
paymentSchedule* |
object |
Данные по графику платежей |
||
paymentNumber* |
string |
Номер платежа |
||
paymentDate* |
string |
Дата платежа |
||
paymentAmount* |
number |
Сумма платежа (в рублях, с точностью до 2 знаков) |
||
statusName* |
string |
Статус платежа |
||
refund* |
object |
Данные по возвратам |
||
id* |
string |
id возврата |
||
status* |
string |
Статус возврата. Не отражает фактический статус операции |
||
refundDate* |
string |
Дата возврата |
||
totalRefundedAmount* |
number |
Сумма возврата товаров (в рублях, с точностью до 2 знаков) |
||
refundedPrepaidAmount* |
number |
Общая сумма возвращенной предоплаты другим способом, отличным от сервиса «Подели» (в рублях, с точностью до 2 знаков) |
||
refundedAmountCredit* |
number |
Сумма возврата, оплаченная через «Подели» |
||
refundedItems |
object |
Возвращенные позиции из заказа |
||
id* |
string |
Идентификатор позиции в магазине партнера |
||
refundedQuantity* |
number |
Количество возвращенного товара |
||
refundedAmount* |
number |
Сумма возвращенной оплаты |
||
refundedPrepaidAmount* |
number |
Сумма возвращенной предоплаты |
||
error |
object |
Описания ошибок |
||
code* |
string |
Код ошибки |
||
text* |
string |
Текст ошибки |
200 |
Заявка успешно создана |
400 |
Неверно заданные параметры. Проверьте вводимые данные |
401 |
Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен) |
422 |
Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие. (Сервер возвращает этот код, если он принял и распознал запрос, но в теле запроса допущена логическая ошибка, которая мешает его выполнить) |
429 |
Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество) |
500 |
Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок) |
Тело ответа
Пример ответа:
Информация по заказу
{
"order":
{
"id": "test_order",
"amount": 5000.00,
"status": "REFUNDED",
"prepaidAmount": 1000.00,
"amountOrder": 6000.00,
"date": "2022-07-13T09:44:26.100050Z",
"items": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8867e",
"article": "3ABC14858383D",
"name": "Клавиатура проводная HyperX Alloy Elite 2",
"amount": 2500.00,
"quantity": 1,
"prepaidAmount": 500.00
},
{
"id": "30b925fb-42ae-469d-960e-7cb093d8868e",
"article": "3ABC14858383D",
"name": "Набор для кройки и шитья Нимбус 2000",
"amount": 2500.00,
"quantity": 1,
"prepaidAmount": 500.00
}]
},
"clientInfo":
{
"firstName": "*",
"lastName": "*",
"middleName": "*",
"birthdate": "0001-01-01",
"phone": "*",
"email": "*"
},
"paymentSchedule": [
{
"paymentNumber": "1",
"paymentDate": "2022-07-13T09:45",
"paymentAmount": 1250.00,
"statusName": "PAID"
},
{
"paymentNumber": "2",
"paymentDate": "2022-07-27T09:45",
"paymentAmount": 417.00,
"statusName": "SCHEDULED"
},
{
"paymentNumber": "3",
"paymentDate": "2022-08-10T09:45",
"paymentAmount": 417.00,
"statusName": "SCHEDULED"
},
{
"paymentNumber": "4",
"paymentDate": "2022-08-24T09:45",
"paymentAmount": 416.00,
"statusName": "SCHEDULED"
}],
"refund": [
{
"id": "1234466",
"status": "PROCESSED",
"refundDate": "2022-07-13T09:50:08.108628",
"totalRefundedAmount": 3000.00,
"refundedPrepaidAmount": 500.00,
"refundedAmountCredit": 2500.00,
"refundedItems": [
{
"id": "30b925fb-42ae-469d-960e-7cb093d8867e",
"refundedQuantity": 1,
"itemRefundedAmount": 2500.00,
"itemRefundedPrepaidAmount": 500.00
}]
}]
}
Пример Ответа со Статус кодом 404:
{
"error": {
"code": "not_found_order",
"text": "Заказ не найден"
}
}
Пример Ответа со Статус кодом 401:
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Пример запроса INFO на Python
Пример запроса «Получение информации по заказу»
import json
import requests
url = "https://api-sand.podeli.ru/partners/v1/orders/100/info" # Идентификатор заказа в Магазине-Партнере передается в адресной строке
responce = requests.request(method="GET",
url=url,
headers={
"X-Correlation-ID": 'fa8b069c-1875-4969-9d3b-494772b0d188', # Идентификатор транзакции в формате UUID v4
"Authorization": "Basic dGVzdDI6dGVzdA==", # Логин и пароль в формате логин:пароль кодированное в base64
"Content-Type": "application/json; charset=utf-8"
},
verify=False, # Проверять ли SSL сертификат, для отладки на dev стенде можно выключать(False)
cert="C:\Users\developer\certs\client.pem") # Полный путь к сертификату
print(responce.status_code) # 200
print(responce.json()) # { "order": { "id": "test_order", "amount": 5000.00, "status": "COMMITTED", "p ...
print(responce.json().get("order").get("status")) # COMMITTED
Метод сверки заказов ‘ORDER_RECONCILIATION’#
GET https://api-sand.podeli.ru/partners/v1/orders/order_reconciliation?dateFrom={dateFrom}&dateTo={dateTo}&mall={mall}&cashRegisterNumber={cashRegisterNumber}&detailing={detailing}
dateFrom* |
Дата/время начала периода (формат YYYY-MM-DD ТHH24:MM:SS±HH:MM) |
dateTo* |
Дата/время окончания период (формат YYYY-MM-DD ТHH24:MM:SS±HH:MM) |
mall |
Торговый центр |
cashRegisterNumber |
Номер кассы |
detailing* |
Флаг запроса детализированной сверки („true“ - детализированная сверка, „false“ - общая сверка) |
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль МагазинаПартнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
order |
object |
Информация по заказам |
||
payments |
object |
Информация по оплатам |
||
sum* |
number |
Сумма заказов |
||
count* |
integer |
Количество заказов |
||
refunds |
object |
Информация по возвратам |
||
sum* |
number |
Сумма возвратов |
||
count* |
integer |
Количество возвратов |
||
total |
object |
Информация по оплатам с учетом возвратов |
||
sum* |
number |
Сумма заказов с учетом возвратом |
||
count* |
integer |
Общее количество заказов/возвратов |
||
error |
object |
Ошибка |
||
code* |
string |
Код ошибки |
||
text* |
string |
Текст ошибки |
order |
object |
Информация по заказам |
||
payments |
object |
Информация по оплатам |
||
orderId* |
string |
Идентификатор заказа |
||
amount* |
number |
Сумма заказа |
||
transactionDate* |
string |
Дата/время заказа |
||
refunds |
object |
Информация по возвратам |
||
refundId* |
string |
Идентификатор возврата |
||
amount* |
integer |
Сумма возврата |
||
transactionDate* |
string |
Дата/время возврата |
||
error |
object |
Ошибка |
||
code* |
string |
Код ошибки |
||
text* |
string |
Текст ошибки |
200 |
Запрос успешно обработан |
400 |
Отсутствует X-Correlation-ID или обязательный параметр запроса |
401 |
Ошибка аутентификации: неверный логин/пароль |
402 |
Истек срок действия договора с Магазином-Партнером |
402 |
Превышено количество запросов от Магазина-Партнера |
405 |
Неверный формат даты |
416 |
Превышен период сверки заказов |
500 |
При выполнении запроса возникла неизвестная ошибка |
Тело ответа
Пример ответа:
Cверка заказов(общая)
{
"order": {
"payments": {
"sum": 5000.00,
"count": 1
},
"refunds": {
"sum": 1000.00,
"count": 1
},
"total": {
"sum": 4000.00,
"count": 2
}
}
}
Сверка заказов(детализированная)
{
"order": {
"payments": [
{
"orderId": "test_order",
"amount": 5000.00,
"transactionDate": "2024-01-01T10:00:00.000000"
}
],
"refunds": [
{
"refundId": "test_refund",
"amount": 1000.00,
"transactionDate": "2024-01-01T11:00:00.000000"
}
]
}
}
Получения графика платежей ’CALCULATE’#
POST https://api-sand.podeli.ru/partners/v1/orders/calculate
Content-Type* |
string |
Тип контента (application/json) |
Authorization: Basic* |
base64 |
Логин и пароль МагазинаПартнера |
X-Correlation-ID* |
string(36) |
Идентификатор транзакции в формате UUID v4. Должен быть одинаковым для всех вызовов в рамках обработки одного заказа. Также используется при отправке HTTP-нотификаций |
Алгоритм действий
Партнер направляет в сервис «Подели» сумму для рассчета графика платежа.
Сервис «Подели» направляет в ответ рассчитанный график платежей.
sum* |
number(18;2) |
Сумма для рассчета графика |
X-Retry-After |
number |
Время в секундах, через сколько можно повторить следующий запрос |
X-Correlation-ID* |
string |
Идентификатор исходного запроса (для связи ответных сообщений) |
paymentSchedule |
object |
Данные по графику платежей |
|
paymentNumber* |
string |
Номер платежа |
|
paymentDate* |
string date |
Дата платежа |
|
paymentAmount* |
number |
Сумма платежа (в рублях, с точностью до 2 знаков) |
|
error |
object |
Описания ошибок |
|
code* |
string |
Код ошибки |
|
text* |
string |
Текст ошибки |
200 |
График успешно рассчитан |
400 |
Неверно заданные параметры. Проверьте вводимые данные |
401 |
Аутентификация не пройдена: введены неверные логин и/или пароль или партнер отключен. (Информация доступна только зарегистрированным пользователям или запаролена. Если пользователь не авторизовался, доступ к странице невозможен) |
429 |
Сработали лимиты по вызовам. В заголовке X-Retry-After придет время в секундах, через сколько можно повторить следующий запрос. (Пользователь посылает слишком много запросов за короткий временной промежуток, и сервер не может обработать такое количество) |
500 |
Ошибка сервера. Обратитесь в службу поддержки. (Сервер не может обработать запрос по причине внутренних ошибок) |
Тело запроса
Пример запроса:
{
"sum": 400
}
Тело ответа
Пример ответа:
{
"paymentSchedule": [
{
"paymentNumber": "1",
"paymentDate": "2022-11-03",
"paymentAmount": 100.00
},
{
"paymentNumber": "2",
"paymentDate": "2022-11-17",
"paymentAmount": 100.00
},
{
"paymentNumber": "3",
"paymentDate": "2022-12-01",
"paymentAmount": 100.00
},
{
"paymentNumber": "4",
"paymentDate": "2022-12-15",
"paymentAmount": 100.00
}]
}
Пример Ответа со Статус кодом 400:
{
"error": {
"code": "validation_error",
"text": "The 'cancellationInitiator' field must be filled in"
}
}
Пример Ответа со Статус кодом 401:
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Пример запроса CALCULATE на Python
Пример запроса «Рассчет графика»
import json
import requests
url = "https://api-sand.podeli.ru/partners/v1/orders/calculate" # Идентификатор заказа в Магазине-Партнере передается в адресной строке
body = {
"sum":400
}
responce = requests.request(method="POST",
url=url,
data=json.dumps(body),
headers={
"X-Correlation-ID": 'fa8b069c-1875-4969-9d3b-494772b0d188', # Идентификатор транзакции в формате UUID v4
"Authorization": "Basic dXNlck5hbWU6cGFzc3dvcmQ", # Логин и пароль в формате логин:пароль кодированное в base64
"Content-Type": "application/json; charset=utf-8"
},
verify=False, # Проверять ли SSL сертификат, для отладки на dev стенде можно выключать(False)
cert="C:\Users\developer\certs\client.pem") # Полный путь к сертификату
print(responce.status_code) # 200
print(responce.json()) # {"paymentSchedule": []}
Подсказка
Правила заполнения полей запроса при передаче дробных значений количества товара в ситуации, когда количество товара - дробное, например:
1,56 кг яблок стоимостью 234,67 р/кг,
0,254 кг салат стоимость 801,20 р/кг
поля amount, quantity и prepaidAmount секции order/items необходимо заполнять следующим образом:
items[1]
в поле items/amount - указать сумму оплаты единицы измерения товара через «Подели», 234,67
в поле items/quantity - дробное количество, 1,56
в поле items/prepaidAmount - ничего не передавать (поле необязательное)
items[2]
в поле items/amount - 801,20
в поле items/quantity - 0,254
в поле items/prepaidAmount - ничего не передавать (поле необязательное)
поля amount и prepaidAmount секции order заполнять следующим образом:
в поле order/amount - передать сумму округленных(математически) значений стоимости каждой позиции из заказа, округл(131,4152 ;2) + округл(203,5048 ;2) = 131,42+203,50 = 334,92
в поле order/prepaidAmount - сумму скидки по заказу либо сумму, оплаченную бонусными баллами (общую по заказу)
Библиотека для API#
Для Вашего удобства, чтобы ускорить разработку, мы сделали обертку, которую Вы можете интегрировать в ваш проект и посмотреть, как это работает:
Архив для Python ссылка на архив Python
Архив для dotNet ссылка на архив Net
Архив для php ссылка на архив php
Архив для Битрикс ссылка на архив