Руководство разработчика PartnerApi
1 Комментарии для разработчиков
Все запросы к API протоколируются на серверах ООО "Сквозные решения".
Все запросы отправляются в API по HTTPS POST по защищенному каналу (ГОСТ 2012) с защитой передачи персональных данных физических лиц. Формат данных запросов: application/xml или application/json-patch+json.
Оплата проводится в 2 этапа. Сначала создается Сделка, в которой будут указаны сведения о получателе Оплаты и товаре, затем проводится Оплата по данной Сделке.
2 Использование API
Для получения доступа к использованию автоматизированной системе учета металла (далее по тексту – АСУ-Мет) и Partner АСУ-Мет необходимо подать заявку в ООО “Сквозные решения” через своего персонального менеджера. После согласования заявки на присоединение к АСУ-Мет Ваш персональный менеджер предоставит Вам следующие данные:
1) Логин и пароль к веб-интерфейсу АСУ-Мет, где для Вас будет заведен профиль Вашей организации и ваши ТТ;
2) ApiKey - ключ для доступа к API.
После получения этих данных Вы должны:
- зайти в АСУ-Мет, используя свои логин и пароль, и завести в список сотрудников Вашей организации,
- задать связку сотрудников, которые будут выполнять операции по оплате сделок по приему сырья (товаров, оказании услуг), с ТТ,
- заполнить в карточках сотрудников идентификаторы сотрудников в Вашей БД (XML-идентификатор обмена с Вашей БД), чтобы в дальнейшем отправлять все запросы к Partner API от имени Ваших сотрудников, используя логин АСУ-Мет.
Более подробно о работе с веб-интерфейсом АСУ-Мет можно ознакомиться в Руководстве пользователя АСУ-Мет. После выполнения предыдущих шагов Вы можете начинать интеграцию АСУ-Мет с Вашей БД.
3 Авторизация
Каждый запрос к API сопровождается авторизационной информацией. Авторизация в API идет в заголовке запроса Authorization. В заголовок помещается строка вида: Basic LiceneeId:ApiKey:UserLogin:UserPass, где
-
LiceneeId - идентификатор партнера (GUID, 36 символов);
-
ApiKey - ключ партнера (GUID, 36 символов);
-
UserLogin - логин пользователя АСУ-Мет (номер телефона, в формате 79ХХХХХХХХХ - 11 символов);
-
UserPass: пароль пользователя АСУ-Мет (латинские буквы и цифры, максимум 8 символов).
В случае неуспешной авторизации API выдает 401 ошибку (код статуса ответа 401 Unauthorized).
Авторизация по временному паролю недоступна. Временный пароль изменяется только в личном кабинете cabinet.pay2b.ru.
4 Методы
4.1 Создание сделки
Для стенда Цуз.РФ - Создание оплаты
Описание
Метод вносит в АСУ-Мет новую Сделку от имени авторизованного Оператора.
Метод отправляет на телефонный номер Оператора СМС с кодом подтверждения сделки.
Для проведения сделки необходимо выполнить запрос к Partner API на подтверждение проведения сделки.
Внимание!
АСУ-Мет может отправить только 3 СМС-подтверждения сделки, одно - данным методом, второе и третье методом “Отправка повторного СМС на подтверждение сделки”. Если все 3 СМС не дошли, были введены некорректно, АСУ-Мет заблокирует дальнейшие изменения в карточке сделки.
Для каждого типа выплаты существует свой "withdrawTypeId" - идентификатор, который необходимо передавать в составе запроса. Доступные для лицензиата типы выплат представлены в справочнике Получение списка доступных типов выплат.
Для клиентов РНКО "Единая касса" доступны только выплаты на карты и withdrawTypeId не передается.
В зависимости от типа выплаты (На карту или через СБП) в составе запроса необходимо передавать либо "cardNumber"- номер карты, либо "sbpBankId" - id банка участника системы быстрых платежей.
POST /payment
{
"externalId": "string",
"withdrawTypeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"pzu": "string",
"psa": {
"number": "string",
"date": "string",
"scan": "string",
"fileName": "string"
},
"client": {
"surname": "string",
"name": "string",
"lastname": "string",
"passportSerieNumber": "string",
"cardNumber": "string",
"sbpBankId": "string",
"phone": "string",
"birthday": "string",
"birthplace": "string",
"passportfrom": "string",
"address": "string"
},
"products": {
"product": [
{
"productId": "string",
"clogging": 0,
"price": 0,
"grossWeight": 0,
"tareWeight": 0,
"weight": 0,
"units": "string"
}
],
"summTotal": 0
}
}
<Payment>
<ExternalId>string</ExternalId>
<WithdrawTypeId>3fa85f64-5717-4562-b3fc-2c963f66afa6</WithdrawTypeId>
<Pzu>string</Pzu>
<Psa>
<Number>string</Number>
<Date>string</Date>
<Scan>string</Scan>
<FileName>string</FileName>
</Psa>
<Client>
<Surname>string</Surname>
<Name>string</Name>
<Lastname>string</Lastname>
<PassportSerieNumber>string</PassportSerieNumber>
<CardNumber>string</CardNumber>
<SbpBankId>string</SbpBankId>
<Phone>string</Phone>
<Birthday>string</Birthday>
<Birthplace>string</Birthplace>
<Passportfrom>string</Passportfrom>
<Address>string</Address>
</Client>
<Products>
<Product>
<ProductId>string</ProductId>
<Clogging>0</Clogging>
<Price>0</Price>
<GrossWeight>0</GrossWeight>
<TareWeight>0</TareWeight>
<Weight>0</Weight>
<Units>string</Units>
</Product>
<SummTotal>0</SummTotal>
</Products>
</Payment>
В случае успеха создания сделки будет следующий ответ:
{
"id": "string",
"sum": 0,
"date": "string"
}
<Payment>
<Id>string</Id>
<Sum>0</Sum>
<Date>string</Date>
</Payment>
В случае ошибки в теле ответа возвращается текст ошибки:
- ошибка с кодом 400 «Ошибки создания сделки»,
- ошибка с кодом 422 «Ошибка отправки смс»
- ошибка badrequest «Поле SummTotal должно быть формата ХХХХ.ХХ».
- ошибка с кодом 409 «Сделка с указанным ExtrenalId: 9e6b3a66-cf63-4417-926e-29ca0b70a09d уже существует. Номер сделки: 123».
Параметр запроса | Описание параметра запроса |
---|---|
ExternalID | Токен идемпотентности (GUID). Не является обязательным Передается в случае если необходимо ограничить создание одной и той же сделки Если переданное значение неуникально, возникнет ошибка и вернется ответ содержащий номер ранее созданной сделки |
WithdrawTypeId | Идентификатор типа выплаты из справочника Получение списка доступных типов выплат. Для получения используется метод GET /withdrawTypes Для клиентов РНКО "Единая касса" withdrawTypeId не передается |
Pzu | ID Торговой точки, с которой оформляется Оплата |
Psa | Приемо-сдаточный акт |
Psa:Number | Номер ПСА |
Psa:Date | Дата ПСА Форматы: "dd.MM.yyyy", "dd.MM.yyyy HH:mm" |
Psa: Scan | Скан ПСА в формате pdf, размером не более 800Кб. Скан должен быть переведен в бинарный формат и упакован в base64 |
Client | Все поля раздела Client являются обязательными |
Client:Surname | Фамилия клиента, физ. лица, принесшего сырье, товар Лицензиату |
Client:Name | Имя клиента |
Client:Lastname | Отчество клиента Если отчества нет, то указать “Нет” |
Client:PassportSerieNumber | Серия и номер паспорта Формат для паспортов РФ: “ХХ ХХ ХХХХХХ”, где первые 4 цифры - серия паспорта РФ, последние 6 - номер паспорта (Возможные форматы паспортов см. ниже) |
Client:CardNumber | Номер карты, на которую клиенту зачисляются денежные средства Формат: XXXXXXXXXXXXХXXX, т.е. 16 цифр карты без пробелов и прочих символов Передается в случае выплаты на карту |
Client:SbpBankId | Id банка участника СБП из справочника Получить список банков участников СБП. Для получения используется метод GET /sbp/members Передается в случае выплаты через СБП |
Client:Phone | Номер телефона клиента (10 цифр) Формат: ХXXXXXXXXX |
Client:Birtday | Дата рождения клиента. Формат: дд.мм.гггг |
Client:Birthplace | Место рождения |
Client:Passportfrom | Кем выдан паспорт |
Client:Address | Прописка |
Products | Массив узлов Product |
Product:ProductId | ID категории из справочника Категории лома. Метод POST/categories. Например: A2 |
Product:Clogging | % засора сырья (товара), в пределах от 0 до 99, с шагом 0.01 Формат: дробная часть отделяется точкой |
Product:Units | Единицы измерения. Возможные варианты: ”gramm”- вес в граммах и цена в руб./гр; ”kilogramm” - вес в кг и цена в руб./кг; “tonna” - вес в т и цена в руб./т. |
Product:Price | Цена за единицу массы сырья (товара), руб. с шагом 0.01. Формат: дробная часть отделяется точкой |
Product:GrossWeight | Вес брутто сырья (товара), в соответствующих единицах измерения с шагом 0.001. Формат: дробная часть отделяется точкой. Если значение не передано, то рассчитывается по формуле |
Product:TareWeight | Вес тары, в соответствующих единицах измерения с шагом 0.001. Формат: дробная часть отделяется точкой |
Product:Weigh | Вес нетто сырья (товара), в соответствующих единицах с шагом 0.001 Формат: дробная часть отделяется точкой |
Products:SummTotal | Итоговая сумма (поле необязательное) В случае отправки данного поле расхождение с суммой, считаемой на основе product не должно превышать 10 копеек. Расчет суммы по строке по формуле: Цена * Вес нетто |
Округление расчетной суммы платежа:
- округление каждой позиции при создании сделки до 2 цифр после запятой, т.е. до целой копейки;
- округление каждой позиции при расчете уже существующих сделок до 2 цифр после запятой, т.е. до целой копейки;
- поле SummTotal должно быть формата ХХХХ.ХХ.
Параметр ответа | Описание параметра ответа |
---|---|
Id | ID созданной Сделки, которую необходимо подтвердить СМС-кодом, обратившись к методу “Создание сделки (2-я стадия)” после выполнения данного метода Если Status > 1, то данное поле будет пустое. |
Date | Дата регистрации Сделки в АСУ-Мет Формат: Unix Timestamp |
Sum | Сумма оплаты, SummTotal из создания запроса, если оно не было указано то подсчитанная суммированием строк товарного раздела Products из запроса. Расчет суммы по строке по формуле: Цена * Вес нетто |
Заполнение PassportSerieNumber
:
Страна | Формат данных | Пример |
---|---|---|
Абхазия | ABH [0-9]{2} [0-9]{6} | ABH 01 010101 |
Азербайджан | AZE [A-Za-z]{1}[0-9]{7,8} | AZE x58303527 |
Армения | ARM [A-Za-z]{1,2}[0-9]{6,7} | ARM a4573826 |
Белоруссия | BLR [A-Za-z]{2}[0-9]{7} | BLR mp0000000 |
Грузия | GEO [0-9]{2}[A-Za-z]{2}[0-9]{5} | GEO 07AE65843 |
Казахстан | KAZ [N,S,D]{1}[0-9]{8}, KAZ [0-9]{9}, KAZ [0-9]{12} |
KAZ N12345678, KAZ 123456789, KAZ 123456789012 Примечание! 1 из представленных вариантов |
Киргизия | KGZ [A-Za-z]{2}[0-9]{7} | KGZ AC6504732 |
Латвия | LVA [A-Za-z]{2}[0-9]{7} | LVA LV7685946 |
Литва | LTU [A-Za-z]{2}[0-9]{6} | LTU LD654897 |
Молдавия | MDA [A-Za-z]{2}[0-9]{7} | MDA AA7229867 |
Россия | RUS [0-9]{2} [0-9]{6} | RUS 11 11 111111 |
Таджикистан | TJK [0-9]{6,9} | TJK 654897 |
Туркмения | TKM [A-Za-z]{1}[0-9]{7} | TKM A6594638 |
Узбекистан | UZB [A-Za-z]{2}[0-9]{7} | UZB CA7540943 |
Украина | UKR [A-Za-z]{1}[0-9]{6} | UKR D654897 |
Эстония | EST C[0-9]{7} | EST C0000001 |
Возможные ошибки при создании сделки
№ | Ошибка | Комментарий |
---|---|---|
1 | Доступ запрещен | В случае ошибок авторизации |
2 | Пользователь не может проводить оплаты на указанном ПЗУ | Когда: в точках пользователя нет данной точки |
3 | Сделка с указанным ExtrenalId уже существует | |
4 | Ошибки во входных параметрах. Нельзя указать дату ПСА выше текущей | В случае, если дата ПСА указана в будущем времени |
5 | Ошибки во входных параметрах.Неверный формат даты скана ПСА | Дата не соответвует допустимому формату |
6 | Необходимо указать продукты | Не указан товар |
7 | Продукт не найден | Указанного товара не существует в системе, проверьте доступные товары, см. справочник Категории лома |
8 | Продукт не активен | Данный продукт был отключен для использования, обратитесь к технической поддержке для его активации |
9 | Ввод различных товаров запрещен | |
10 | В соответствии с настройками вес не может быть применен | |
11 | В соответствии с настройками процент засора не может быть применен | |
12 | В соответствии с настройками должен быть указан только один продукт в товарном разделе | |
13 | В соответствии с настройками товарный раздел не должен быть указан | |
14 | Поле Сумма товарного раздела должно быть больше 0 | |
15 | Поле Вес товарного раздела должно быть больше 0 | |
16 | Не указаны паспортные данные | |
17 | Неверный формат серии и номера паспорта | Проверьте формат паспорта, см. справочник значений PassportSerieNumber |
18 | Оплата доступна только для карт банков РФ | При оплате на иностранную карту из РФ |
19 | Лицо не достигло возраста 18 лет |
4.2 Редактирование сделки
Для стенда Цуз.РФ - Редактирование оплаты
Описание
Метод позволяет редактировать созданную сделку.
Передаваемые параметры аналогичны параметрам создания сделки
POST /payment/edit/{id}
{
"externalId": "string",
"withdrawTypeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"pzu": "string",
"psa": {
"number": "string",
"date": "string",
"scan": "string",
"fileName": "string"
},
"client": {
"surname": "string",
"name": "string",
"lastname": "string",
"passportSerieNumber": "string",
"cardNumber": "string",
"sbpBankId": "string",
"phone": "string",
"birthday": "string",
"address": "string",
"passportfrom": "string",
"birthplace": "string"
},
"products": {
"product": [
{
"productId": "string",
"clogging": 0,
"price": 0,
"weight": 0,
"units": "string"
}
],
"summTotal": 0
},
"dealNumber": 0
}
<Payment>
<ExternalId>string</ExternalId>
<WithdrawTypeId>3fa85f64-5717-4562-b3fc-2c963f66afa6</WithdrawTypeId>
<Pzu>string</Pzu>
<Psa>
<Number>string</Number>
<Date>string</Date>
<Scan>string</Scan>
<FileName>string</FileName>
</Psa>
<Client>
<Surname>string</Surname>
<Name>string</Name>
<Lastname>string</Lastname>
<PassportSerieNumber>string</PassportSerieNumber>
<CardNumber>string</CardNumber>
<SbpBankId>string</SbpBankId>
<Phone>string</Phone>
<Birthday>string</Birthday>
<Birthplace>string</Birthplace>
<Passportfrom>string</Passportfrom>
<Address>string</Address>
</Client>
<Products>
<Product>
<ProductId>string</ProductId>
<Clogging>0</Clogging>
<Price>0</Price>
<Weight>0</Weight>
<Units>string</Units>
</Product>
<SummTotal>0</SummTotal>
</Products>
</Payment>
В случае успеха изменения сделки будет ответ:
{
"id": "string",
"sum": 0,
"date": "string"
}
<Payment>
<Id>string</Id>
<Sum>0</Sum>
<Date>string</Date>
</Payment>
4.3 Отправка СМС с новым кодом подтверждения
Описание
Метод отправляет СМС-код подтверждения на мобильный телефон сотрудника, совершающего выплату, в случае, если необходимо повторно запросить код подтверждения.
Id - ID оплаты, полученной методом “Создание Сделки”.
POST /payment/sendsms
{
"id": 0
}
<PaymentSendSms>
<Id>0</Id>
</PaymentSendSms>
В случае успеха возвращается ответ с кодом 200.
4.4 Подтверждение оплаты по сделке
Для стенда Цуз.РФ - Подтверждение оплаты
Описание
Метод предназначен для подтверждения оплаты по созданой сделки.
Необходимо ввести код из смс или фиксированный код подтверждения. Смс с кодом подтверждения приходит автоматически при создании сделки, если не установлен фиксированный код.
В ответе на запрос возвращается статус сделки.
POST / paymentconfirm
{
"id": 0,
"smsCode": "string"
}
<PaymentConfirm>
<Id>0</Id>
<SmsCode>string</SmsCode>
</PaymentConfirm>
Тело ответа: В случае успеха возвращается ответ с кодом 200.
{
"id": "string",
"status": "string"
}
<Payment>
<Id>string</Id>
<Status>string</Status>
</Payment>
Параметр запроса | Описание параметра запроса |
---|---|
id | Номер сделки |
smsCode | Код подтверждения |
Параметр ответа | Описание параметра ответа |
---|---|
id | Идентификатор сделки |
status | Статус сделки |
4.5 Проверка статуса оплаты
Для стенда Цуз.РФ - Проверка статуса платежа
Описание
Метод позволяет получить статус оплаты
Id - Номер сделки, полученной методом “Создание Сделки”.
POST /checkpay/{id}
В случае успеха возвращается ответ с кодом 200.
{
"id": 0,
"status": "string",
"paymentState": "string",
"paymentStateDescription": "string",
"paymentReason": "string"
}
<PaymentStatus>
<Id>0</Id>
<Status>string</Status>
<PaymentState>string</PaymentState>
<PaymentStateDescription>string</PaymentStateDescription>
<PaymentReason>string</PaymentReason>
</PaymentStatus>
Параметр ответа | Описание параметра запроса |
---|---|
Id | ID сделки, полученной методом “Создание Сделки” |
Status | Статус сделки |
PaymentState | Статус оплаты (Ответ процессинга) |
PaymentStateDescription | Описание статуса оплаты |
PaymentReason | Описание ответа от процессинга |
В случае ошибки в теле ответа возвращается текст ошибки.
1) Ошибка с кодом 400 «Ошибки во входных параметрах»:
{
"message": "string",
"fields": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
}
<ErrorSerializator>
<Message>string</Message>
<Fields>
<Field key="string" value="string" />
</Fields>
</ErrorSerializator>
2) Ошибка с кодом 403 «Отказано в доступе».
3) Ошибка с кодом 404 «Оплата/лицензиат не найдены».
4) Ошибка с кодом 500 «Внутренняя ошибка»:
{
"message": "string",
"fields": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
}
<ErrorSerializator>
<Message>string</Message>
<Fields>
<Field key="string" value="string" />
</Fields>
</ErrorSerializator>
4.6 Получение списка сотрудников
Описание
Метод позволяет получить список сотрудников лицензиата. Также в методе реализована пагинация и поиск по телефону или ФИО сотрудника.
POST /listemployees
{
"recordsOnPage": 0,
"page": 0,
"query": "string",
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"pointsId": "string"
}
<Filter>
<RecordsOnPage>0</RecordsOnPage>
<Page>0</Page>
<Query>string</Query>
<Id>string</Id>
<PointsId>string</PointsId>
<Filter>
В случае успеха возвращается ответ с кодом 200.
{
"employer": [
{
"userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "string",
"surname": "string",
"middleName": "string",
"phone": "string",
"isActive": true,
"createDate": "2023-09-29T15:13:30.016Z",
"userPoint": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"address": "string",
"name": "string"
}
],
"userRole": [
{
"role": "string"
}
]
}
]
}
<ListEmployees>
<Employee>
<UserId>3fa85f64-5717-4562-b3fc-2c963f66afa6</UserId>
<Name>string</Name>
<Surname>string</Surname>
<MiddleName>string</MiddleName>
<Login>string</Login>
<Phone>string</Phone>
<IsActive>true</IsActive>
<CreateDate>2024-04-10T08:30:42.065Z</CreateDate>
<UserPoint>
<Id>3fa85f64-5717-4562-b3fc-2c963f66afa6</Id>
<Address>string</Address>
<Name>string</Name>
</UserPoint>
<UserRole>
<Role>string</Role>
</UserRole>
</Employee>
</ListEmployees>
Параметр запроса | Описание параметра запроса |
---|---|
Page | Номер страницы Если не задавать или 0, то первая страница с результатами |
RecordsOnPage | Количество записей на страницу Если не задавать или 0 - то все записи из БД будут в одном ответе |
Id | Отбор Сотрудника по Id |
Query | Полнотекстовый поиск Сотрудника по телефону, ФИО |
PointsId | Отбор сотрудников по ID ТТ Формат: ID1,ID2,ID3 |
Параметр ответа | Описание параметра ответа |
---|---|
UserId | ID Сотрудника |
Name | Имя Сотрудника |
Surname | Фамилия Сотрудника |
MiddleName | Отчество Сотрудника |
Phone | Телефон Сотрудника, он же логин |
IsActive | true или false |
CreateDate | Дата создания карточки Сотрудника Формат ГГГГ-ММ-ДДTЧЧ:ММ:СС.999999 |
UserPoint | Если в UserPoint нет подчиненных узлов, значит сотрудник не привязан ни к одному ТТ. |
UserPoint:Id | ID ТТ, к которому привязан Сотрудник |
UserPoint:Address | Адрес ТТ |
UserPoint:Name | Представление ТТ |
UserRole | Массив узлов Role, содержащий роли Сотрудника. |
4.7 Получение списка сделок
Описание
Метод возвращает список сделок с примененными фильтрами в массив PaymentsList узлов Payment. В узле Products столько узлов Product, сколько товарных позиций в документе Оплаты.
POST /listpayments
{
"recordsOnPage": 0,
"page": 0,
"dateFrom": "2023-09-29T15:43:42.349Z",
"dateTo": "2023-09-29T15:43:42.349Z",
"weightFrom": 0,
"weightTo": 0,
"summFrom": 0,
"summTo": 0,
"pzu": "string",
"status": "All",
"id": 0
}
<Filter>
<RecordsOnPage>0</RecordsOnPage>
<Page>0</Page>
<DateFrom>2018-12-13T12:36:51.941Z</DateFrom>
<DateTo>2018-12-13T12:36:51.941Z</DateTo>
<WeightFrom>0</WeightFrom>
<WeightTo>0</WeightTo>
<SummFrom>0</SummFrom>
<SummTo>0</SummTo>
<Pzu>string</Pzu>
<Status>0</Status>
<Id>0</Id>
</Filter>
В случае успеха возвращается ответ с кодом 200.
{
"payment": [
{
"id": "string",
"externalId": "string",
"date": "2023-09-29T15:43:42.350Z",
"status": "string",
"pzu": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"sumTotal": 0,
"client": {
"name": "string",
"passport": "string",
"passportCountry": "string",
"cardNumber": "string",
"phone": "string",
"birthplace": "string",
"passportfrom": "string",
"address": "string",
"sbpBankId": "string"
},
"products": [
{
"productId": "string",
"quantity": 0,
"clogging": 0,
"price": 0,
"summ": 0,
"units": "string"
}
],
"withdrawTypeId": "976c6c2a-55e4-4010-b1ac-287d72b93136"
}
],
"page": 0,
"pagesTotal": 0,
"recordsOnPage": 0
}
<ListPayments>
<Payment>
<Id>string</Id>
<ExternalId>string</ExternalId>
<Date>2024-04-10T07:56:24.453Z</Date>
<Status>string</Status>
<Pzu>3fa85f64-5717-4562-b3fc-2c963f66afa6</Pzu>
<SumTotal>0</SumTotal>
<Client>
<Name>string</Name>
<Passport>string</Passport>
<PassportCountry>string</PassportCountry>
<CardNumber>string</CardNumber>
<Phone>string</Phone>
<Birthplace>string</Birthplace>
<Passportfrom>string</Passportfrom>
<Address>string</Address>
<SbpBankId>string</SbpBankId>
</Client>
<Product>
<ProductId>string</ProductId>
<Quantity>0</Quantity>
<Clogging>0</Clogging>
<Price>0</Price>
<Summ>0</Summ>
<Units>string</Units>
</Product>
<WithdrawTypeId>string</WithdrawTypeId>
</Payment>
<Page>0</Page>
<PagesTotal>0</PagesTotal>
<RecordsOnPage>0</RecordsOnPage>
</ListPayments>
Таблица номеров статусов сделок, используемых для фильтрации по статусу
Id статуса | Описание | № для запроса |
---|---|---|
All | Все | 0 |
Completed | Завершена | 1 |
Rejected | Отклонена | 2 |
Wait | В процессе выполнения | 3 |
Accepting | На согласовании | 4 |
NoPay | Не оплачена | 5 |
PayError | Ошибка оплаты | 6 |
KycError | Ошибка ломосдатчик числится в базе террористов | 7 |
В случае ошибки с кодом 400 в теле ответа возвращается текст ошибки: «Ошибки получения сделок».
Параметр запроса | Описание параметра запроса |
---|---|
Page | Номер страницы.Если не задавать или 0, то первая страница с результатами. |
RecordsOnPage | Количество записей на страницу. Если не задавать или 0 - то все записи из БД будут в одном ответе. |
Id | Отбор по ID Сделки. |
DateFrom DateTo | Отбор по диапазону дат Оплаты. Формат даты: YYYY-MM-DDTHH:MM:SS.999999 или YYYY-MM-DD. |
SummFrom SummTo | Отбор по диапазону сумм Оплат. |
WeightFrom WeightTo | Отбор оплат по диапазону веса сырья (товара) с засором. Вес указывается в кг. |
Status | Отбор по статусу, для выполнения необходимо указать номер статуса, например: "status": 2. Номера статусов приведены в таблице Возможен отбор по нескольким статусам, для этого в запросе передаются необходимые номера статусов. Например "status": 2, status: 4 |
Pzu | Фильтровать Оплаты по ID ТТ. Возможен отбор по нескольким ТТ, при этом ид указываются через запятую. |
Параметр ответа | Описание параметра ответа |
---|---|
Page | Номер текущей страницы. Если не задавать или 0, то первая страница с результатами. |
RecordsOnPage | Количество записей на страницу. Если не задавать или 0 - то все записи из БД. |
PagesTotal | Количество страниц в выборке. |
Payment | Оплата |
Payment:Id | ID Оплаты. |
Payment:Date | Дата Оплаты в UTC в формате Timestamp ГГГГ-ММ-ДДTЧЧ:ММ:СС.999999. |
Payment:Status | ID статуса Оплаты. |
Payment:Pzu | ID ТТ, с которого оформлялась Оплата. |
Payment:SumTotal | Сумма Оплаты. |
Client | Ломосдатчик (частное лицо, сдающее сырье, товар). |
Client:Name | ФИО клиента |
Client:Passport | Серия и номер паспорта. |
Client:CardNumber | Номер банковской карты клиента (в случае выплаты на карту). |
Client:Phone | Номер телефона клиента. Формат 79ХХХХХХХХХ. |
Client:Birtday | Дата рождения клиента. Формат: дд.мм.гггг |
Client:Birthplace | Место рождения |
Client:Passportfrom | Кем выдан паспорт |
Client:Address | Прописка |
Client:SbpBankId | Id банка участника СБП (в случае выплаты через СБП) |
Product | Товар |
Product:ProductId | ID категории сырья (товара). |
Product:Quantity | Масса сырья (товара), в соответствующих единицах с шагом 0.0001. Формат: дробная часть отделяется точкой. |
Product:Clogging | Процент засора (0 - 99) с шагом 0.01. |
Product:Price | Цена за единицу массы, руб. с шагом 0.01. Формат: дробная часть отделяется точкой. |
Product:Summ | Сумма по строке, руб. Формат: дробная часть отделяется точкой. |
Product:Units | Единицы измерения. Возможные значения: “kilogramm”, “tonna” |
WithdrawTypeId | Идентификатор типа выплаты из справочника Получение списка доступных типов выплат. Для получения используется метод GET /withdrawTypes Для клиентов РНКО "Единая касса" withdrawTypeId не передается |
4.8 Получение списка торговых точек
Описание
Метод возвращает список ТТ с примененными фильтрами в массив Points узлов Point.
POST /points
{
"recordsOnPage": 0,
"page": 0,
"id": "string",
"status": 0
}
<Filter>
<RecordsOnPage>0</RecordsOnPage>
<Page>0</Page>
<Id>string</Id>
<Status>0</Status>
</Filter>
В случае успеха возвращается ответ с кодом 200:
{
"point": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": true,
"address": "string",
"limit": 0,
"dayLimit": 0,
"currentDayLimit": 0,
"title": "string",
"pointTimeZoneId": "string"
}
],
"page": 0,
"pagesTotal": 0,
"recordsOnPage": 0
}
<Points>
<Point>
<Id>3fa85f64-5717-4562-b3fc-2c963f66afa6</Id>
<Status>true</Status>
<Address>string</Address>
<Limit>0</Limit>
<DayLimit>0</DayLimit>
<CurrentDayLimit>0</CurrentDayLimit>
<Title>string</Title>
<PointTimeZoneId>string</PointTimeZoneId>
</Point>
<Page>0</Page>
<PagesTotal>0</PagesTotal>
<RecordsOnPage>0</RecordsOnPage>
</Points>
Параметр запроса | Описание параметра запроса |
---|---|
RecordsOnPage | Количество записей на страницу. Если не задавать или 0 - то все записи из БД будут в одном ответе. |
page | Страница |
Id | Выбор ТТ по ID. |
Status | Отбор по статусу: 1 - ТТ активно; 2 - ТТ не активно. |
Параметр ответа | Описание параметра ответа |
---|---|
Page | Номер текущей страницы. Если не задавать или 0, то первая страница с результатами. |
RecordsOnPage | Количество записей на страницу. Если не задавать или 0 - то все записи из БД. |
PagesTotal | Количество страниц в выборке. |
Point | Торговая точка |
Point:Id | ID торговой точки. |
Point:Status | true - ТТ активно. false - ТТ не активно. |
Point:Address | Адрес точки. |
Point:DayLimit | Установленный лимит на Оплаты на сутки для ТТ. |
Point:CurrentDayLimit | Текущий оставшийся лимит на Оплаты (для текущих суток). |
Point:Limit | Установленный лимит на единичную Оплату для ТТ. |
Point:Title | Название точки. |
Point:PointTimeZoneId | Временная зона точки. |
4.9 Получение перечня Статусов Сделок
Описание
Метод возвращает перечень Статусов Сделок в массив StatusList узлов Status.
Запрос передается без параметров.
POST /listStatus
В случае успеха возвращается ответ с кодом 200:
{
"status": [
{
"id": "string",
"name": "string",
"description": "string",
"dealStates": [
"string"
]
}
]
}
<ListStatus>
<Status>
<Id>string</Id>
<Name>string</Name>
<Description>string</Description>
<DealStates>string</DealStates>
</Status>
</ListStatus>
В случае ошибки в теле ответа возвращается текст ошибки с кодом 400: Ошибка получения списка статусов.
Параметр ответа | Описание параметра ответа |
---|---|
id | ID Статуса |
name | Наименование Статуса |
Описание статусов сделок
Статус | Описание |
---|---|
New | Новая сделка. Неоплачена |
InProgress | В процессе выполнения |
LimitError | Превышен лимит транзакции для лицензиата |
DayLimitError | Превышен суточный лимит для ПЗУ |
TransactionLimitError | Превышен лимит на транзакции для для ПЗУ |
MinLimitError | Минимальный размер транзакции составляет |
MaxLimitError | Максимальный размер транзакции составляет |
IsAcept | Требует согласования у менеджера ПЗУ |
IsAceptAdmin | Ожидает согласования у менеджера ПЗУ |
IsAceptAccountant | Ожидает согласования у бухгалтера ПЗУ |
Completed | Платеж проведен |
Rejected | Оплата отклонена |
SmsLimitError | Превышен лимит смс для оплаты |
ZeroError | Сумма не может быть меньше 0 рублей |
ReadyForPay | Проверка на лимиты пройдена успешно |
GoToCheckPay | Переход к проверке платежа |
PaymentNotFound | Платеж по данной оплате не производился |
InfoError | Ошибка во входных данных |
ApprovalBan | Согласования запрещенные менеджером |
PointNotActive | ПЗУ неактивно |
PayError | Ошибка оплаты |
KycError | Отменена. Ломосдатчик числится в реестре террористов/экстремистов. |
Canceled | Оплата отменена пользователем |
LimitedAttemptsEntryCode | Превышено количество попыток ввода кода подтверждения |
SuccessfulFiscalization | Успешная фискализация |
DeferredFiscalization | Отложенная фискализация |
Группы статусов сделок
Смотреть
Группа | Описание | Статусы в группе |
---|---|---|
All | Все | -New; -InProgress; -LimitError; -DayLimitError; -TransactionLimitError; -MinLimitError; -MaxLimitError; -IsAcept; -IsAceptAdmin; -IsAceptAccountant; -Completed; -Rejected;-SmsLimitError;-ZeroError; -ReadyForPay; GoToCheckPay -PaymentNotFound; -InfoError; -ApprovalBan; -PointNotActive;-PayError;KycError; -Canceled; -LimitedAttemptsEntryCode; -SuccessfulFiscalization; -DeferredFiscalization. |
Completed | Завершена | Completed |
Rejected | Отклонена | -SmsLimitError; -LimitedAttemptsEntryCode; -Rejected;-Canceled. |
Wait | В процессе выполнения | InProgress |
Accepting | На согласовании | -IsAcept; -IsAceptAccountant; -IsAceptAdmin. |
NoPay | Не оплачена | -MinLimitError; -MaxLimitError; -DayLimitError;-TransactionLimitError; -LimitError; -New. |
PayError | Ошибка оплаты | PayError |
KycError | Ошибка ломосдатчик числится в базе террористов | KycError |
4.10 Получение списка Категорий лома
Описание
Метод возвращает список Категорий лома в массив Categories узлов Category.
Запрос передается без параметров
POST /categories
В случае успеха возвращается ответ с кодом 200:
{
"category": [
{
"id": "string",
"name": "string"
}
]
}
<Categories>
<Category>
<Id>string</Id>
<Name>string</Name>
</Category>
</Categories>
Параметр ответа | Описание параметра ответа |
---|---|
id | ID Категории сырья (товара) (Идентификатор обмена). |
name | Наименование Категории сырья (товара). |
4.11 Получение баланса
На стенде pay2b.ru для клиентов Газпромбанк баланс возвращаться не будет
Описание
POST /balance
Метод возвращает баланс или ошибку получения баланса.
Запрос передается без параметров. Возвращает строку баланса.
В случае технической ошибки получения баланса от банка, тело ответа содержит последний баланс из кэша и содержание ошибки в header.
Содержание header:
- информация взята из кэша (x-balance-cached)
- пример дешифрованной ошибки: “Тестовый процессинг вернул ошибку“ (x-balance-error)
- временная метка баланса в формате UTC (x-balance-updated).
x-balance-cached : True
x-balance-error : %d0%a2%d0%b5%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9+%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%b8%d0%bd%d0%b3+%d0%b2%d0%b5%d1%80%d0%bd%d1%83%d0%bb+%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d1%83
x-balance-updated : 06/28/2024 17:12:49
4.12 Получить список банков участников СБП
Доступно только на стенде pay2b.ru
Метод возвращает список банков участников системы быстрых платежей. Запрос передается без параметров.
GET /sbp/members
{
"members": [
{
"id": "string",
"name": "string",
"bik": "string"
}
]
}
<GetSbpMembersResponse>
<Members>
<SbpMember>
<Id>string</Id>
<Name>string</Name>
<Bik>string</Bik>
</SbpMember>
</Members>
</GetSbpMembersResponse>
Параметр ответа | Описание параметра ответа |
---|---|
id | Идентификатор банка, необходимый для передачи в составе запроса на выплату через СБП |
name | Наименование банка на русском языке |
bik | БИК банка |
Если у лицензиата не настроены выплаты по СБП, то вернется ответ с кодом 409:
{
"message": "Некорректные настройки провайдера у лицензиата, обратитесь в службу поддержки."
}
4.13 Получение списка доступных типов выплат
Доступно только на стенде pay2b.ru
Метод возращает список доступных лицензиату типов выплат.
GET /withdrawTypes
[
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "string"
}
]
<GetWithdrawTypesResponse>
<WithdrawTypes>
<WithdrawType>
<Id>976c6c2a-55e4-4010-b1ac-287d72b93136</Id>
<Name>BankCard</Name>
</WithdrawType>
</WithdrawTypes>
</GetWithdrawTypesResponse>
Параметр ответа | Описание параметра ответа |
---|---|
id | Идентификатор типа выплаты |
name | Наименование типа выплаты на английском языке |
4.14 Детали оплаты от процессинга
Доступно только на стенде pay2b.ru
Описание
Метод возвращает сведения о получателе платежа, совершенного через СБП.
Для оплат, совершенных на банковскую карту информация не возвращается.
GET /payment/{id}/processing-details
{
"rrn": "string",
"details": {
"recipientName":"string",
"recipientBankAccount": "string"
}
}
<GetWithdrawDetailsResponse>
<RRN>string</RRN>
<Details>
<Detail key="string" value="string" />
</Details>
</GetWithdrawDetailsResponse>
Параметр ответа | Описание параметра ответа |
---|---|
recipientName | ФИО получателя перевода |
recipientBankAccount | Номер банковского счета получателя |
5 Недоступные методы
Эти методы в данный момент не используются
5.1 Получение списка продуктов лома
Описание
Метод возвращает список продуктов. Запрос передается без параметров.
POST /products
{
"product": [
{
"id": "string",
"productKey": "string",
"name": "string"
}
]
}
<id>string</id>
<productKey>string</productKey>
<name>string</name>
Параметр ответа | Описание параметра ответа |
---|---|
id | Идентификатор категории |
productKey | Ключ продукта |
name | Название категории |
5.2 Создание выплаты на телефон
Описание
Метод выполняет выплату на мобильный телефон.
POST /PhonePayment
{
"externalId": "string",
"pointId": "string",
"productId": "string",
"phone": "string",
"comment": "string",
"numberPp": "string",
"mobileOperator": "string",
"summTotal": 0
}
<PhonePayment>
<pointId>string</pointId>
<productId>string</productId>
<phone>string</phone>
<comment>string</comment>
<numberPp>string</numberPp>
<mobileOperator>string</mobileOperator>
<summTotal>0</summTotal>
</PhonePayment>
В случае успеха возвращается ответ с кодом 200:
{
"id": "string",
"sum": 0,
"date": "string"
}
<PhonePayment>
<id>string</id>
<sum>0</sum>
<date>string</date>
<PhonePayment>
В случае ошибки в теле ответа возвращается текст ошибки:
- ошибка с кодом 400 «неверные данные»;
- ошибка с кодом 403 «нет доступа»;
- ошибка с кодом 404 «not found»;
- ошибка с кодом 500 «ошибки создания оплаты».
Параметр запроса | Описание параметра запроса |
---|---|
pointId | Идентификатор точки. Обязательный. |
productId | Идентификатор продукта. Обязательный. |
phone | Телефон. Шаблон ^([0-9]{10})$. Обязательный |
comment | Комментарий |
numberPp | Номер П.П. |
mobileOperator | Оператор связи. Обязательный |
summTotal | Сумма |
Параметр ответа | Описание параметра ответа |
---|---|
id | Идентификатор оплаты. |
sum | Сумма. |
date | Дата создания. |
5.3 Получение списка мобильных операторов
Метод возвращает список мобильных операторов. Запрос передается без параметров.
GET /MobileOperators
В случае успеха возвращается ответ с кодом 200:
{
"operator": [
{
"id": "string",
"title": "string"
}
]
}
<operator>
<id>string</id>
<title>string</title>
</operator>
Параметр ответа | Описание параметра ответа |
---|---|
id | Идентификатор оператора |
title | Название |
Состояния оплаты для клиентов РНКО Единая Касса
Для клиентов РНКО Единая Касса возможны следующие состояния оплаты:
Состояние | Код | Ошибка да/нет |
---|---|---|
Платеж принят системой к обработке | Success | нет |
Провайдер не существует или недоступен агенту | ProviderNotExistsOrLock | да |
Указанная сумма платежа не попадает в допустимый диапазон | AmountMinError | да |
У агента недостаточно средств для проведения платежа | DealerBalanceLimit | да |
Неверно указаны платежные поля | FieldsError | да |
Указаны не все обязательные платежные поля | RequiredFieldsError | да |
Для данного платежа невозможна оплата. Не выполнен шаг проверки, либо проверка завершилась неудачно | PaymentNotCheck | да |
В теге receipt указана точка, которую сервису не удалось сопоставить с текущим пользователем | PointNotFound | да |
Внутренняя ошибка | InternalError | да |
Неверные авторизационные данные процессинга | AuthError | да |
Платеж принят к обработке сервером | ServerOk | нет |
Проверяется возможность оплаты платежа | PsChecking | нет |
Ошибка при проверке возможности проведения платежа | PsCheckError | да |
Платеж проверен, возможна оплата | PsChecked | нет |
Платеж посылается на оплату | PsPaying | нет |
Запрос статуса по платежу от внешнего платежного сервиса | PsStatus | нет |
Платеж не прошел оплату | PsPayError | да |
Платеж прошел оплату | PsOk | нет |
Платеж отменен | Canceled | нет |
Платеж прошел оплату | Completed | нет |