1. Использование билиотеки LiqPay «Оплата в 1 клик»»
Библиотека “Оплата в 1 клик” для Android OS (далее “библиотека”) разработана на Java и представлена единым jar файлом, который содержит инструменты взаимодействия с API LiqPay.
Jar файл необходимо добавить в проект для последующего использования.
Вам необходимо добавить следующее разрешение в AndroidManifest.xml файле:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Пример активити в файле AndroidManifest.xml.:
<activity android:name="YourActivity" android:label="@string/your_activity_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name="ua.privatbank.paylibliqpay.CheckoutActivity"/>
2. Примеры использования библиотеки:
2.1. Шаг №1 - card auth
Запрос можно выполнить 2-я способами.
1) используя server-server Auth API.
2) используя библиотеку.
2) используя библиотеку.
2.1.1. Card Auth с использованием server-server API.
Прямая ссылка на описание API: https://www.liqpay.com/ru/doc/auth).
Пример активити в файле AndroidManifest.xml.:
HashMap params = new HashMap();
params.put("version", "3");
params.put("amount", "1");
params.put("currency", "USD");
params.put("description", "description text");
params.put("order_id", "order_id_1");
params.put("card", "54570934949556060");
params.put("card_exp_month", "11");
params.put("card_exp_yesr", "17");
params.put("card_cvv", "171");
LiqPay liqpay = new LiqPay(PUBLIC_KEY, PRIVATE_KEY);
HashMap res = liqpay.api("payment/auth", params);
System.out.println(res.get("status"));
Пример активити в файле AndroidManifest.xml:
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
API_URL='https://www.liqpay.com/api/payment/auth'
JSON="{
\"version\" : 3,
\"public_key\" : \"${PUBLIC_KEY}\",
\"phone\" : \"380950000001\",
\"amount\" : \"1\",
\"currency\" : \"USD\",
\"description\" : \"description text\",
\"order_id\" : \"order_id_1\",
\"card\" : \"4731195301524634\",
\"card_exp_month\" : \"03\",
\"card_exp_year\" : \"22\",
\"card_cvv\" : \"111\"
}"
# DATA is besa64 encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
# REQ is json response from liqpay
REQ=$(curl --silent -XPOST ${API_URL} --data-urlencode data="${DATA}" --data-urlencode signature="${SIGNATURE}")
echo "Result: ${REQ}"
# DATA is in example
# eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgInBob25l
# IiA6ICIzODA5NTAwMDAwMDEiLCAiYW1vdW50IiA6ICIxIiwgImN1cnJlbmN5IiA6ICJVU0QiLCAi
# ZGVzY3JpcHRpb24iIDogImRlc2NyaXB0aW9uIHRleHQiLCAib3JkZXJfaWQiIDogIm9yZGVyX2lk
# XzEiLCAiY2FyZCIgOiAiNDczMTE5NTMwMTUyNDYzNCIsICJjYXJkX2V4cF9tb250aCIgOiAiMDMi
# LCAiY2FyZF9leHBfeWVhciIgOiAiMjIiLCAiY2FyZF9jdnYiIDogIjExMSIgfQ==
# SIGNATURE is in example
# WpapLS5wx2V+IJouAwplFPluFAo=
2.1.2. Card Auth с использованием библиотеки:.
Безопасность:
a) private key хранится в SDK,
b) библиотека формирует сигнатуру.
b) библиотека формирует сигнатуру.
Метод чекаут:
HashMap<String, String> map = new HashMap<String, String>();
map.put("version", "3");
map.put("public_key", "your public_key");
map.put("action", "auth");
map.put("amount", "payment amount");
map.put("currency", "payment currency");
map.put("description", "account top-up");
map.put("order_id", "123456");
map.put("language", "ru");
map.put("server_url", "https://www.wargaming.net");
map.put("card", "5457095645459696");
map.put("card_exp_month", "11");
map.put("card_exp_year", "17");
map.put("card_exp_cvv", "171");
LiqPay.api(getApplicationContext(),"auth", map, "your_privat_key", callBack);
Параметры запроса инициализации:
| # | parameter | value |
|---|---|---|
| 1 | context | context приложения |
| 2 | params | параметры запроса |
| 3 | privateKey | shop private key в LiqPay. Не рекомендуется хранить ключи в коде приложения, тк ключи могут быть дискредитированы во время декомпеляции приложения |
| 4 | version | версия API. текущая версия - 3 |
| 5 | public_key | public key - id магазина in LiqPay |
| 6 | action | тип платежа. Значение auth - верификация карты |
| 7 | amount | сумма платежа. Пример: 5, 7.34 |
| 8 | currency | валюта платежа. Значение: USD, EUR, RUB, UAH |
| 9 | card | номер карты клиента |
| 10 | card_exp_month | Месяц срока действия карты плательщика. Например: 08 |
| 11 | card_exp_year | Год срока действия карты плательщика.Например: 19 |
| 12 | card_exp_cvv | CVV/CVV2 |
| 13 | description | назначение платежа |
| 14 | order_id | уникальный идентификатор платежа в Вашей системе |
| 15 | language | язык клиента: ru, en, uk |
2.1.3. Card auth с использование библиотеки (рекомендуемый).
LiqPay.api(getApplicationContext(), "auth", your_base64Data, your_signature, callBack);
Параметры data и signature компания формирует на сервере.
Пример формирования параметров data и signature:
Пример формирования параметров data и signature:
- PHP
data - result of function base64_encode( $json_string ) signature - result of function base64_encode( sha1( $private_key . $data . $private_key, 1 ) )
- BASH
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
JSON="{
\"version\" : 3,
\"public_key\" : \"${PUBLIC_KEY}\",
\"action\" : \"auth\",
\"amount\" : 1,
\"currency\" : \"USD\",
\"description\" : \"description text\",
\"order_id\" : \"order_id_1\"
\"card\" : \"5456096757575734\"
\"card_exp_month\" : \"11\"
\"card_exp_year\" : \"17\"
\"card_exp_cvv\" : \"171\"
}"
# DATA is besa64 encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
echo "data: ${DATA}"
echo "signature: ${SIGNATURE}"
# DATA in this example
# eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgImFjdGlv
# biIgOiAicGF5IiwgImFtb3VudCIgOiAxLCAiY3VycmVuY3kiIDogIlVTRCIsICJkZXNjcmlwdGlv
# biIgOiAiZGVzY3JpcHRpb24gdGV4dCIsICJvcmRlcl9pZCIgOiAib3JkZXJfaWRfMSIgfQ==
# SIGNATURE in this example
# QvJD5u9Fg55PCx/Hdz6lzWtYwcI=
Статусы:
| success | успешный платеж |
| failure | не успешный платеж |
| error | платеж отклонен или параметры переданы не верно |
| reversed | возврат |
| sandbox | тестовый платеж |
| Промежуточные статусы | |
| wait_secure | платеж на проверке фрод-мониторингом |
| wait_accept | сумма списана с карты клиента но не зачислена магазину, так как магазин “активирован без возмещения” |
| processing | платеж в процессе проведения. Финальный статус платежа будет отправлен на server_url или статус платежа можно проверить используя библиотеку |
2.2. Шаг №2 - первый платеж клиента
2.2.1. Вариант оплаты через чекаут №1:
Security:
c) private key хранится в SDK,
d) signature формируется библиотекой.
LiqPayCallBack callBack = new LiqPayCallBack() {
@Override
public void onResponseSuccess(final String resp) {
JSONObject object = new JSONObject(resp);
if("success".equals(object.optString("status"))){
// успех
String cardToken = object.optString("card_token");
}else {
// ошибка
}
}
@Override
public void onResponceError(final ErrorCode errorCode) {
}
};
Статус платежа и токен карты клиента возвращается в Callback.
HashMap<String, String> map = new HashMap<String, String>();
map.put("version", "3");
map.put("public_key", "your public_key");
map.put("action", "pay");
map.put("amount", "payment amount");
map.put("currency", "payment currency");
map.put("description", "account top-up");
map.put("order_id", "123456");
map.put("language", "ru");
map.put("server_url", "https://www.wargaming.net");
String privateKey = "your private_key";
LiqPay.checkout(getApplicationContext(), map, privateKey, callBack);
privateKey - уникальный private key Вашего магазина в системе LiqPay.
Не рекомендуется храниться private key в коде приложения (так как он может быть дискредитирован во время декомпеляции приложения)
Security:
| # | parameter | value |
|---|---|---|
| 1 | version | версия API. Текущая версия - 3 |
| 2 | public_key | Public key - уникальный shop id в системе LiqPay |
| 3 | action | тип платежа. pay - покупка |
| 4 | amount | сумма платежа. Пример: 5, 7.34 |
| 5 | currency | валюта платежа. Значение: USD, EUR, RUB, UAH |
| 6 | description | назначение платежа |
| 7 | order_id | уникальный идентификатор платежа в Вашей системе |
| 8 | language | язык клиента: ru, en, uk |
| 9 | server_url | URL API в Вашем магазине для получение уведомлений о статусах платежа (server>server). Макс длина - 510 символов |
| 10 | recurringbytoken |
параметр позволяет генерировать токен карты плательщика card_token, который Вы получите в callback ответе на server_url.
card_tokenозволяет проводить платежи. payment/paytoken. Значение:1 |
2.2.2. Вариант оплаты через чекаут №2:
LiqPayCallBack callBack = new LiqPayCallBack() {
@Override
public void onResponseSuccess(final String resp) {
JSONObject object = new JSONObject(resp);
if("success".equals(object.optString("status"))){
// успех
String cardToken = object.optString("card_token");
}else {
// error
}
}
@Override
public void onResponceError(final ErrorCode errorCode) {
}
};
Вариант оплаты через чекаут
Пример активити в файле AndroidManifest.xml.:
LiqPay.checkout(getApplicationContext(), data, signature, callBack);
Параметры data и signature компания формирует на сервере.
b) Пример формирования data и signature:
b) Пример формирования data и signature:
- PHP
data - result of function base64_encode( $json_string ) signature - result of function base64_encode( sha1( $private_key . $data . $private_key, 1 ) )
- BASH
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
JSON="{
\"version\" : 3,
\"public_key\" : \"${PUBLIC_KEY}\",
\"action\" : \"pay\",
\"amount\" : 1,
\"currency\" : \"USD\",
\"description\" : \"description text\",
\"order_id\" : \"order_id_1\"
}"
# DATA is besa64 encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
echo "data: ${DATA}"
echo "signature: ${SIGNATURE}"
# DATA in this example
# eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgImFjdGlv
# biIgOiAicGF5IiwgImFtb3VudCIgOiAxLCAiY3VycmVuY3kiIDogIlVTRCIsICJkZXNjcmlwdGlv
# biIgOiAiZGVzY3JpcHRpb24gdGV4dCIsICJvcmRlcl9pZCIgOiAib3JkZXJfaWRfMSIgfQ==
# SIGNATURE in this example
# QvJD5u9Fg55PCx/Hdz6lzWtYwcI=
| success | успешный платеж |
| failure | не успешный платеж |
| error | платеж отклонен или параметры переданы не верно |
| reversed | возврат |
| sandbox | тестовый платеж |
| Промежуточные статусы | |
| wait_secure | платеж на проверке фрод-мониторингом |
| wait_accept | сумма списана с карты клиента но не зачислена магазину, так как магазин “активирован без возмещения” |
| processing | платеж в процессе проведения. Финальный статус платежа будет отправлен на server_url или статус платежа можно проверить используя библиотеку |
2.3. Шаг №3 - последующие оплаты клиента
Запрос на списание средств с использованием токена клиента = оплата в 1 клик.
Запрос может быть выполнен 2-я способами:
Запрос может быть выполнен 2-я способами:
используя server-server Pay token API.
используя библиотеку:
используя библиотеку:
2.3.1. Списание с карты клиента с использованием server-server API.
PayToken APi используется для выполнения запроса на списание с карты клиента (прямая ссылка на описание API: https://www.liqpay.com/ru/doc/paytoken)
JAVA SDK https://github.com/liqpay/sdk-java
HashMap params = new HashMap();
params.put("version", "3");
params.put("phone", "380950000001");
params.put("amount", "1");
params.put("currency", "USD");
params.put("description", "description text");
params.put("order_id", "order_id_1");
params.put("card_token", "B5BВB0D00B88B00ED00A00D0D");
LiqPay liqpay = new LiqPay(PUBLIC_KEY, PRIVATE_KEY);
HashMap res = liqpay.api("payment/paytoken", params);
System.out.println(res.get("status"));
Примеры формирования запроса на BASH:
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
API_URL='https://www.liqpay.com/api/payment/paytoken'
JSON="{
\"version\" : 3,
\"public_key\" : \"${PUBLIC_KEY}\",
\"phone\" : \"380950000001\",
\"amount\" : 1,
\"currency\" : \"USD\",
\"description\" : \"description text\",
\"order_id\" : \"order_id_1\",
\"card_token\" : \"B5BВB0D00B88B00ED00A00D0D\"
}"
# DATA is besa64 encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
# REQ is json response from liqpay
REQ=$(curl --silent -XPOST ${API_URL} --data-urlencode data="${DATA}" --data-urlencode signature="${SIGNATURE}")
echo "Result: ${REQ}"
# DATA in this example
# eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgInBob25l
# IiA6ICIzODA5NTAwMDAwMDEiLCAiYW1vdW50IiA6IDEsICJjdXJyZW5jeSIgOiAiVVNEIiwgImRl
# c2NyaXB0aW9uIiA6ICJkZXNjcmlwdGlvbiB0ZXh0IiwgIm9yZGVyX2lkIiA6ICJvcmRlcl9pZF8x
# IiwgImNhcmRfdG9rZW4iIDogIkI1QtCSQjBEMDBCODhCMDBFRDAwQTAwRDBEIiB9
# SIGNATURE in this example
# cLoEZBOx8jVLJDQk7QFV/P9IyJI=
2.3.2. Списание с карты клиента с использованием server-server API.
Security:
e) private key хранится в SDK,
f) библиотека формирует signature.
Метод чекаут:
HashMap<String, String> map = new HashMap<String, String>();
map.put("version", "3");
map.put("public_key", "your public_key");
map.put("action", "pay");
map.put("amount", "payment amount");
map.put("currency", "payment currency");
map.put("description", "account top-up");
map.put("order_id", "123456");
map.put("language", "ru");
map.put("server_url", "https://www.wargaming.net");
map.put("recurringbytoken", "1");
map.put("card_token", "B5BВB0D00B88B00ED00A00D0D");
LiqPay.api(getApplicationContext(),"paytoken", map, "your_privat_key", callBack);
Параметры запроса инициализации:
| # | parameter | value |
|---|---|---|
| 1 | context | context приложения |
| 2 | params | параметры запроса |
| 3 | privateKey | shop private key в LiqPay. Не рекомендуется хранить ключи в коде приложения, тк ключи могут быть дискредитированы во время декомпеляции приложения |
| 4 | callback | ответ от LiqPay |
| 5 | version | версия API. текущая версия - 3 |
| 6 | public_key | public key - shop id в системе LiqPay |
| 7 | action | тип платежа. Значение pay - покупка |
| 8 | amount | сумма платежа. Пример: 5, 7.34 |
| 9 | currency | валюта платежа. Значение: USD, EUR, RUB, UAH |
| 10 | recurringbytoken |
параметр позволяет совершать платеж без использования реквизитов карты.
Значение:1 |
| 11 | card_token | токен карты клиента |
| 12 | description | назначение платежа |
| 13 | order_id | уникальный id платежа в Вашей системе |
| 13 | description | назначение платежа |
| 14 | language | язык клиента: ru, en, uk |
| 15 | order_id | URL API в Вашем магазине для получения изменений статуса (server->server). Макс длина 510 символов. |
2.3.3. Списание с карты по токену с использованием библиотеки (рекомендованый).
LiqPay.api(getApplicationContext(), "paytoken", your_base64Data, your_signature, callBack);
Параметры data и signature компания формирует на сервере.
Пример формирования параметров data и signature:
Пример формирования параметров data и signature:
- PHP
data - result of function base64_encode( $json_string ) signature - result of function base64_encode( sha1( $private_key . $data . $private_key, 1 ) )
- BASH
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
JSON="{
\"version\" : 3,
\"public_key\" : \"${PUBLIC_KEY}\",
\"action\" : \"pay\",
\"amount\" : 1,
\"currency\" : \"USD\",
\"description\" : \"description text\",
\"order_id\" : \"order_id_1\"
}"
# DATA is besa64 encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
echo "data: ${DATA}"
echo "signature: ${SIGNATURE}"
# DATA in this example
# eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgImFjdGlv
# biIgOiAicGF5IiwgImFtb3VudCIgOiAxLCAiY3VycmVuY3kiIDogIlVTRCIsICJkZXNjcmlwdGlv
# biIgOiAiZGVzY3JpcHRpb24gdGV4dCIsICJvcmRlcl9pZCIgOiAib3JkZXJfaWRfMSIgfQ==
# SIGNATURE in this example
# QvJD5u9Fg55PCx/Hdz6lzWtYwcI=
Статусы:
| success | успешный платеж |
| failure | не успешный платеж |
| error | платеж отклонен или параметры переданы не верно |
| reversed | возврат |
| sandbox | тестовый платеж |
| Промежуточные статусы | |
| wait_secure | платеж на проверке фрод-мониторингом |
| wait_accept | сумма списана с карты клиента но не зачислена магазину, так как магазин “активирован без возмещения” |
| processing | платеж в процессе проведения. Финальный статус платежа будет отправлен на server_url или статус платежа можно проверить используя библиотеку |
2.4. Проверка статуса
Запрос на проверку статуса может быть выполнен 3-я способами:
1. с использованием библиотеки,
2. с использованием server-server API.
3. с использованием библиотеки (рекомендуемый).
2.4.1 Проверка статуса с использованием библиотеки
Security:
a) private key хранится в SDK,
b) библиотека формирует signature.
Запрос не в UI потоке:
HashMap<String, String> map = new HashMap<String, String>();
map.put("version", "3");
map.put("public_key", "your_public_key");
map.put("order_id", "123456");
LiqPay.api(getApplicationContext(), "status", map, "your_privat_key", callBack);
2.4.2 Проверка статуса с использованием server-server API
Status API используется для выполнения запроса на проверку статуса (прямая ссылка на описание API: https://www.liqpay.com/ru/doc/status)
private key хранится в SDK,
Пример формирования запроса на BASH:
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
API_URL='https://www.liqpay.com/api/payment/status'
JSON="{
\"version\" : 3,
\"public_key\" : \"${PUBLIC_KEY}\",
\"order_id\" : \"order_id_1\"
}"
# DATA is besa64 encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
# REQ is json response from liqpay
REQ=$(curl --silent -XPOST ${API_URL} --data-urlencode data="${DATA}" --data-urlencode signature="${SIGNATURE}")
echo "Result: ${REQ}"
# DATA in this example
# eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgIm9yZGVy
# X2lkIiA6ICJvcmRlcl9pZF8xIiB9
# SIGNATURE in this example
# 77Ob26+gqYrR5yEsW80ynwZgGq8=
Параметры запроса инициализации:
| # | parameter | value |
|---|---|---|
| 1 | version | версия API. Текущая версия - 3 |
| 2 | public_key | Public key - уникальный shop id в системе LiqPay |
| 7 | order_id | уникальный ID платежа в Вашем магазине. Макс длина 255 символов |
2.4.3. Проверка статуса с использованием библиотеки (рекомендуемый).
Пример формирования запроса на BASH:
LiqPay.api(getApplicationContext(), "status", your_base64Data, your_signature, callBack);
Параметры data и signature компания формирует на сервере.
Пример формирования параметров data и signature:
Пример формирования параметров data и signature:
- PHP
data - result of function base64_encode( $json_string ) signature - result of function base64_encode( sha1( $private_key . $data . $private_key, 1 ) )
- BASH
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
JSON="{
\"version\" : 3,
\"public_key\" : \"${PUBLIC_KEY}\",
\"action\" : \"pay\",
\"amount\" : 1,
\"currency\" : \"USD\",
\"description\" : \"description text\",
\"order_id\" : \"order_id_1\"
}"
# DATA is besa64 encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
echo "data: ${DATA}"
echo "signature: ${SIGNATURE}"
# DATA in this example
# eyAidmVyc2lvbiIgOiAzLCAicHVibGljX2tleSIgOiAieW91cl9wdWJsaWNfa2V5IiwgImFjdGlv
# biIgOiAicGF5IiwgImFtb3VudCIgOiAxLCAiY3VycmVuY3kiIDogIlVTRCIsICJkZXNjcmlwdGlv
# biIgOiAiZGVzY3JpcHRpb24gdGV4dCIsICJvcmRlcl9pZCIgOiAib3JkZXJfaWRfMSIgfQ==
# SIGNATURE in this example
# QvJD5u9Fg55PCx/Hdz6lzWtYwcI=
Пример механики оплаты клиентом
Схемы работы с библиотекой
1. Первая оплата клиента - метод checkout.
2. Последующие оплаты клиента - платежи с использованием токена.