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

Для организации приема платежей через 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);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.relictum.pro/ru/faq/instrukcii/podklyuchenie-platezhnogo-shlyuza.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
