UNPKG

alfabank

Version:

Pay API for alfa-biz.by (alfabank belarus)

442 lines (351 loc) 20 kB
import { AxiosInstance } from 'axios'; interface IAuthBase { userName?: string password?: string } interface IAuthToken { /** Открытый ключ, который можно использовать для регистрации заказа. * Если для аутентификации при регистрации заказа используются логин и пароль, параметр token передавать не нужно */ token?: string } interface IAuth extends IAuthBase, IAuthToken {} type ErrorResponse = { /**Код ошибки */ errorCode?: string | number /** Описание ошибки на языке, переданном в параметре language в запросе. */ errorMessage?: string } interface Language { language?: string } /** Запрос регистрации заказа */ interface Register { /** Номер (идентификатор) заказа в системе магазина, уникален для каждого магазина в пределах системы */ orderNumber: string /** Сумма платежа в копейках (или центах) */ amount: number /**Код валюты платежа ISO 4217. Если не указано, то используется значение по умолчанию. */ currency?: string /** Адрес, на который требуется перенаправить пользователя в случае успешной оплаты. Адрес должен быть указан * полностью, включая используемый протокол (например, https://test.ru вместо test.ru). */ returnUrl: string /** Адрес, на который требуется перенаправить пользователя в случае неуспешной оплаты. * Адрес должен быть указан полностью, включая используемый протокол (например, https://test.ru вместо test.ru). * В противном случае пользователь будет перенаправлен по адресу следующего вида: http://<адрес_платёжного_шлюза>/<адрес_продавца>. * */ failUrl?: string /** Описание заказа в свободной форме. (Чтобы получить возможность отправлять это поле в процессинг, обратитесь в техническую поддержку.) */ description?: string /** Язык в кодировке ISO 639-1. Если не указан, будет использован язык, указанный в настройках магазина как язык по умолчанию. */ language?: string /** По значению данного параметра определяется, какие страницы платёжного интерфейса должны загружаться для клиента */ pageView?: 'DESKTOP' | 'MOBILE' | string /** Номер (идентификатор) клиента в системе магазина. Используется для реализации функционала связок. Может присутствовать, если магазину разрешено создание связи */ clientId?: string /** Чтобы зарегистрировать заказ от имени дочернего мерчанта, укажите его логин в этом параметре. */ merchantLogin?: string /** Блок для передачи дополнительных параметров мерчанта. * Включение данного функционала возможно по согласованию с банком в период интеграции. */ jsonParams?: { email?: string phone?: string } & { [K: string]: any } /** Продолжительность жизни заказа в секундах. * В случае если параметр не задан, будет использовано значение, указанное в настройках мерчанта или время по умолчанию (1200 секунд = 20 минут). * Если в запросе присутствует параметр expirationDate, то значение параметра sessionTimeoutSecs не учитывается. */ sessionTimeoutSecs?: number /**Дата и время окончания жизни заказа. Формат: yyyy-MM-dd'T'HH:mm:ss. * Если этот параметр не передаётся в запросе, то для определения времени окончания жизни заказа используется sessionTimeoutSecs . */ expirationDate?: string /**Идентификатор связки, созданной ранее. Может использоваться, только если у магазина есть разрешение на работу * со связками. Если этот параметр передаётся в данном запросе, то это означает: * 1. Данный заказ может быть оплачен только с помощью связки; * 2. Плательщик будет перенаправлен на платёжную страницу, где требуется только ввод CVC. */ bindingId?: string /** Контейнер для параметра feature, в котором можно указать следующие значения. * AUTO_PAYMENT - Если запрос на регистрацию заказа инициирует проведение автоплатежей. * FORCE_TDS - Принудительное проведение платежа с использованием 3-D Secure. Если карта не поддерживает 3-D Secure, транзакция не пройдёт. * FORCE_SSL - Принудительное проведение платежа через SSL (без использования 3-D Secure). * FORCE_FULL_TDS - После проведения аутентификации с помощью 3-D Secure статус PaRes должен быть только Y, что гарантирует успешную аутентификацию пользователя. В противном случае транзакция не пройдёт. */ features?: string /** Электронная почта покупателя. */ email?: string /** Номер телефона покупателя в следующем формате: +375333333333. */ phone?: string /** Блок, содержащий Корзину товаров заказа. */ orderBundle?: orderBundle } interface orderBundle { /** Дата создания заказа */ orderCreationDate?: string /** Блок с атрибутами данных о покупателе. */ customerDetails?: { email?: string phone?: string contact?: string /** Блок с атрибутами адреса для доставки. */ deliveryInfo?: { deliveryType?: string country: string city: string postAddress: string } } /** Блок с атрибутами товарных позиции Корзины. */ cartItems: { /** Элемент массива с атрибутами товарной позиции в Корзине */ items?: cartItems[] } } interface cartItems { /** Уникальный идентификатор товарной позиции внутри Корзины Заказа */ positionId: number /** name да Наименование или описание товарной позиции в свободной форме */ name: string /** Дополнительный блок с параметрами описания товарной позиции. */ itemDetails?: { /** Параметр описывающий дополнительную информацию по товарной позиции. */ itemDetailsParams: { /** Дополнительная информация по товарной позиции */ value: string /** Наименование параметра описания детализации товарной позиции */ name: string }[] } /** Элемент описывающий общее количество товарных позиций одного positionId и их меру измерения. */ quantity: { /** Количество товарных позиций данного positionId. Для указания дробных чисел используйте десятичную точку. */ value: number /** Мера измерения количества товарной позиции * @example pieces */ measure: string } /** Сумма стоимости всех товарных позиций одного positionId в минимальных единицах валюты. * `itemAmount` обязателен к передаче, только если не был передан параметр `itemPrice`. В противном случае передача `itemAmount` * не требуется. * Если же в запросе передаются оба параметра: `itemPrice` и `itemAmount`, то `itemAmount` должен * равняться `itemPrice * quantity`, в противном случае запрос завершится с ошибкой.*/ itemAmount?: number /** Сумма стоимости 1 товарной позиций одного positionId в минимальных единицах валюты */ itemPrice?: number itemCurrency?: number /** Номер (идентификатор) товарной позиции в системе магазина. Параметр должен быть уникальным в рамках запроса. */ itemCode: string discount?: { /** Тип скидки на товарную позицию * @example percent */ discountType: string /** Значение скидки на товарную позицию */ discountValue: number } agentInterest?: { /** Тип агентской комиссии за продажу товара */ interestType: string /** Значение агентской комиссии за продажу товара */ interestValue: string } } interface RegisterResponse extends ErrorResponse { /** Номер заказа в платежной системе. Уникален в пределах системы. * Отсутствует, если регистрация заказа на удалась по причине ошибки, детализированной в errorCode. */ orderId?: string /** URL платежной формы, на который надо перенаправить браузер клиента. * Не возвращается, если регистрация заказа не удалась по причине ошибки, детализированной в errorCode. */ formUrl?: string } /** Запрос регистрации заказа */ interface Refund { /** Номер заказа в платежной системе. Уникален в пределах системы */ orderId: string /** Сумма возврата в копейках (или центах) */ amount: number } interface RefundResponse extends ErrorResponse { /** Номер заказа в платежной системе. Уникален в пределах системы. */ orderId?: string } declare enum OrderStatus { CREATED = 0, APPROVED = 1, DEPOSITED = 2, REVERSED = 3, REFUNDED = 4, AUTHORIZATION_INITIALIZED = 5, DECLINED = 6 } /** Запрос состояния заказа */ interface Status { /** Номер заказа в платежной системе. Уникален в пределах системы */ orderId: string /** Язык в кодировке ISO 639-1. Если не указан, считается, что язык – русский. Сообщение ошибке будет возвращено именно на этом языке. */ language?: string } interface StatusResponse extends ErrorResponse { /** По значению этого параметра определяется состояние заказа в платежной системе. Список возможных значений приведен в таблице ниже. Отсутствует, если заказ не был найден. */ OrderStatus?: OrderStatus /** Номер (идентификатор) заказа в системе магазина */ OrderNumber: string /** Маскированный номер карты, которая использовалась для оплаты. Указан только после оплаты заказа. */ Pan?: number /** Срок истечения действия карты в формате YYYYMM. Указан только после оплаты заказа. */ expiration?: number /** Имя держателя карты. Указан только после оплаты заказа. */ cardholderName?: string /** Сумма платежа в копейках (или центах) */ Amount: number /** Код валюты платежа ISO 4217. Если не указано, то используется значение по умолчанию. */ currency?: number /** Код авторизации МПС. Поле фиксированной длины (6 символов), может содержать цифры и латинские буквы. */ approvalCode?: string /** Это поле является устаревшим. Его значение всегда равно "2", независимо от состояния заказа и кода авторизации процессинговой системы. */ authCode?: number /** IP-адрес пользователя, который оплачивал заказ. */ Ip?: string } interface StatusExtended extends Status { /** Номер (идентификатор) заказа в системе магазина. * * - В запросе должен присутствовать либо `orderId`, либо `orderNumber`. * - Если в запросе присутствуют оба параметра, то приоритетным считается `orderId`. */ orderNumber?: string } interface Mutated { /** Оплачен ли платеж */ paid: boolean /** object converted parameters */ params: { [K: string]: any } } interface StatusExtendedResponse extends ErrorResponse, Mutated { /** Номер (идентификатор) заказа в системе магазина. */ orderNumber: string orderStatus?: OrderStatus /** Код ответа. */ actionCode: number /** Расшифровка кода ответа на языке, переданном в параметре Language в запросе. */ actionCodeDescription: string /** Сумма платежа в копейках (или центах) */ amount: number /** Код валюты платежа ISO 4217. Если не указано, то используется значение по умолчанию. */ currency?: string /** Дата регистрации заказа. */ date: number /** Описание заказа, переданное при его регистрации */ orderDescription?: string /** IP-адрес пользователя, который оплачивал заказ. */ ip: string /** Учётный номер авторизации платежа, который присваивается при регистрации платежа. */ authRefNum: string /** Дата и время возврата средств. */ refundedDate?: string /** Дополнительные параметры продавца */ merchantOrderParams?: Attribute[] cardAuthInfo: CardAuthInfo secureAuthInfo?: { /** Электронный коммерческий индикатор. Указан только после оплаты заказа и в случае * соответствующего разрешения. */ eci?: number /** Значение проверки аутенфикации владельца карты. Указан только после оплаты заказа и в случае соответствующего разрешения. */ cavv?: string /** Электронный коммерческий идентификатор транзакции. Указан только после оплаты заказа и в случае соответствующего разрешения. */ xid?: string } bindingInfo?: BindingInfo paymentAmountInfo: PaymentAmountInfo bankInfo: BankInfo // TODO: transactionAttributes: any[] attributes: Attribute[] authDateTime: number terminalId: string orderBundle: OrderBundle } // TODO: interface BindingInfo { clientId?: string bindingId?: string authDateTime?: string terminalId?: string } // TODO: interface Attribute { name: string value: string } // TODO: interface BankInfo { bankCountryCode: string bankCountryName: string } // TODO: interface CardAuthInfo { maskedPan: string expiration: string cardholderName: string approvalCode: string pan: string } // TODO: interface OrderBundle { customerDetails: CustomerDetails cartItems: CartItems } interface CartItems { items: Item[] } // TODO: interface Item { positionId: string name: string quantity: Quantity itemAmount: number itemCurrency: number itemCode: string } interface Quantity { value: number measure: string } interface CustomerDetails { email: string phone: string } // TODO: interface PaymentAmountInfo { paymentState?: string approvedAmount?: number depositedAmount?: number refundedAmount?: number } interface Params extends Language { /** Номер заказа в платежной системе. Уникален в пределах системы. */ orderId: string /** Поля для передачи дополнительных параметров, вида {"param":"value","param2":"value2"} */ params: { [K: string]: any } } interface ParamsResponse extends ErrorResponse {} interface Options extends IAuth { language?: string; } declare const useAlfaBank: ({ token, password, userName, language, }?: Options) => { instance: AxiosInstance; register: (data: Register) => Promise<RegisterResponse | null>; refund: (data: Refund) => Promise<RefundResponse | null>; addParams: (data: Params) => Promise<true | ParamsResponse | null>; getOrderStatus: (data: Status) => Promise<StatusResponse | null>; getOrderStatusExtended: (data: StatusExtended) => Promise<StatusExtendedResponse | null>; }; /** * Функция для конвертирование в минимальных единицах * С учетом проблем плавающей точки * 10.20 - 1020 */ declare const toBynPenny: (value: number) => number; export { Attribute, IAuth, IAuthBase, IAuthToken, Refund, RefundResponse, Register, RegisterResponse, Status, StatusExtended, StatusExtendedResponse, StatusResponse, toBynPenny, useAlfaBank };