Метод аутентификации запросов SHA-1

Для формирования запроса с аутентификацией SHA-1 необходимо:

  1. Сформировать подпись,

  2. Сформировать запрос.

Формирование подписи SHA1

  1. Провести конкатенацию необходимых параметров в единую строку (также упоминается как “строка для подписи” и “базовая строка для подписи”). Каждая команда API может содержать собственный список и порядок включения параметров в конкатенацию для формирования строки для подписи. Этот список содержится в описании параметра control для каждой соответствующей API команды с аутентификацией с помощью SHA1.

    Note

    Необходимо использовать минимальные денежные единицы для значения amount в строке для подписи (копейки, центы и т.д.). Для суммы 0.94 USD значение в строке для подписи должно быть 94, для 10.15 USD значение в строке для подписи должно быть 1015.

    Пример параметров:

    endpointid=1111
    client_orderid=902B4FF5
    amount=10.42
    email=john.smith@gmail.com
    merchant_control=B17F59B4-A7DC-41B4-8FF9-37D986B43D20
    

    Пример базовой строки для подписи после конкатенации:

    1111902B4FF51042john.smith@gmail.comB17F59B4-A7DC-41B4-8FF9-37D986B43D20
    
  2. Sign the received string using SHA-1:

    Пример формирования подписи SHA-1 на 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

    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js"></script>
    <script type="text/javascript">
       var sha1value = CryptoJS.SHA1("test string to sha1");
    </script>
    

    Пример формирования подписи SHA-1 на Bash + openssl

    echo -n "test string to sha1" | openssl dgst -sha1
    

    Готовая подgись будет выглядеть следующим образом:

    c6bdd88a78834ef4b863b088827a459f039e8257
    

Формирование запроса SHA1

Для совершения запроса необходимо использовать значение полученной подписи в параметре control в теле запроса.

Пример запроса:

Request method: POST
Request URI: https://gate.payneteasy.com/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&currency=USD&ipaddress=65.153.12.232&site_url=https://doc.payneteasy.com&credit_card_number=4538977399606732&card_printed_name=CARD HOLDER&expire_month=12&expire_year=2099&cvv2=123&purpose=user_account1&control=c6bdd88a78834ef4b863b088827a459f039e8257

Пример CURL запроса:

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
   &currency=USD
   &ipaddress=65.153.12.232
   &site_url=https://doc.payneteasy.com
   &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.com/paynet/api/v2/sale/1111