Метод аутентификации запросов SHA-1
Для формирования запроса с аутентификацией SHA-1 необходимо:
Формирование подписи SHA1
Провести конкатенацию необходимых параметров в единую строку (также упоминается как “строка для подписи” и “базовая строка для подписи”). Каждая команда 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
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¤cy=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
¤cy=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