.. meta:: :description: Аутентификация запроса SHA-1 в API Payneteasy: вычисление контрольного поля из выбранных параметров запроса и контрольного ключа торговца для безопасности API. .. _SHA1: Метод аутентификации запросов SHA-1 ############################################################ .. role:: ex .. role:: code Для формирования запроса с аутентификацией SHA-1 необходимо: #. :ref:`Сформировать подпись`, #. :ref:`Сформировать запрос`. .. _sha1_signature_generation: Формирование подписи SHA1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #. Провести конкатенацию необходимых параметров в единую строку (также упоминается как "строка для подписи" и "базовая строка для подписи"). Каждая команда API может содержать собственный список и порядок включения параметров в конкатенацию для формирования строки для подписи. Этот список содержится в описании параметра ``control`` для каждой соответствующей API команды с аутентификацией с помощью SHA1. .. note:: Необходимо использовать минимальные денежные единицы для значения amount в строке для подписи (копейки, центы и т.д.). Для суммы 0.94 USD значение в строке для подписи должно быть 94, для 10.15 USD значение в строке для подписи должно быть 1015. Пример параметров: .. code-block:: endpointid=1111 client_orderid=902B4FF5 amount=10.42 email=john.smith@gmail.com merchant_control=B17F59B4-A7DC-41B4-8FF9-37D986B43D20 Пример базовой строки для подписи после конкатенации: .. code-block:: 1111902B4FF51042john.smith@gmail.comB17F59B4-A7DC-41B4-8FF9-37D986B43D20 #. Подписать полученную строку для подписи с помощью SHA-1: Пример формирования подписи SHA-1 на Java: .. code-block:: java package com.Payneteasy; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class HashTextTest { /** * @param args * @throws NoSuchAlgorithmException */ public static void main(String[] args) throws NoSuchAlgorithmException { System.out.println(sha1("test string to sha1")); } static String sha1(String input) throws NoSuchAlgorithmException { MessageDigest mDigest = MessageDigest.getInstance("SHA1"); byte[] result = mDigest.digest(input.getBytes(StandardCharsets.UTF_8)); StringBuilder sb = new StringBuilder(); for (byte b : result) { sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); } return sb.toString(); } } Пример формирования подписи SHA-1 на Java .. code-block:: html Пример формирования подписи SHA-1 на Bash + openssl .. code-block:: bash echo -n "test string to sha1" | openssl dgst -sha1 Готовая подgись будет выглядеть следующим образом: .. code-block:: c6bdd88a78834ef4b863b088827a459f039e8257 .. _sha1_request_generation: Формирование запроса SHA1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Для совершения запроса необходимо использовать значение полученной подписи в параметре ``control`` в теле запроса. Чтобы сформировать запрос: .. code-block:: Request method: POST Request URI: https://gate.payneteasy.ru/paynet/api/v2/sale/1111 Body: client_orderid=902B4FF5&order_desc=Test Order Description&first_name=John&last_name=Smith&ssn=1267&birthday=19820115&address1=100 Main st&city=Seattle&state=WA&zip_code=98102&country=US&phone=+12063582043&cell_phone=+19023384543&amount=10.42&email=john.smith@gmail.com¤cy=USD&ipaddress=65.153.12.232&site_url=https://doc.payneteasy.ru&credit_card_number=4538977399606732&card_printed_name=CARD HOLDER&expire_month=12&expire_year=2099&cvv2=123&purpose=user_account1&control=c6bdd88a78834ef4b863b088827a459f039e8257 Чтобы сформировать CURL запрос: .. code-block:: curl --data " client_orderid=902B4FF5 &order_desc=Test Order Description &first_name=John &last_name=Smith &ssn=1267 &birthday=19820115 &address1=100 Main st &city=Seattle &state=WA &zip_code=98102 &country=US &phone=+12063582043 &cell_phone=+19023384543 &amount=10.42 &email=john.smith@gmail.com ¤cy=USD &ipaddress=65.153.12.232 &site_url=https://doc.payneteasy.ru &credit_card_number=4538977399606732 &card_printed_name=CARD HOLDER &expire_month=12 &expire_year=2099 &cvv2=123 &purpose=user_account1 &control=c6bdd88a78834ef4b863b088827a459f039e8257 " https://gate.payneteasy.ru/paynet/api/v2/sale/1111 Формирование подписи SHA1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html :file: ../../_static/examples/sha1_status_signature.html Формирование подписи SHA1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html :file: ../../_static/examples/sha1_sale_signature.html Подпись обратного вызова SHA1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html :file: ../../_static/examples/sha1_callback_signature.html