# Документация API индийских платежей: www.deekpay.com

Документация # India Payments API

1. перейдите в раздел "Центр разработчика" - "API-ключи", нажмите кнопку "Создать API-ключ". Каждый API-ключ имеет собственную страницу настройки и привязан к фиксированному IP-адресу ("0.0.0.0" означает отсутствие IP-фильтрации, что позволяет получить доступ с любого IP-адреса). Вы можете настроить различные API-ключи в соответствии с различными потребностями. Обязательно сохраняйте конфиденциальность ключа доступа и секретного ключа, чтобы предотвратить потерю активов. После создания секретного ключа он не может быть просмотрен повторно, поэтому позаботьтесь о его своевременном сохранении. Если вы забыли секретный ключ, вы можете переработать пару ключей и запросить новый в бэкенде продавца.

2. Нажмите "Центр разработчика" - "Ключ API".

3. выберите, включить ли режим отладки (при включении режима отладки вы будете получать стандартные сообщения об ошибках и адрес журнала для просмотра ошибок).

4. Выберите авторитетный ключ API.

5. введите адрес из белого списка ("0.0.0.0" означает, что любой IP-адрес доступен).

Примечание: При вводе доменных имен из белого списка используйте запятые для разделения нескольких IP-адресов.

6. Нажмите кнопку Создать, чтобы сгенерировать ключ API.

(После генерации ключа API вы можете копировать, просматривать, редактировать и удалять его в списке "Мои ключи API" ниже. Обратите внимание, что секретный ключ появляется только один раз при его генерации, поэтому храните его в безопасности. Если вы забыли секретный ключ, пожалуйста, переработайте пару ключей и запросите новый).

7. нажмите "Изменить", чтобы включить или отключить опцию "Начать отладку", а также изменить разрешения на ключ API и адрес "белого списка". После внесения изменений нажмите "Сохранить".

8. Примечание: После создания или редактирования ключа API подождите 90 секунд, чтобы он вступил в силу.

9. для получения текущего ключа API в заголовке запроса должны быть указаны следующие параметры:

- access_key: ключ доступа к API (например, TPhoa7ZQ) - Обязательно

- timestamp: временная метка в миллисекундах (13 цифр, например, 1679669488472) - Требуется

- nonce: UUID (36 цифр, например, 02f7a04f-53cc-47d4-bb3f-fae69dab49ac) - Требуется

- sign: подпись параметра (например, GXx2wYUD6UVr+zcmeCSFFPzcBLA=) - Требуется

10. API-запросы, передаваемые через Интернет, очень подвержены фальсификации. Для обеспечения целостности запроса частные интерфейсы (за исключением публичных интерфейсов, таких как базовая информация и рыночные данные) должны быть аутентифицированы подписью с использованием вашего API-ключа, чтобы убедиться, что параметры или значения параметров не были изменены во время передачи.

11. Правильный запрос содержит следующие компоненты:

- access_key: ключ доступа к API

- secret_key: секретный ключ для шифрования подписи (виден только один раз в фоновом режиме во время применения API-ключа, пожалуйста, скопируйте и сохраните его в безопасном месте и не раскрывайте)

- timestamp: время отправки запроса (время UTC). Например, 1632811287325 (13 цифр). Включение этого значения в запрос помогает предотвратить перехват запроса третьими лицами.

- nonce: случайная строка UUID. Например, 053a1b81-48a0-4bb1-96b2-60f6e509d911 (36 цифр)

- sign: значение, вычисляемое подписью, используемое для обеспечения действительности и целостности подписи

12. Все интерфейсы должны передавать вышеуказанные открытые параметры (за исключением secret_key) в заголовке HTTP-запроса. К публичным параметрам относятся (access_key, timestamp, nonce, sign). Другие параметры подписи см. в описании интерфейса API.

13. Определите объект словаря Map и добавьте в него параметры запроса в качестве ключей и значений.

14. Добавьте access_key, timestamp и nonce в карту, определенную в первом шаге.

