Получение данных карты¶
Чтобы предоставить клиенту изображение карты с неполными реквизитами или показать полные реквизиты в интерфейсе, необходимо получить данные у BaaS.
Важная информация
При реализации сценариев получения данных необходимо учитывать существующие правила и ограничения.
Получение нечувствительных данных¶
К нечувствительным данным относятся:
cardTokenId— идентификатор карты;cardPaymentSystem— тип платёжной системы;maskedPan— маскированный PAN;expiryDate— дата окончания срока действия карты;embossedName— имя владельца карты.
Для получения данных следует передать BaaS orderId заказа, в рамках которого оформлялась карта.
Успешный сценарий получения нечувствительных данных виртуальной карты изображён на диаграмме ниже.
%%{init: {
    "sequence" : {
        "wrap":true,
        "messageFontSize":13,
        "noteFontSize":12,
        "actorMargin":
        75 }}}%%
sequenceDiagram
    participant С as Клиент
    participant P as Партнёр
    participant B as BaaS
    С->>P: Переход на страницу интерфейса
    Note right of С: Страница с изображением карты
    P->>+B: Запрос на получение информации о заказе
    Note right of P: productId, orderId
    B-->>-P: Ответ на запрос получения информации о заказе
    Note left of B: cardInsensitiveInfo (cardTokenId, cardPaymentSystem, maskedPan, expiryDate)
    P->>С: Отрисовка реквизитов на карте в интерфейсе
    Note left of P: Последние 4 цифры PAN, expiryDate
Запрос описан в документации Cards-lifecycle API.
Получение чувствительных данных¶
PAN и CVV являются чувствительной информацией. Получить их можно двумя способами:
- с помощью API;
 - с помощью формы.
 
Обратите внимание
Получить PAN и CVV можно только для виртуальной карты.
Получение данных c помощью API¶
Для получение PAN и CVV c помощью API партнёру необходимо:
- отвечать стандартам безопасности PCI DSS и иметь соответствующий сертификат;
 - использовать собственную форму для отображения реквизитов;
 - знать 
cardTokenId— возвращается в ответ на запрос создания заказа на выпуск карты или запрос получения информации о заказе; - дешифровать реквизиты — BaaS возвращает их в шифрованном виде.
 
Чтобы дешифровать PAN и CVV, партнёру необходимо:
- создать ключевую пару RSA 4096 бит;
 - сохранить закрытый ключ у себя;
 - закодировать открытый ключ в Base64 и передать его в запросе на получение PAN и CVV в качестве значения параметра 
publicKey. - расшифровать полученные в ответе значения 
encryptedPanиencryptedCvv(которые были зашифрованы BaaS при помощиpublicKey), используя закрытый ключ. 
Переданный publicKey в BaaS не сохраняется.
Успешный сценарий получения PAN и CVV c помощью API изображён на диаграмме ниже.
%%{init: {
    "sequence" : {
        "wrap":true,
        "messageFontSize":14,
        "noteFontSize":12,
        "actorMargin":
        75 }}}%%
sequenceDiagram
    participant P as Партнёр
    participant B as BaaS
    Note left of P: Создана пара ключей RSA
    P->>+B: Запрос на получение PAN и CVV
    Note right of P: productId, cardTokenId, encryptionSpec, publicKey
    B-->>B: Шифрование с помощью publicKey алгоритмом encryptionSpec
    B-->>-P: Ответ на запрос получения PAN и CVV
    Note left of B: encryptedPan, encryptedCvv
    P-->>P: Дешифрование
Дешифрованные данные можно использовать для отображения реквизитов карты по запросу клиента в интерфейсе. Например на форме с элементом «Показать реквизиты».
Запрос описан в документации Cards-lifecycle API.
Получение данных c помощью формы¶
Форма просмотра реквизитов карты позволяет показать клиенту PAN, CVV и дату окончания срока действия в интерфейсе. Является альтернативой использованию Cards-lifecycle API. Преимущество использования формы в том, что партнёру не требуется:
- отвечать стандартам безопасности PCI DSS и иметь соответствующий сертификат;
 - разрабатывать собственную форму для просмотра реквизитов карты;
 - поддерживать информационное взаимодействие, описанное в разделе «Получение данных c помощью API».
 
Примечание
Дата окончания срока действия карты не является чувствительной информацией. Форма возвращает её вместе с PAN и CVV, чтобы обеспечить полноту данных.
Использование формы¶
Партнёру необходимо добавить JavaScript-код на экран или страницу интерфейса, предназначенную для просмотра реквизитов карты.
Пример JavaScript-кода
 <script src="https://openapi-widget.qiwi.com/script.js" type="text/javascript"></script>
  <script>
    const widget = window.qwl.createCardInfoWidget({
      formUrl: 'https://openapi-widget.qiwi.com',
      token: '4ee7***ce61',
      allowCopy: 'clipboard-read; clipboard-write self',
      signature: '6cff***f555',
      style: {
        isModal: false,
        btn: ':hover {
          background: green;
        }',
        input: 'border-radius: 10px;
            :hover {
              color: red;
            }',
        layout: 'background: tomato;',
        rootId: 'form-container',
        titleColor: '#3c3c5b'
      },
    })
    widget.mount()
  </script>
