# 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 %}


---

# 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://docs.payanyway.ru/marketplace/platezhnye-zaprosy/5.-zapominanie-bankovskoi-karty.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.