15. отсортируйте атрибуты в карте по возрастанию в соответствии с ASCII (порядок по словарю) и преобразуйте карту в строку в формате "key1=value1&key2=value2".

16. HMAC_SHA1 шифрует строку, преобразованную на предыдущем шаге с помощью secret_key, и кодирует ее в Base64, чтобы получить значение параметра sign. secret_key - это информация в apikey, созданном торговой платформой.

17. Добавьте значение знака и другие необходимые параметры в заголовок запроса и отправьте запрос на целевой интерфейс.

18. SignUtil: войдите в Кассир - Центр разработчика - Документация по API - SignUtil, откройте страницу SignUtil (используйте действительный ключ доступа (access_key) в инструменте и установите белый список IP-адресов этого ключа доступа на 0.0.0.0. Настоятельно рекомендуется отменить ключ доступа после завершения отладки).

19. Метод запроса: GET

URL-адрес запроса: /ping

Данные об ответах:

- version: String - возвращается, если все интерфейсы в этом документе могут быть запрошены правильно

- timestamp: int64 - временные метки Unix

20. Метод запроса: POST

URL-адрес запроса: /api/v3/ind/createCollectingOrder

Тип запроса: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Заголовок запроса:

- access_key: из бэк-офиса торговца (например, pFqV75X3)

- timestamp: временная метка Unix (13 цифр, миллисекунды) (например, 1679724896223).

- nonce: UUID V4 (например, 794c26b0-d33c-4394-b2bb-c485eca16d9e)

- sign: вычисленная подпись (например, kAXyh+eerqrefyaF8dyFB0M4FVo=)

21. Параметры запроса:

- сумма: сумма к получению, не более чем с 2 знаками после запятой (String) (например, 40.20) - Требуется

- channelType: Тип платежа (строка) (например, BANK, UPI, IMPS, BANK) - Требуется

- externalOrderId: Номер заказа продавца (не более 64 символов) (строка) (например, 716134866255702461) - Требуется

