Разработчикам/Начало работы
CardV Merchant API
CardV продаёт компаниям предоплаченные цифровые товары: подарочные карты, пополнения для игр, eSIM и другое. Merchant API позволяет вашему серверу покупать их автоматически. Вы проверяете баланс, находите товар, узнаёте цену, оформляете заказ и получаете коды. Заказы оплачиваются с вашего предоплаченного кошелька в CardV. Всё остальное — пополнение кошелька, история заказов и так далее — делается в личном кабинете (Merchant Portal).
#Документация
| Документ | О чём |
|---|---|
| Аутентификация | Заголовки, подпись запросов, настройка ключа |
| Каталог и заказы | Баланс, курс валют, товары, цены, заказы, коды |
| Пополнение мобильной связи | Пополнение телефонов: операторы, цены, заказы на пополнение |
| Общие правила | Суммы, даты, идентификаторы, лимит запросов, ошибки |
| Вебхуки | Уведомления о заказах на ваш сервер |
| Sandbox | Тестирование и чек-лист перед запуском |
| Безопасность | Как защитить ключи и коды |
#Среды
| Live | Sandbox | |
|---|---|---|
| Базовый URL API | https://b2b.cardv.net/api/v1 | https://sandbox.cardv.net/api/v1 |
| Личный кабинет | https://b2b.cardv.net/portal/ | Тот же кабинет, переключитесь на Sandbox |
Sandbox — это отдельная тестовая копия CardV с тестовыми деньгами. Ключи, балансы, заказы и ID товаров в каждой среде свои.
#Быстрый старт
Подайте заявку на аккаунт в кабинете и подтвердите email.
Дождитесь одобрения. CardV проверяет вашу компанию. После этого вы получаете Merchant ID, например
M00000001.Откройте Sandbox. Войдите в кабинет и выберите Sandbox в верхней панели. Вам начислят 1 000 USD тестовых денег.
Создайте API-ключ. В кабинете откройте Integrations → API keys. Создайте ключ. Кабинет один раз покажет ID ключа и секрет подписи. Сохраните секрет в хранилище секретов.
Проверьте баланс:
export CARDV_BASE=https://sandbox.cardv.net export CARDV_KEY_ID=ck_test_... # shown in the Portal export CARDV_SIGNING_SECRET=cs_test_... # from your secret store cardv_get() { # every call is signed, see Authentication local ts nonce sig ts=$(date +%s); nonce=$(openssl rand -hex 16) sig=$(printf 'GET\n%s\n%s\n%s\n%s' "$1" "$ts" "$nonce" \ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 \ | openssl dgst -sha256 -hmac "$CARDV_SIGNING_SECRET" -hex | sed 's/^.*= //') curl -sS "$CARDV_BASE$1" -H "X-Key-Id: $CARDV_KEY_ID" \ -H "X-Timestamp: $ts" -H "X-Nonce: $nonce" -H "X-Signature: $sig" } cardv_get "/api/v1/balance"Найдите товар:
cardv_get "/api/v1/skus?search=steam&limit=20"Выберите товар с
"availability": "available"и запишите егоsku_id.Узнайте цену:
cardv_get "/api/v1/skus/S000001/quote?quantity=1"Запомните
merchant_price— это ваша цена за единицу.Оформите заказ. Подпишите его, как и любой запрос. Возьмите пример из раздела Аутентификация и отправьте такое тело:
{ "external_order_id": "TEST-0001", "items": [ {"sku_id": "S000001", "quantity": 1, "expected_unit_price": "9.25"} ] }В ответ придёт HTTP 201 с номером заказа CardV, например
O-00001234.Получите коды. Вызывайте
GET/api/v1/orders/O-00001234, пока статус не станетsucceeded. Коды лежат вitems[].deliveries[]:card_number,pin_codeиredeem_url. Можно также получать вебхук, когда заказ завершится.Переходите в Live, когда пройдёте чек-лист Sandbox.
ID и цены выше — только примеры. Используйте значения из своего каталога.
#Кратко об API
Всего шестнадцать методов. Все пути начинаются с /api/v1.
| Метод | Для чего | Подпись |
|---|---|---|
GET/account | Данные вашей компании и статус доступа к API | Нет |
GET/balance | Сколько денег можно потратить | Нет |
GET/fx-rates | Курс USD для магазинов в другой валюте | Нет |
GET/products | Список товаров, у каждого все SKU | Нет |
GET/products/{product_id} | Один товар с SKU и полными текстами | Нет |
GET/skus | Список товаров, доступных вам, с вашими ценами | Нет |
GET/skus/{sku_id} | Один товар | Нет |
GET/skus/{sku_id}/quote | Текущая цена за нужное количество | Нет |
POST/orders | Оформить заказ с оплатой из кошелька | Да |
GET/orders/{order_id} | Статус заказа и коды | Нет |
GET/recharge/countries | Страны, где доступно пополнение | Нет |
GET/recharge/operators | Операторы связи и суммы в стране | Нет |
POST/recharge/quote | Цена одного пополнения мобильной связи | Да |
POST/recharge/orders | Пополнить телефон с оплатой из кошелька | Да |
GET/recharge/orders | Список ваших заказов на пополнение | Нет |
GET/recharge/orders/{order_id} | Статус заказа на пополнение | Нет |
Любой другой метод при вызове с API-ключом вернёт HTTP 403:
{"detail": "This operation is only available in the Merchant Portal."}Пополнение мобильной связи описано в разделе Пополнение мобильной связи.
#Идентификаторы
| Что | Пример | Пояснение |
|---|---|---|
| Merchant ID | M00000001 | Ваш идентификатор. Никогда не меняется. |
| SKU (товар, который можно купить) | S000456 | Нужен, чтобы узнать цену и заказать. |
| Номер заказа CardV | O-00001234 | Сохраните его вместе со своим заказом. |
| Ваш номер заказа | SHOP-10001 | Вы задаёте его сами (external_order_id). |
Храните ID как строки и не разбирайте их на части. Подробнее — в разделе Общие правила.
#Что делается в кабинете
- Пополнение кошелька и письмо о низком балансе
- История заказов, поиск и выгрузка в CSV
- Счета по заказам
- Операции по кошельку и сверка
- Настройка вебхуков, история отправок и повторная отправка
- API-ключи
- Список разрешённых IP
- Сотрудники и роли
- Журнал аудита
- Двухэтапная проверка (2FA)
- Переключение между Live и Sandbox
#Совместимость и поддержка
Мы можем без предупреждения добавлять новые поля в ответы и новые статусы. Незнакомые поля просто пропускайте. Если статус заказа вам незнаком, считайте, что заказ ещё не завершён. Не опирайтесь на формулировки сообщений об ошибках.
Пишите на [email protected]. Укажите Merchant ID, среду, номера заказов, время (UTC) и HTTP-статус.
Никогда не присылайте API-ключи, подписи, секреты вебхуков и коды карт.
Вопросы по интеграции? Напишите на [email protected], указав ваш Merchant ID и ID заказа или запроса.