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

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

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

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

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

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

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

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

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

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

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

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

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

<figure><img src="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2FXlebPLld9hIxRbkHOiBv%2Fimage.png?alt=media&#x26;token=8b81bb0f-98c2-496e-959c-bddaef9ffb05" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2Fbu25d9vBi8lefFGjenAF%2Fimage.png?alt=media&#x26;token=3a019103-977f-4057-83ea-78ecef0f0ca0" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2F9WmMuuMFLe7XYqcSbmAD%2Fimage.png?alt=media&#x26;token=7d61297d-ce20-471a-a668-83fba83263f7" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2FMIcMMrtUOJlQrx77390k%2Fimage.png?alt=media&#x26;token=221450e1-8407-4fb4-9290-70676ffd0692" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2FzWzvzV6lg6mbDvD3kHqv%2Fimage.png?alt=media&#x26;token=ba1d1b03-8678-4e95-b72b-ff0a074bab3e" 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="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2F0bedvchvFJdjFaTFe8c5%2Fimage.png?alt=media&#x26;token=30527d09-556e-4307-9121-0b0a4cc688c3" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2FF3i5pVcpbmKDUePveje2%2Fimage.png?alt=media&#x26;token=dfc13c4a-7c19-429e-894f-29da09fba64b" 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="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2FJRbBynxPEZYQlzRlRrR3%2Fimage.png?alt=media&#x26;token=11315e0b-3689-4bbb-97e1-1eb2071ef420" 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 как объект, который выставил счет на оплату. Если название поставщика будет длинным, то оно будет переноситься построчно, поэтому желательно использовать короткое).

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

![](https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2FEQ5xcSapanzIJ50WEC2K%2Fimage.png?alt=media\&token=1d61ecb2-937d-4c42-9f8d-6aa1e2355e4e)

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

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

<figure><img src="https://2950747647-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FegoBbZZj0MrI4YvdPEPq%2Fuploads%2Fbti3GpX29Ez1N6OcOzwH%2Fimage.png?alt=media&#x26;token=30f8a7e7-7f3a-4d50-aed0-c680c46dd09b" 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);
```