Важная информация
Партнёру необходимо передать BaaS список доменов, на которых будет расположен экран или страница с JavaScript-кодом. В ином случае получить реквизиты карты с помощью формы не удастся.
Описание параметров и переменных
| Наименование | Описание | 
|---|---|
| formUrl | Значение параметра formUrl из ответа на запрос получения токена формы | 
| token | Значение параметра formToken из ответа на запрос получения токена формы | 
| signature | Значение, вычисляемое по алгоритму HmacSHA256 на основе “секрета” и formToken | 
| style | Переменная, отвечающая за кастомизацию формы. Подробнее в разделе «Кастомизация» | 
Получение, вычисление и подстановка значений для formUrl, token, signature в код выполняются при каждой попытке клиента посмотреть реквизиты карты.
Успешный сценарий получения PAN и CVV c помощью формы изображён на диаграмме ниже.
%%{init: {
    "sequence" : {
        "wrap":true,
        "messageFontSize":13,
        "noteFontSize":13,
        "width":93,
        "actorMargin":81}}}%%
sequenceDiagram
    participant С as Клиент
    participant PF as Партнёр (Frontend)
    participant PB as Партнёр (Backend)
    participant B as BaaS
    С->>PF: Переход на страницу интерфейса
    Note right of С: Страница с реквизитами
    PF->>+PB: Запрос на получение токена формы
    Note right of PF: clientData
    PB->>+B: Запрос на получение токена формы
    Note right of PB: productId, cardTokenId
    B-->>-PB: Ответ на запрос получения токена формы
    Note left of B: formToken, formUrl
    PB->>PB: Вычисление signature
    PB-->>-PF: Ответ на запрос получения токена формы
    Note left of PB: formToken, formUrl, signature
    PF->>PF: Встраивание значений в JS-код
    rect rgb(230, 230, 230)
    Note over PF, B: JS-код формы просмотра реквизитов
    С->>PF: Событие/действие
    Note right of С: «Показать реквизиты»
    PF->>+B: Выполнение JS-кода (вызов API)
    B-->>-PF: PAN, CVV, expiryDate
    PF->>С: Отображение реквизитов на форме в интерфейсе
    Note left of PF: PAN, CVV, expiryDate
    end
Запросы описаны в документации Cards-lifecycle API.
Обратите внимание
- Партнёр не получает, не обрабатывает и не хранит реквизиты карты. Это делает форма. Данный этап выделен на схеме цветом.
 - После отображения реквизитов клиент может скрыть их, нажав на соответствующую кнопку (примерный вид формы см. в разделе «Демонстрационная страница»). В целях безопасности партнёру рекомендуется самостоятельно закрывать страницу через 10-15 минут с момента вывода данных, в случае отсутствия активности.
 
Кастомизация формы¶
Кастомизация позволяет настроить внешний вид формы. CSS-свойства для кастомизации указываются в переменной style.
Пример style
      style: {
        isModal: false,
        btn: ': hover {
          background: gray;
        }',
        input: 'border-radius: 10px;
            :hover {
              color: orange;
            }',
        layout: 'background: orange;',
        rootId: 'form-container',
        titleColor: gray
      }
Описание параметров
| Наименование | Описание | 
|---|---|
| isModal | Признак, говорящий о том, является ли форма модальным окном (true/false) | 
| btn | CSS-стиль кнопки просмотра реквизитов. Можно задать стиль кнопки при наведении на неё мышкой с помощью :hover {YOUR_STYLE} | 
| input | CSS-стиль полей с реквизитами карты. Можно задать стиль полей при наведении на них мышкой с помощью :hover {YOUR_STYLE} | 
| layout | CSS-стиль подложки (фона). Можно задать стиль фона при наведении на него мышкой с помощью :hover {YOUR_STYLE} | 
| rootId | Идентификатор контейнера, в который будет встраиваться форма | 
| titleColor | Цвет заголовка и кнопки закрытия формы. Указывается, если выбрано модальное отображение (isModal: true). Может иметь вид red, #3c3c3c и др. согласно стандарту CSS | 
Пример формы

Демонстрационная страница¶
BaaS может открыть партнёру доступ к демо-странице, для этого следует обратиться к курирующему менеджеру. Примерный вид страницы — на изображении ниже.

Демо-страница позволяет:
- посмотреть результат кастомизации формы;
 - протестировать работу формы с конкретными данными;
 - получить JavaScript-код, сформированный после применения всех настроек и данных.
 
Чтобы увидеть результат кастомизации, необходимо:
- настроить стили согласно примеру на изображении выше;
 - применить стили, нажав на соответствующую кнопку.
 
Чтобы протестировать работу формы, необходимо:
- ввести значения 
formUrl,token,signature,style(как получить значения см. в разделе «Использование формы»); - применить настройки, нажав на соответствующую кнопку;
 - нажать «Показать» на форме.
 
В случае успешного выполнения JavaScript форма отобразит реквизиты карты.
Обратите внимание
Для formUrl, token, signature на демо-странице допускается использовать лишь значения, полученные из тестовой среды. Для их получения партнёру следует отправлять запросы на тестовый URL.