Внешние системы (ICAN)
Кредитная система ICAN и системы партнёров обращаются к Wasyt напрямую, сервер → сервер, по секретному ключу вместо токена пользователя.
Заголовки
| Заголовок | Кто передаёт | Значение |
|---|---|---|
External-System-Secret-Key | все | Ключ внешней системы. Неверный или пустой — любой метод отвечает 404 |
Company-Ican-Uuid | ICAN | UUID компании в ICAN |
Company-Wasyt-Uuid | ICAN, партнёр | UUID компании в Wasyt (wasyt_uuid) |
Company-Partner-Uuid | партнёр (/external/partner/*) | UUID компании у партнёра |
Accept | все | application/json |
Accept-Language | все | ru, uz или oz — язык названий и ошибок |
- Заголовок компании определяет, от чьего имени идёт запрос: система работает как директор этой компании и видит её филиалы. Сначала проверяется
Company-Ican-Uuid(у партнёра —Company-Partner-Uuid), затемCompany-Wasyt-Uuid. - Компания ищется вместе с отключёнными. Кредитные методы (
trade-sale,trade-sale-transaction,seller-cart,external-credit-payment) полностью работают и для отключённой компании или филиала.
Ключ только на сервере
Ключ не должен попадать в браузер или мобильное приложение: с ним можно действовать от имени любой компании.
Кредитный контракт по шагам
- Справочники.
GET /external/credit/records/{type}сcashbox,stockиproduct(filter[stock_id],filter[name_or_barcode]) — ID кассы, склада и товаров для продажи. - Расчёт.
POST /external/credit/trade-sale/products-total-priceпроверяет строки и ничего не сохраняет: возвращаетproducts_total_priceи минимальную цену каждой строкиproducts[].effective_min_price. - Продажа.
POST /external/credit/trade-sale/createсcompany_wasyt_uuid, ценой каждой строки,source_data(снимок контракта) иsold_amount. Товар списывается со склада, продажа создаётся в статусеin_progress; еёidнужен во всех следующих шагах. - Оплаты. Каждая оплата клиента —
POST /external/credit/trade-sale-transaction/createсsale_id,credit_transaction_idиcredit_status. Когда оплаты покрываютsold_amount, продажа становитсяcompleted.idответа сохраните какwasyt_payment_id. - Возврат денег.
POST /external/credit/trade-sale-transaction/refund-informationсpayment_idвозвращает кассу оплаты,paid_amountи ненулевые остатки кассы по типам оплаты. Сам возврат кредитная система проводит у себя. - Отмена.
POST /external/credit/trade-sale/cancelсinvoice_idотменяет продажу в статусеin_progress: товар возвращается на склад, оплаченная сумма списывается с кассы продажи.
Одна оплата — один раз
credit_transaction_id уникален в пределах компании. Повторная отправка той же оплаты отвечает 422 и второй раз не проводится, поэтому запрос можно безопасно повторить после сетевой ошибки.
Типы оплаты ICAN
Типы оплаты кредитной системы можно передавать как есть — Wasyt переводит их в свои:
| Тип ICAN | Тип Wasyt |
|---|---|
cash | cash |
bank, terminal, mib, blacklist | bank |
auto_payment, auto_payment_my_uzcard, auto_payment_uniaccess, auto_payment_prizma | bank |
card, card_client, card_click, card_payme, card_uzum | card |
discount, system | system — засчитывается в оплату, касса не двигается |
В trade-sale-transaction/create автосписания auto_payment* зачисляются на главную кассу компании (если она есть), остальные — на кассу cashbox_id, а без неё — на кассу продажи. debt (в долг) в кредитных продажах запрещён, а external-credit-payment принимает только cash, card и bank.
Контракты без продажи в Wasyt
Для контрактов, заключённых до подключения склада, продажи в Wasyt нет. Их оплаты проводит POST /external/credit/external-credit-payment/create: контракт описывается в самом запросе (credit_id, credit_number, клиент), деньги попадают в кассу, но не в выручку продаж. Возврат — тот же метод с type = outcome и payment_id возвращаемой оплаты; данные для окна возврата отдаёт тот же refund-information.
Подборы продавцов
GET /external/credit/records/seller— продавцы для фильтраfilter[creator_id].GET /external/credit/seller-cart— подборы; продаваемые:filter[status][]=picking&filter[status][]=sentиfilter[stock_id].GET /external/credit/seller-cart/{model}/cheque— подбор как чек, с текущими ценами и остатками.trade-sale/createсseller_cart_id: подбор получает статусcompleted, продажа (и бонус, если он настроен) записывается на его продавца.
Синхронизация
ICAN передаёт свои компании и адресные справочники в /external/sync/*: company, region, region-district, region-mfy. Запись определяется по ican_uuid: новая создаётся, существующая обновляется, поэтому один и тот же запрос можно отправлять повторно.
Партнёры
GET /external/partner/records/{type}сregion,region_district,region_mfy— адресные справочники сwasyt_uuid; нужен только ключ.POST /external/partner/companyсоздаёт компанию партнёра (район —district_wasyt_uuid) и возвращает еёwasyt_uuid. Повторный запрос с этимwasyt_uuidобновляет компанию.- Дальше данные компании читаются через
records/{type}с заголовкомCompany-Wasyt-Uuid(илиCompany-Partner-Uuid): филиалы, кассы, склады, остатки, товары.
POST /external/partner/find-by-url работает без ключа: по адресу сайта возвращает партнёра и его оформление.

