Перейти к содержимому

Host-to-Host API

Стройте свою страницу оплаты

REST-методы и вебхуки, подписанные по HMAC. Экраны оплаты вы рисуете сами и сами решаете, в каком порядке они идут. Бэкенд при этом тот же, что у остальных продуктов Paymos.

Стройте свою страницу оплаты

Как это работает

Три вызова. Ваш интерфейс посередине

Создайте счёт из своего бэкенда, нарисуйте платёжный экран сами, получите подписанное событие, когда платёж подтвердится. Граница остаётся чистой.

  1. 1

    Создайте счёт

    POST на /v1/invoices из вашего бэкенда. Передайте сумму, валюту и свой external_order_id. В ответ придут идентификатор счёта и ссылка на оплату.

  2. 2

    Нарисуйте свой интерфейс

    Актив и сеть клиент выбирает на вашей стороне, ваш сервер подтверждает выбор — в ответ приходит адрес для перевода. Дальше показывайте адрес, QR и таймер в том виде, как выглядит ваш продукт.

  3. 3

    Получите подписанный вебхук

    Когда платёж подтверждается, на ваш эндпоинт приходит POST-событие с подписью HMAC. Проверьте подпись, отметьте заказ оплаченным, верните 200.

Опробуйте каждый вызов до релиза

Интерактивная консоль в панели отправляет запросы в тестовую среду с вашим API-ключом и показывает подпись HMAC, заголовки и ответ.

Три вызова. Ваш интерфейс посередине

Создано для контроля

Когда нужен собственный платёжный интерфейс

Для команд, которые собирают свою форму оплаты по API — точно под свой бренд и со связкой со своими системами. Host-to-host нужен, когда не подходит ни одна готовая форма.

Свой экран оплаты

Выбор кошелька, QR-код и обновления статуса рисуете вы. В своей дизайн-системе и своими словами.

Работает с любым сервером

API работает с Node, Python, PHP, Go, Ruby, Java, .NET и любым сервером с поддержкой HTTP. Обязательной клиентской библиотеки нет.

Подписанные вебхуки с повторами

Тело запроса подписано по HMAC. Если обработчик не ответил, доставка повторяется: одиннадцать попыток примерно за шестнадцать часов, с растущей паузой. Дальше событие отправляете заново вручную. Подпись проверяете у себя, дубли — тоже.

Тестовый режим

Тестовый режим рядом с рабочим. Те же эндпоинты, изолированные данные, без реального перевода в блокчейне.

Что вы контролируете

Вы рисуете интерфейс. Мы следим за блокчейном

Всё, что видит клиент, рисует ваш код. Выдача адресов, наблюдение за сетью, глубина подтверждений и расчёт остаются за Paymos.

Ваш интерфейс

Выбор кошелька и сети, адрес, QR-код и статусы оплаты отображаются в вашем интерфейсе.

Ваш поток

Стройте порядок шагов как нужно продукту. Встройте оплату в онбординг, разбейте на экраны, спрячьте за аутентификацией.

Ваш бренд

Paymos не появляется ни в адресе, ни в оформлении для клиента. Платёжная поверхность полностью под вашим брендом.

Ваш расчёт

Выводите на казначейский кошелёк тогда, когда решите: запрос уходит в сеть сразу. Баланс тот же, что и у остальных способов подключения.

Начало работы

Тот же бэкенд, без SDK

Создайте счёт REST-вызовом, опрашивайте статус по таймеру или подпишитесь на вебхук, рисуйте интерфейс как удобно. Восемь официальных серверных SDK, одинаковая схема подписи везде.

Документация
import { Paymos, externalOrderId } from '@paymos/sdk';

const paymos = new Paymos({
  apiKey: process.env.PAYMOS_API_KEY,
  apiSecret: process.env.PAYMOS_API_SECRET,
});

const invoice = await paymos.invoices.create({
  projectId: 'prj_xxxxxxxxxxxx',
  amount: '100.00',
  currency: 'USD',
  externalOrderId: externalOrderId('order'),
  clientId: 'customer-456',
});

console.log(invoice.invoiceId, invoice.paymentUrl);
import os

from paymos import Paymos

paymos = Paymos(
    api_key=os.environ["PAYMOS_API_KEY"],
    api_secret=os.environ["PAYMOS_API_SECRET"],
)
invoice = paymos.invoices.create(
    project_id="prj_xxxxxxxxxxxx",
    amount="100.00",
    currency="USD",
    external_order_id="order-123",
    client_id="customer-456",
)

print(invoice["invoice_id"], invoice["payment_url"])
<?php
use Paymos\Client;
use Paymos\ClientConfig;
use Paymos\IdempotencyKey;

$paymos = new Client(new ClientConfig(
    getenv('PAYMOS_API_KEY'),
    getenv('PAYMOS_API_SECRET')
));
$invoice = $paymos->invoices()->create(array(
    'project_id' => 'prj_xxxxxxxxxxxx',
    'amount' => '100.00',
    'currency' => 'USD',
    'external_order_id' => IdempotencyKey::externalOrderId('order'),
    'client_id' => 'customer-456',
));

