> For the complete documentation index, see [llms.txt](https://wiki.relictum.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.relictum.pro/ru/faq/instrukcii/podklyuchenie-platezhnogo-shlyuza.md).

# Подключение платежного шлюза

Для организации приема платежей через Relictum Pay необходимы следующие атрибуты:

1. Белая нода.
2. Ключи шифрования.
3. Relictum PHP SDK.
4. Платежный контракт, зарегистрированный в белой ноде.

## 1.  Белая нода

Белая нода - это нода с публичным IP-адресом, с помощью которого можно организовать любой собственный домашний сервер для публикации в сети Интернет.&#x20;

По ссылке на Medium вы можете найти [инструкцию по установке белой ноды](/ru/faq/instrukcii/kak-zapustit-beluyu-nodu.md).

## 2.  Ключи шифрования

Следующий шаг - нужно сгенерировать ключи доступа для авторизации на ноде при выполнении запросов на выставление счетов и переводов активов.&#x20;

В консоли поочередно введите следующие команды:

```
openssl genrsa - out private .key 2048
```

```
openssl rsa - in private . key -pubout -out key .pub
```

Пошаговая инструкция ниже:

#### Шаг 1. Ввод первой команды

<figure><img src="/files/gsYIE1S1ht1DA2sfJUyq" alt=""><figcaption></figcaption></figure>

#### Шаг 2. Результат

<figure><img src="/files/NxuUAz5sSIMTzzOePOeb" alt=""><figcaption></figcaption></figure>

#### Шаг 3. Ввод второй команды

<figure><img src="/files/gRNz8xEiS5Avc6rK1x4O" alt=""><figcaption></figcaption></figure>

#### Шаг 4. Результат

<figure><img src="/files/NnMGM98p2uKT2xnzMLQU" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/K7tmUXwSh5yzAXE1BgkR" alt=""><figcaption></figcaption></figure>

Для выставления счетов через RelictumPay необходимо переименовать файл key.pub таким образом, чтобы его название соответствовало URI вашего контракта. Название должно быть без "system://" и включать символ "-" в качестве разделителя. Перенесите его в директорию (корень) ноды.

Пример: ваш контракт system://payments/mycontract - в этом случае файл (ключ) должен называться payments-mycontract.pub .

Организация выплат с ноды:

* Для отправки токенов $GTN файл key.pub необходимо переименовать в transfer.pub .
* Для отправки любых других токенов файл key.pub необходимо переименовать в transfer2.pub .

Пример, как выглядит папка с нодой с файлами:

<figure><img src="/files/JIv0gP6TSjYNpECXNHiW" alt=""><figcaption></figcaption></figure>

При авторизации запроса направлять вместе с данными также файл .key , который соответствует своей паре ключа .pub .

<figure><img src="/files/gL9WEmPwooJbL2qvLqc8" alt=""><figcaption></figcaption></figure>

Еще один вариант, как создать счёт на оплату для клиента через смарт-контракт на языке php с использованием нашего SDK:

<pre><code>$r = $request->doPaymentCreate( 'contract' , [ 'data' => [
        'payment' => $id,
        'addressfrom' => $relictum,
        'addressto' => $myaddress,
        'token' => 'usdr' ,
        'amount' => $sum
<strong>    ]]);
</strong></code></pre>

Результат на скриншоте ниже:

<figure><img src="/files/NBIkgv9C32vOq8ZzrZVn" alt=""><figcaption></figcaption></figure>

## 3. Relictum PHP SDK

Если вы используете PHP в своем проекте, то SDK поможет вам в организации этого процесса.

Установка. Введите команду в консоли:

```
composer require relictumblockchain/rphpsdk
```

Если вы используете версии PHP8 и выше, то необходимо добавить флажок отключения проверки версий, так как в противном случае произойдет ошибка при установке:

```
--ignore-platform-req=php
```

Вы также можете делать запросы и на других языках или другими способами. Описанная выше последовательность работает для PHP.

По ссылке [пример готовой ноды](https://mega.nz/file/8lMngIzI#oiMIBU2cb4Nl9ST_VUOgPprxEM-AffQhG3NhjpQeR0A) с подключенным платежным контрактом и подробным примером скриптов на PHP.

## 4. Регистрация платежного контракта в белой ноде:

1. Зайдите в раздел Продукты -> Платежный контракт -> Добавить контракт.
2. Заполните следующие поля:

* Системное имя контракта: любое название на латинице в нижнем регистре, желательно одним словом.
* Поставщик - выберите любое название, желательно короткое - его будет видно в разделе RelictumPay как объект, который выставил счет на оплату. Если название поставщика будет длинным, то оно будет переноситься построчно, поэтому желательно использовать короткое).

Результат на скриншоте:

![](/files/tjnW9Or0wQqXqCbrQD3p)

3. При сохранении и создании платежного контракта с вас спишется 50 USDR.

Выглядит это таким образом:

<figure><img src="/files/6MW0bgq4QwfLBRfaPZng" alt=""><figcaption></figcaption></figure>

Пример отправки запроса через консоль:

```
<?php

require ( _DIR__ . '/vendor/autoload.php' );

$privateKeyPath = _DIR__ . '/transfer.key';
$authorizationHelper = new
\Relictum\RPHPSDK\Helpers\AuthorizationHelper($privateKeyPath);

// Create configurator and set node uri
$configurator = new Relictum\RPHPSDK\RequestConfigurator([
    'config' => [ 'base_uri' => 'http://127.0.0.1/api/' ],
    'authorization' => $authorizationHelper
]);

// Create a new request
$request = new Relictum\RPHPSDK\Request($configurator);

try {
    // Create a new payment invoice
    
    $id = 10 ; // Payment id (any number, unique for this
    contract)
    $contract = 'mycontract' ; // Contract alias
    $relictum = 100 ; // The account of the user to whom the
    invoice is being issued
    $myaddress = 1 ; // The account to which the tokens will be
    transferred after payment
    
    $response = $request->doPaymentCreate($contract, [ 'data' => [
        'payment' => $id,
        'accountfrom' => $relictum, // or addressfrom for use
        relictum address instead of id
        'accountto' => $myaddress, // or addressto for use
        relictum address instead of id
        'token' => 'usdr' ,
        'amount' => 200
    ]]);
}
catch (Relictum\RPHPSDK\Exceptions\NodeRequestException $e) {
    // Catch exception and output error data
    var_dump($e);
}

// Output node response
var_dump($response);
```