- notifyUrl: notifyURL (String, URL) (например, http://192.168.1.135:30001) - необязательно.

- remark: Примечания (не более 255 символов) (строка) (например, 123) - необязательно

- returnUrl: адрес возврата (String, URL) (например, http://192.168.1.135:30001) - необязательно.

22. Тип ответа: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Данные об ответах:

- cashierUrl: String - Ссылка на кассу

- orderId: String - идентификатор системного заказа

- externalOrderId: String - идентификатор заказа продавца

- валюта: String - код валюты

- amount: String - сумма коллекции

- TradeNote: String - Примечание

23. Метод запроса: POST

URL-адрес запроса: /api/v3/ind/createTransferOrder

Тип запроса: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Заголовок запроса:

- access_key: из бэк-офиса торговца (например, pFqV75X3)

- timestamp: временная метка Unix (13 цифр, миллисекунды) (например, 1679724896223).

- nonce: UUID V4 (например, 794c26b0-d33c-4394-b2bb-c485eca16d9e)

- sign: вычисленная подпись (например, kAXyh+eerqrefyaF8dyFB0M4FVo=)

24. Параметры запроса:

- currencyAmount: сумма платежа с не более чем 2 знаками после запятой (String) (например, 40.20) - Требуется

- channelType: Тип платежа (строка) (например, BANK) - Обязательно

- externalOrderId: Номер заказа продавца (не более 64 символов) (строка) (например, 687279463984441035) - Требуется

- accountId: номер банковского счета (строка) (например, 13178968584) - Обязательно.

- accountType: Тип банковского счета (строка) (например, INR) - Обязательно

- ifSC: Код банка (строка) (например, YESB) - требуется по мере необходимости

- bankName: название банка (String) (например, YesBank) - необязательно в зависимости от ситуации

- userInfoName: информация о пользователе (String) (например, тест) - необязательно в зависимости от ситуации

- remark: Примечания (не более 255 символов) (строка) (например, 123) - необязательно

- notifyUrl: notifyURL (String, URL) (например, http://192.168.1.135:30001) - необязательно.

25. Тип ответа: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Данные об ответах:

- orderId: String - идентификатор заказа

- orderStatus: String - статус заказа

- externalOrderId: String - идентификатор заказа продавца

- currencyType: String - тип законного платежного средства

26. Метод запроса: POST

URL-адрес запроса: /api/v3/ind/query/collectingOrder

Тип запроса: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Заголовок запроса:

- access_key: из бэк-офиса торговца (например, pFqV75X3)

- timestamp: временная метка Unix (13 цифр, миллисекунды) (например, 1679724896223).

- nonce: UUID V4 (например, 794c26b0-d33c-4394-b2bb-c485eca16d9e)

- sign: вычисленная подпись (например, kAXyh+eerqrefyaF8dyFB0M4FVo=)

27. Параметры запроса:

- externalOrderId: номер заказа продавца (не более 64 символов) (строка) - Обязательно

- orderId: номер системного заказа (строка) - Обязательно

28. Тип ответа: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Данные об ответах:

- orderId: String - идентификатор заказа

- cashierId: String - идентификатор кассира

- orderType: int64 - Тип заказа

1 - Коллекции

- orderResourceType: int64 - тип бизнеса заказа

2 - Заказы на проведение тендеров

- userId: String - идентификатор пользователя

- orderStatus: int64 - Статус заказа

1 - будет оплачено

2 - Оплата прошла успешно

- orderTime: int64 - время создания заказа

- channelOrderId: String - идентификатор ордера канала, с которым связан ордер

- externalOrderId: String - номер заказа продавца

- orderAmount: String - Сумма заказа

- orderActualAmount: String - фактическая сумма заказа

- orderFee: int64 - Комиссия за заказ

- orderPayTime: int64 - orderPayTime

- orderCompleteTime: int64 - время выполнения заказа

- currencyType: String - тип валюты

- payType: int64 - тип платежа

102: БАНК

202: БАНК

- TradeNote: String - Примечание

- notifyUrl: String - URL-адрес обратного вызова

- markStatus: int64 - markStatus

- errorMsg: String - сообщение об ошибке

- errorMsgEn: String - сообщение об ошибке на английском языке

- accountType: String - тип счета

- accountName: String - имя учетной записи

- accountNo: String - номер счета

- orderTypeCode: String - код типа заказа

- orderResourceTypeCode: String - код типа бизнеса заказа

- orderStatusCode: String - Описание статуса заказа

- payTypeCode: String - код типа платежа (см. payType)

29. Метод запроса: POST

URL-адрес запроса: /api/v3/ind/query/transferOrder

Тип запроса: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Заголовок запроса:

- access_key: из бэк-офиса торговца (например, pFqV75X3)

- timestamp: временная метка Unix (13 цифр, миллисекунды) (например, 1679724896223).

- nonce: UUID V4 (например, 794c26b0-d33c-4394-b2bb-c485eca16d9e)

- sign: вычисленная подпись (например, kAXyh+eerqrefyaF8dyFB0M4FVo=)

30. Параметры запроса:

- externalOrderId: номер заказа продавца (не более 64 символов) (строка) - Обязательно

- orderId: номер системного заказа (строка) - Обязательно

31. Тип ответа: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Данные об ответах:

- orderId: String - идентификатор заказа

- cashierId: String - идентификатор кассира

- orderType: int64 - Тип заказа

2 - Оплата

- orderResourceType: int64 - тип бизнеса заказа

2 - Заказы на проведение тендеров

- userId: String - идентификатор пользователя

- orderStatus: int64 - Статус заказа

1 - Принято

2 - Незавершенные банковские операции

4 - Отказ (не принимается банками)

8 - Успех

16 - Неудача

- orderTime: int64 - время создания заказа

- channelOrderId: String - идентификатор ордера канала, с которым связан ордер

- externalOrderId: String - номер заказа продавца

- orderAmount: String - Сумма заказа

- orderActualAmount: String - фактическая сумма заказа

- orderFee: int64 - Комиссия за заказ

- orderPayTime: int64 - orderPayTime

- currencyType: String - тип валюты

- payType: int64 - тип платежа

102: БАНК

202: БАНК

- TradeNote: String - Примечание

- notifyUrl: String - URL-адрес обратного вызова

- markStatus: int64 - markStatus

- errorMsg: String - сообщение об ошибке

- errorMsgEn: String - сообщение об ошибке на английском языке

- accountType: String - тип счета

- accountName: String - имя учетной записи

- accountNo: String - номер счета

- orderTypeCode: String - код типа заказа

- orderResourceTypeCode: String - код типа бизнеса заказа

- orderStatusCode: String - Описание статуса заказа

- payTypeCode: String - код типа платежа (см. payType)

32. Метод запроса: GET

URL-адрес запроса: /api/v3/ind/query/balance

Тип запроса: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Заголовок запроса:

- access_key: из бэк-офиса торговца (например, pFqV75X3)

- timestamp: временная метка Unix (13 цифр, миллисекунды) (например, 1679724896223).

- nonce: UUID V4 (например, 794c26b0-d33c-4394-b2bb-c485eca16d9e)

- sign: вычисленная подпись (например, kAXyh+eerqrefyaF8dyFB0M4FVo=)

33. Тип ответа: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Данные об ответах:

- accountBalance: String - доступный остаток на счете

- accountFreezeAmount: String - сумма замораживания счета

- accountStatusId: int64 - идентификатор состояния счета

- accountWaitSettledAmount: String - сумма ожидающего расчета по счету

- currencyType: String - тип законного платежного средства

- Статус счета: String - статус счета

34. Метод запроса: POST

URL-адрес запроса: /api/v3/ind/query/bank

Тип запроса: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Заголовок запроса:

- access_key: из бэк-офиса торговца (например, pFqV75X3)

- timestamp: временная метка Unix (13 цифр, миллисекунды) (например, 1679724896223).

- nonce: UUID V4 (например, 794c26b0-d33c-4394-b2bb-c485eca16d9e)

- sign: вычисленная подпись (например, kAXyh+eerqrefyaF8dyFB0M4FVo=)

35. Параметры запроса:

Если вам нужно запросить все банки, передайте пустую строку. Пример:

- bankName: Название банка (строка) - Обязательно

36. Тип ответа: Заголовок: {'Content-Type': 'application/json;charset=utf-8'}

Данные об ответах:

- bankName: String - название банка

- BankCode: String - код банка

- currencyType: String - тип валюты

- channelBankId: String - идентификатор банка канала

- channelId: String - идентификатор канала

- BankName: AndhraBank, Bank of Baroda, BandhanBank, CentralBank of India, CanaraBank, DCBBank, FederalBank, HDFCBank, ICICIBank. IDFCFirst Bank, IndianBank, IndianOverseasBank, KarnatakaBank, KotakMahindra Bank, KarurVysyaBank, PunjabNationalBank, StateBank of India, StandardCharteredBank, SouthIndianBank, SyndicateBank, UnionBank of India, UCOBank, UPI, AxisBank, YesBank, BNIB, Canara Bank, DCB Bank, Federal Банк, HDFC Bank, Punjab National Bank, Indian Bank, ICICI Bank, Syndicate Bank, Karur Vysya Bank, Union Bank of India, Kotak Mahindra Bank, IDFC First Банк, Андхра Банк, Карнатака Банк, icici corporate bank, Axis Bank, UCO Bank, South Indian Bank, Yes Bank, Standard Chartered Bank, State Bank of India, Indian Overseas Bank, Bandhana Bank, Indian Bank, ICICI Bank, Syndicate Bank, Karur Vysya Bank, Union Bank of India Индийский заморский банк, Бандхан Банк, Центральный банк Индии, Банк Барода, UPI

37. проверка достоверности описания:

Запросы API, передаваемые через Интернет, очень подвержены взлому. Чтобы обеспечить целостность обратных вызовов, вы можете установить параметр обратного вызова Аутентификация подписи. Чтобы установить этот параметр, войдите в Кассир - Центр разработчика - Адрес обратного вызова - Добавить.

38.