# Открытие в элементе iframe HTML-страницы {#ru_PP_method_Embedded .concept}
статья о порядке открытия платёжной формы Payment Page в элементе iframe HTML-страницы с использованием JavaScript-библиотеки Ecommpay и собственных решений
**На уровень выше:**[Способы открытия платёжной формы](ru_PP_Integration.md)
## Общая информация {#ru_pp_opening_iframe_overview}
При открытии в элементе iframe платёжная форма Payment Page отображается как встроенная в HTML-страницу веб-сервиса.Такой вариант может не фокусировать пользователя на оплате, но при этом сохраняет контекст, не прерывает взаимодействие с веб-сервисом и не ведёт к переходу на другую страницу.

**Прим.:** Размеры элемента iframe для корректного отображения платёжной формы должны составлять не менее 320 пикселей по ширине и 600 пикселей по высоте— при меньших размерах форма не отображается полностью. Версия формы для настольных устройств применяется при ширине от 480 пикселей и адаптируется к ширине элемента iframe. Ограничений по максимальным размерам не предусматривается.
Чтобы открывать платёжную форму в элементе iframe, на стороне веб-сервиса следует:
1. Подключить в клиентской части CSS-библиотеку от Ecommpay, обеспечивающую корректное отображение платёжной формы. Эта библиотека расположена по адресу `https://paymentpage.ecommpay.com/shared/merchant.css`.
2. Настроить политику обеспечения безопасности контента с помощью директив Content Security Policy, указав в HTTP-заголовке `Content-Security-Policy` адреса источников, необходимых для корректной работы платёжной формы \([подробнее](ru_pp_interaction_organisation.md#section_m5x_m2v_njc)\).
``` {#codeblock_ejr_n4k_mjc}
Content-Security-Policy:
script-src https://paymentpage.ecommpay.com https://applepay.cdn-apple.com;
style-src https://paymentpage.ecommpay.com;
img-src https://applepay.cdn-apple.com;
frame-src https://paymentpage.ecommpay.com https://applepay.cdn-apple.com
```
3. Определить события, при наступлении которых должна открываться платёжная форма\(например, переход по кнопке оплаты\).
4. Обеспечить вызов платёжной формы по требуемым событиям, с использованием собственных решений или JavaScript-библиотеки от Ecommpay, расположенной по адресу `https://paymentpage.ecommpay.com/shared/merchant.js`.
**Внимание:** Следует учитывать, что для корректной работы платёжной формы CSS- и JavaScript-библиотеки от Ecommpay должны подключаться через сеть доставки содержимого \(Content Delivery Network, CDN\); локальное хранение этих библиотек не допускается.
Для работы с платёжным методом Apple Pay при таком варианте открытия Payment Page необходимо также предварительно зарегистрировать рабочие домены веб-сервиса в сервисе Apple Pay \([подробнее](ru_dbl_projects.md)\).
## Вызов с использованием собственных решений {#ru_pp_opening_iframe_via_in_house_solutions}
Для открытия Payment Page в элементе iframe с использованием собственных решений необходимо подготовить соответствующий скрипт, обеспечивающий вызовы формы с указанием требуемых параметров и подписи к ним. Информация о применяемых параметрах и их подписывании представлена в отдельных статьях: [Спецификация Payment Page API](ru_PP_Parameters.md) и [Работа с подписью к данным](ru_platform_signature.md).
## Вызов с использованием JavaScript-библиотеки Ecommpay {#ru_pp_opening_iframe_via_javascript_library}
Для открытия Payment Page в элементе iframe с использованием JavaScript-библиотеки `merchant.js` от Ecommpay необходимо подключить эту библиотеку в клиентской части веб-сервиса и использовать соответствующие обращения к объекту `EPayWidget`.
При этих обращениях должен указываться идентификатор используемого элемента iframe — в параметре `target_element` объекта `configObj`. Если этот параметр не указывается, платёжная форма открывается иным способом: в модальном окне или в виде отдельной HTML-страницы \(если это задано через параметр `redirect` или `redirect_on_mobile`\).
**Прим.:** При одновременном использовании в параметрах вызова платёжной формы указателей на открытие в отдельной вкладке и в элементе iframe более приоритетным считается открытие в отдельной вкладке.
В остальном работа с объектом `EPayWidget` в таких случаях соответствует общим условиям, актуальным и для других способов открытия:
1. Каждое обращение может осуществляться одним из двух методов:
- `bind` \(`EPayWidget.bind`\) — если платёжную форму необходимо открывать по щелчку кнопки \(с указанием её идентификатора, ``\);
- `run` \(`EPayWidget.run`\) — если платёжную форму необходимо открывать по какому-либо другому событию в пользовательском интерфейсе.
2. В каждом обращении должен указываться JavaScript-объект `configObj` с параметрами вызова платёжной формы и с подписью к ним.
Информация о применяемых параметрах и их подписывании представлена в отдельных статьях: [Спецификация Payment Page API](ru_PP_Parameters.md) и [Работа с подписью к данным](ru_platform_signature.md).
3. При необходимости в любом обращении может также указываться HTTP-метод отправки запроса \(`method`\)— POST или GET. Если он не указывается, по умолчанию применяется метод GET.
4. Дополнительно в любом обращении могут указываться функции-обработчики для сбора информации о действиях пользователя.
Информация о таких функциях представлена в статье [Контроль интерфейсных событий](ru_pp_ui_monitoring.md).
```language-javascript
EPayWidget.bind('', configObj, method);
EPayWidget.run(configObj, method);
```
```language-javascript
EPayWidget.bind('pay_button_id', // Идентификатор кнопки
{ target_element: 'widget-container', // Идентификатор элемента
project_id: 42, // Идентификатор проекта
customer_id: '17008', // Идентификатор пользователя
payment_id: '18641868', // Идентификатор платежа
payment_amount: 8855, // Сумма платежа
payment_currency: 'USD', // Код валюты платежа
signature: 'YWb6Z20ByxpQ30hfTI' }, // Подпись
'post')
```
```language-javascript
EPayWidget.run(
{ target_element: 'widget-container', // Идентификатор элемента
project_id: 42, // Идентификатор проекта
customer_id: '17008', // Идентификатор пользователя
payment_id: '18641868', // Идентификатор платежа
payment_amount: 8855, // Сумма платежа
payment_currency: 'USD', // Код валюты платежа
signature: 'YWb6Z20ByxpQ30hfTI' }, // Подпись
'post')
```
HTML-код страницы веб-сервиса при этом может выглядеть следующим образом.
```language-xml
...
```
## Управление размерами страниц сторонних сервисов {#ru_pp_opening_iframe_customisation}
Чтобы задавать размеры страниц, используемые при переходах пользователя от Payment Page к сторонним сервисам, при вызове платёжной формы в составе параметра `payment_methods_options` необходимо передавать требуемые значения высоты и ширины таких страниц, определяемые как `redirect_window_height` и `redirect_window_width`. Эти параметры можно указывать двумя способами:
- непосредственно в составе параметра `payment_methods_options`, как актуальные для всех сторонних сервисов, если не задано иное;
- в качестве параметров для отдельных платёжных методов, указываемых через их коды \(согласно [справочнику](ru_pm_codes.md)\) в соответствии с приведённой в примере структурой.
Следует учитывать, что указываемые размеры не применяются в случаях, когда страницы сторонних сервисов открываются в отдельной вкладке.
```language-json
payment_methods_options:"{
"redirect_window_height":1200,
"redirect_window_width":1200,
"card":\{"redirect\_window\_height":600, "redirect\_window\_width":900\},
"neteller-wallet":\{"redirect\_window\_height":900, "redirect\_window\_width":1200\}
\}"
```
В приведённом примере указаны размеры, которые должны использоваться по умолчанию для всех сторонних сервисов, и размеры для отдельных платёжных методов. Эти размеры применяются следующим образом:
- для всех методов, кроме `card`и `neteller-wallet`, задаются высота 1200 пикселей и ширина 1200 пикселей;
- для метода `card` — задаются высота 600 пикселей и ширина 900 пикселей;
- для метода `neteller-wallet` — задаются высота 900 пикселей и ширина 1200 пикселей.