> For the complete documentation index, see [llms.txt](https://help.unitpay.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.unitpay.ru/payments/create-payment-widget.md).

# Создание платежа (виджет)

Виджет - это всплывающее окно с формой оплаты.

Для использования виджета вам достаточно добавить его код на страницу сайта, настроить передачу параметров и создать событие его вызова (например, нажатие на кнопку).

Код примера и описание используемых параметров виджета расположены в личном кабинете Unitpay в настройках проекта на вкладке "Виджет оплаты" (на скриншоте ниже).

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

## Код примера:

```html
<script src="https://widget.unitpay.ru/unitpay.js"></script>
<script type="text/javascript">
    this.pay = function () {
        var payment = new UnitPay();
        payment.createWidget({
            publicKey: "123456-1a234",
            sum: 100,
            account: "demo",
            signature: "7aa705cb4a735d2c576850244912af88edf181db47f4a1fd44a944f6387ae943",
            desc: "Описание платежа",
            locale: "ru",
        });
        payment.success(function (params) {
            console.log("Успешный платеж");
        });
        payment.error(function (message, params) {
            console.log(message);
        });
        return false;
    };
</script>

```

**Обязательные параметры:**

<table data-header-hidden><thead><tr><th width="180.44447835286456">name</th><th width="153">type</th><th>description</th></tr></thead><tbody><tr><td><strong>publicKey</strong></td><td>строка</td><td>Публичный ключ проекта (PUBLIC KEY)</td></tr><tr><td><strong>account</strong></td><td>строка</td><td>Идентификатор абонента в вашей системе (например, email абонента или номер заказа)</td></tr><tr><td><strong>sum</strong></td><td>число</td><td>Сумма платежа (например, 10.00);</td></tr><tr><td><strong>desc</strong></td><td>строка</td><td>Описание заказа для покупателя</td></tr><tr><td><strong>signature</strong></td><td>строка</td><td>Цифровая подпись запроса. Они защищает вас от злоумышленников - подмены описания или стоимости заказа, размещения ссылки на оплату на ресурсах мошенников.  <br>Образуется как <code>sha256( account + "{up}" + currency + "{up}" + desc + "{up}" + sum + "{up}" + secretKey)</code>,   где sha256 - метод хеширования;   <br>"{up}" - разделитель параметров в хеш-функции;   <br>secretKey - секретный ключ проекта (доступен в личном кабинете)<br><br><strong>Важно.</strong> Если вы не передаете  currency на форму оплаты, то этот параметр не должен участвовать в формировании подписи.</td></tr></tbody></table>

**Дополнительные параметры:**

<table data-header-hidden><thead><tr><th width="189.33333333333331">name</th><th width="191.22216796875">type</th><th>description</th></tr></thead><tbody><tr><td><strong>currency</strong></td><td>строка</td><td>Валюта суммы оплаты, допустимые значения: "RUB", "UAH", "BYR", "EUR", "USD" (по умолчанию RUB). Если платежная система не поддерживает требуемую валюту, то сумма будет сконвертирована в валюту по умолчанию.</td></tr><tr><td><strong>locale</strong></td><td>ru, en</td><td>Принудительное назначение языка виджета.</td></tr><tr><td><strong>paymentType</strong></td><td>строка</td><td><a href="https://help.unitpay.ru/book-of-reference/payment-system-codes">Код платежной системы</a>, через которую будет идти оплата.</td></tr><tr><td><strong>subscription</strong></td><td>true</td><td>Используйте данный флаг, если требуется создать подписку по карте плательщика. Идентификатор подписки (subscriptionId) будет передан в методе PAY на ваш <a href="https://help.unitpay.ru/payments/payment-handler">обработчик платежа</a>. Использование подписок возможно только после согласования со Службой безопасности Unitpay.</td></tr><tr><td><strong>subscriptionId</strong></td><td>число</td><td>Идентификатор <a href="https://help.unitpay.ru/payments/recurring-payments/create-subscription">подписки</a>, по которой требуется произвести списание средств. Данный параметр должен быть предварительно получен в методе PAY на ваш <a href="https://help.unitpay.ru/payments/payment-handler">обработчик платежа</a></td></tr><tr><td><strong>preauth</strong></td><td>0,1</td><td>Используйте этот флаг для создания платежа с <a href="https://help.unitpay.ru/payments/pre-authorization-payments">преавторизацией</a>, по умолчанию флаг выключен и значение равно 0</td></tr><tr><td><strong>preauthExpireLogic</strong></td><td>число</td><td><p>Поле для логики блокировки платежей с преавторизацией:</p><p>   <br>1 - При отсутствии запроса на подтверждение или отмену, платеж по истечении срока блокировки на стороне банка-эквайера (~114 часов после создания платежа) будет подтвержден;</p><p><br>0 - При отсутствии запроса на подтверждение или отмену, платеж по истечении срока блокировки на стороне банка-эквайера (~114 часов после создания платежа) будет отменен.</p><p><br>Если параметр не будет использован, платеж будет отменен по истечении срока. </p></td></tr><tr><td><strong>hideMenu</strong></td><td>true, false</td><td>Скрывает меню с выбором способов оплаты.</td></tr><tr><td><strong>hideOtherMethods</strong></td><td>true, false</td><td>Скрывает окно выбора других способов оплаты </td></tr></tbody></table>

**Если вы подключили онлайн-кассу в личном кабинете Unitpay, то для формирования чеков необходимо дополнительно передать ряд параметров:**

<table data-header-hidden><thead><tr><th width="163.77779134114581">name</th><th width="147.5555419921875">type</th><th>description</th></tr></thead><tbody><tr><td><strong>cashItems</strong></td><td>строка</td><td><p>Может быть сформирован следующим способом:<br></p><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">const cashItems = [
  { name: 'Булочка', count: 1, 
    price: 10.00, type: 'commodity' 
  },
  { name: 'Кофе', count: 2, 
    price: 5.00, type: 'commodity' 
  },
]

const json = JSON.stringify(cashItems);

const bytes = new TextEncoder().encode(json);

const encodedCashItems = btoa(String.fromCharCode(...bytes));

console.log(encodedCashItems); </code></pre><p><br>Подробнее <a href="https://help.unitpay.ru/online-cash-register/receipt_parameters">тут</a></p></td></tr><tr><td><strong>customerEmail</strong></td><td>строка</td><td>Электронная почта клиента, на которую будет отправлен чек</td></tr><tr><td><strong>customerPhone</strong></td><td>строка</td><td>Телефон плательщика в международном формате без "+" (чек на него не будет отправлен)</td></tr></tbody></table>