echo $invoice['invoice_id'] . ' ' . $invoice['payment_url'];
package main

import (
	"context"
	"fmt"
	"os"

	paymos "github.com/Paymos-labs/go-sdk/v2"
)

func main() {
	client, err := paymos.NewClient(os.Getenv("PAYMOS_API_KEY"), os.Getenv("PAYMOS_API_SECRET"))
	if err != nil {
		panic(err)
	}
	invoice, err := client.Invoices.Create(context.Background(), paymos.CreateInvoiceParams{
		ProjectID:       "prj_xxxxxxxxxxxx",
		Amount:          "100.00",
		Currency:        "USD",
		ExternalOrderID: "order-123",
		ClientID:        stringPointer("customer-456"),
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(invoice.InvoiceID, invoice.PaymentURL)
}

func stringPointer(value string) *string { return &value }
using Paymos;

using var paymos = new PaymosClient(
    Environment.GetEnvironmentVariable("PAYMOS_API_KEY")!,
    Environment.GetEnvironmentVariable("PAYMOS_API_SECRET")!);

var invoice = await paymos.Invoices.CreateAsync(new CreateInvoiceRequest(
    ProjectId: "prj_xxxxxxxxxxxx",
    Amount: "100.00",
    Currency: "USD",
    ExternalOrderId: "order-123",
    ClientId: "customer-456"));

Console.WriteLine($"{invoice.InvoiceId} {invoice.PaymentUrl}");
import io.paymos.CreateInvoiceRequest;
import io.paymos.Invoice;
import io.paymos.PaymosClient;

PaymosClient paymos = new PaymosClient(
    System.getenv("PAYMOS_API_KEY"),
    System.getenv("PAYMOS_API_SECRET"));

Invoice invoice = paymos.invoices.create(
    CreateInvoiceRequest.builder()
        .projectId("prj_xxxxxxxxxxxx")
        .amount("100.00")
        .currency("USD")
        .externalOrderId("order-123")
        .clientId("customer-456")
        .build());

System.out.println(invoice.invoiceId() + " " + invoice.paymentUrl());
require 'paymos'

paymos = Paymos::Client.new(
  api_key: ENV.fetch('PAYMOS_API_KEY'),
  api_secret: ENV.fetch('PAYMOS_API_SECRET')
)
invoice = paymos.invoices.create(
  project_id: 'prj_xxxxxxxxxxxx',
  amount: '100.00',
  currency: 'USD',
  external_order_id: 'order-123',
  client_id: 'customer-456'
)

puts "#{invoice.invoice_id} #{invoice.payment_url}"
use paymos::{CreateInvoiceRequest, PaymosClient};

let paymos = PaymosClient::new(
    std::env::var("PAYMOS_API_KEY")?,
    std::env::var("PAYMOS_API_SECRET")?,
)?;
let invoice = paymos
    .invoices()
    .create(&CreateInvoiceRequest {
        project_id: "prj_xxxxxxxxxxxx".to_owned(),
        amount: "100.00".to_owned(),
        currency: "USD".to_owned(),
        external_order_id: "order-123".to_owned(),
        network: None,
        allow_multiple_payments: None,
        customer_fee_percent: None,
        client_id: Some("customer-456".to_owned()),
    })
    .await?;

println!("{} {}", invoice.invoice_id, invoice.payment_url);

Одна схема подписи

HMAC-SHA256 с общим секретом. Та же схема для создания счёта, опроса статуса, вывода, проверки вебхука — единый поток аутентификации.

Для платформ

Несколько проектов в одном аккаунте, API-ключи с ограниченными правами, идемпотентность через external_order_id. Собирайте оплату как удобно — API остаётся тем же.

Кто использует Host-to-Host

Для бизнесов, которые строят остальной стек сами

Для бирж, кастодиальных кошельков и торговых платформ с собственной инженерной командой и отдельным платёжным интерфейсом.

Криптобиржи

Депозиты как часть самого торгового интерфейса, а не редирект на сторонний сайт.

Кастодиальные кошельки

Пополнение прямо внутри кошелька. Без выхода в браузер, без перехода в сторонний процесс.

Торговые платформы

Пополнение маржи, сверка депозитов и расчёты по нескольким счетам строятся на методах REST API.

Платформы со своим экраном оплаты

Продуктовые команды, которым проще собрать экран оплаты самим, чем встроить чужой. Адреса, статус подтверждения и подписанные события приходят из API, а то, что видит пользователь, пишет ваш код.

Тарифы

1,0 % с оплаченного счёта. Enterprise — 0,3 %

Цифры те же, что и на других способах подключения. Enterprise — 0,3 % по запросу: порога по обороту нет, запросить можно в первый день.

Тарифы

Соберите свой экран оплаты на API Paymos