> For the complete documentation index, see [llms.txt](https://docs.payanyway.ru/marketplace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payanyway.ru/marketplace/platezhnye-zaprosy/5.-zapominanie-bankovskoi-karty.md).

# 4. Запоминание банковской карты и прием платежей с сохраненной картой.

Для удобства покупателей маркетплейс может использовать токен, который позволит покупателю не указывать номер карты при следующих платежах.

Покупатель на платежной форме будет указывать только CVV-код.&#x20;

Последовательность действий, при приеме платежей с запоминанием карты:

1\. Маркетплейс создает базовую операцию методом InvoiceRequest с помощью интерфейса MONETA.MerchantAPI без дополнительных параметров.

```java
Запрос:
{  
   "Envelope":{  
      "Header":{  
         "Security":{  
            "UsernameToken":{  
               "Username":"Username",
               "Password":"Password"
            }
         }
      },
      "Body":{  
         "InvoiceRequest":{  
            "payer":НОМЕР СЧЕТА ПЛАТЕЛЬЩИКА,
            "payee":НОМЕР СЧЕТА ПОЛУЧАТЕЛЯ,
            "amount":1000,
            "clientTransaction":"TEST",
            "description":"TEST"
         }
      }
   }
}

Ответ: 

{  
   "Envelope":{  
      "Body":{  
         "InvoiceResponse":{  
            "dateTime":" YYYY-MM-DDT08:55:03.000+03:00",
            "clientTransaction":"TEST",
            "transaction":номер базовой операции,
            "status":"CREATED"
         }
      }
   }
}
```

```php
<?php

$sdkAppFileName = __DIR__ . "/../moneta-sdk-lib/autoload.php";
include_once($sdkAppFileName);

try {
    $monetaSdk = new \Moneta\MonetaSdk();
    $monetaSdk->checkMonetaServiceConnection();

    $request = new \Moneta\Types\InvoiceRequest();

    //номер счёта плательщика (счёт для списания средств).
    $request->payer = '';

    //номер счёта получателя (счёт для зачисления средств)
    $request->payee = '';

    //сумма инвойса
    $request->amount = '11.00';

    //описание инвойса
    $request->description = 'Краткое описание';

    //номер инвойса в учётной системе магазина/маркетплейса.
    $request->clientTransaction = 'my-order-id-11';

    //создание нового инвойса
    $result = $monetaSdk->monetaService->Invoice($request);

    if (!$result['transaction']) {
        throw new Exception(print_r($result, true));
    }

    //номер операции: необходим для предоставления формы оплаты покупателю
    echo "Номер операции: " . $result['transaction'];

} catch (Exception $e) {
    echo "Ошибка:<br />";
    echo "<pre>" . $e->getMessage() . "</pre>";
}
```

2\. Маркетплейс переводит покупателя на платежную форму MONETA.Assistant с параметром operationId, равным значению operationId базовой операции и с обязательным параметром MNT\_SUBSCRIBER\_ID: <https://www.moneta.ru/assistant.htm?operationId=номер> базовой операции\&MNT\_SUBSCRIBER\_ID=12345

```markup
https://www.moneta.ru/assistant.widget?operationId=номер базовой операции&MNT_SUBSCRIBER_ID=12345
```

3\. Маркетплейс создает операцию платежа методом InvoiceRequest с помощью интерфейса MONETA.MerchantAPI с параметром PAYMENTTOKEN, равным значению operationId базовой операции с ведущим нулем.

```javascript
{  
   "Envelope":{  
      "Header":{  
         "Security":{  
            "UsernameToken":{  
               "Username":"Username",
               "Password":"Password"
            }
         }
      },
      "Body":{  
         "InvoiceRequest":{  
            "payer":НОМЕР СЧЕТА ПЛАТЕЛЬЩИКА,
            "payee":НОМЕР СЧЕТА ПОЛУЧАТЕЛЯ,
            "amount":10,
            "clientTransaction":"test",
            "description":"test",
            "operationInfo":{  
               "attribute":[  
                  {  
                     "key":"PAYMENTTOKEN",
                     "value":"0НОМЕР БАЗОВОЙ ОПЕРАЦИИ"
                  }
               ]
            }
         }
      }
   }
}

Ответ:

{  
   "Envelope":{  
      "Body":{  
         "InvoiceResponse":{  
            "dateTime":"YYYY-MM-DDT08:55:03.000+03:00",
            "clientTransaction":"test",
            "transaction":98765432,
            "status":"CREATED"
         }
      }
   }
}
```

```php
<?php

$sdkAppFileName = __DIR__ . "/../moneta-sdk-lib/autoload.php";
include_once($sdkAppFileName);

try {
    $monetaSdk = new \Moneta\MonetaSdk();
    $monetaSdk->checkMonetaServiceConnection();

    $request = new \Moneta\Types\InvoiceRequest();

    //номер счёта плательщика (счёт для списания средств) в системе МОНЕТА.РУ.
    $request->payer = '';

    //номер счёта получателя (счёт для зачисления средств) в системе МОНЕТА.РУ.
    $request->payee = '';

    //сумма инвойса
    $request->amount = '12.00';

    //описание инвойса
    $request->description = 'Инвойс только с вводом контрольных цифр';

    //номер инвойса в учётной системе магазина/маркетплейса.
    $request->clientTransaction = 'my-order-id-12';

    $operation = new \Moneta\Types\OperationInfo();

    //параметр должен содержать значение transaction базовой операции с добавлением ноля в начало строки
    $attribute = new \Moneta\Types\KeyValueAttribute();
    $attribute->key = 'PAYMENTTOKEN';
    $attribute->value = '';
    $operation->addAttribute($attribute);

    $request->operationInfo = $operation;

    //создание нового инвойса
    $result = $monetaSdk->monetaService->Invoice($request);

    if (!$result['transaction']) {
        throw new Exception(print_r($result, true));
    }

    //номер операции: необходим для предоставления формы оплаты покупателю
    echo "Номер операции: " . $result['transaction'];

} catch (Exception $e) {
    echo "Ошибка:<br />";
    echo "<pre>" . $e->getMessage() . "</pre>";
}
```

4\. Маркептлейс переводит покупателя на платежную форму MONETA.Assistant с параметром operationId, который был получен на третьем шаге и с обязательным параметром MNT\_SUBSCRIBER\_ID: <https://www.moneta.ru/assistant.widget?operationId=98765432\\&MNT\\_SUBSCRIBER\\_ID=12345>. \
Параметр MNT\_SUBSCRIBER\_ID должен совпадать с аналогичным параметром в базовой операции, иначе оплата будет запрещена.

```markup
https://www.moneta.ru/assistant.widget?operationId=98765432&MNT_SUBSCRIBER_ID=12345. 
```

После перехода на платежную форму покупателю необходимо ввести CVV-код.

{% hint style="info" %}
Запросы маркетплейс отправляет в рамках интерфейса MONETA.MerchantAPI.

Интерфейс [MONETA.MerchantAPI](http://www.moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf) представляет собой Web-сервис, описанный по спецификации Web Services Description Language [(WSDL)](https://service.moneta.ru/services.wsdl), использующий протокол Simple Object Access Protocol (SOAP) для передачи информации.
{% endhint %}
