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

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

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

Код примера и описание используемых параметров виджета расположены в личном кабинете 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>0 - При отсутствии запроса на подтверждение или отмену, платеж по истечении срока блокировки на стороне банка-эквайера (~114 часов после создания платежа) будет подтвержден;</p><p><br>1 - При отсутствии запроса на подтверждение или отмену, платеж по истечении срока блокировки на стороне банка-эквайера (~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>


---

# 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://help.unitpay.ru/payments/create-payment-widget.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.
