«Яндекс.Деньги»

Обзор

Прим.:

Для работы с методом «Яндекс.Деньги» в настоящее время поддерживаются две технических реализации: новая, описанная в данном разделе, и старая, описанная в разделе «Яндекс.Деньги» (legacy).

Подробности о разнице между этими реализациями и о способах перехода со старой реализации на новую стоит уточнять у курирующих менеджеров ECommPay.

«Яндекс.Деньги» — сервис электронных платежей, позволяющий получать оплаты от пользователей, в том числе по сохраненным данным кошельков, проводить возвраты и выплаты пользователям с использованием электронных кошельков Яндекс.Кошелёк. Проведение оплат реализовано через Payment Page и Gate, проведение выплат и возвратов — через Gate.

Характеристика

Тип платёжного метода Платежи через электронный кошелёк
Регионы использования RU
Валюты платежей RUB
Конвертация валют
Оплаты +
Выплаты +
Оплаты по сохранённым данным +
Полные возвраты +
Частичные возвраты +
Опротестования
Особенности
Организация и стоимость подключения По согласованию с курирующим менеджером ECommPay

Схема работы

В проведении отдельного платежа с использованием «Яндекс.Деньги» задействуются веб-сервис мерчанта, один из интерфейсов и платёжная платформа ECommPay, а также технические средства провайдера.



Основные операции

Интерфейсы Суммы, RUB
Payment Page Mobile SDKs CMS Plug-ins Gate Dashboard (Old Dashboard) минимум максимум
Оплаты + + + 1,00
Оплаты по сохранённым данным +
Выплаты + 1,00 *
Полные возвраты +
Частичные возвраты +
*
  • 15 000.00 (для кошельков с анонимным статусом),
  • 60 000,00 (для кошельков с идентифицированным статусом, когда пользователь прошел идентификацию в сервисе «Яндекс.Деньги»),
  • 300 000,00 (на один кошелек в сутки),
  • 600 000,00 (на один кошелек в месяц).

Сценарии использования

Проведение оплат с использованием метода «Яндекс.Деньги» выполняется с перенаправлением пользователей к сервису «Яндекс.Деньги», проведение выплат и возвратов — с уведомлением пользователей через веб-сервис мерчанта.

Рис.: Оплата через Payment Page



Рис.: Оплата через Gate



Рис.: Возврат через Gate



Рис.: Выплата через Gate



Детальные сведения о том, что необходимо делать со стороны мерчанта для проведения платежей, а также о том, что можно использовать для анализа информации о проведённых платежах и операциях, представлены далее.

Оплаты через Payment Page

Общая информация

Для оплаты через Payment Page с использованием метода «Яндекс.Деньги» со стороны веб-сервиса необходимо отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL ECommPay и принять оповещение о результате оплаты. При этом метод «Яндекс.Деньги» можно сделать предварительно выбранным на Payment Page (подробнее — в разделе Предварительный выбор платежного метода). Полная схема проведения оплаты представлена далее.



Рис.: Проведение оплаты через Payment Page

  1. Пользователь на стороне веб-сервиса инициирует оплату.
  2. От веб-сервиса на заданный URL ECommPay передаётся запрос на проведение оплаты через Payment Page.
  3. Запрос на проведение оплаты поступает в платёжную платформу.
  4. Выполняется начальная обработка запроса, в рамках которой обеспечивается проверка наличия обязательных параметров и корректной подписи.
  5. Осуществляется генерация Payment Page согласно настройкам проекта и параметрам вызова.
  6. Пользователю отображается сгенерированная платёжная форма.
  7. Пользователь выбирает для оплаты электронный кошелёк «Яндекс.Деньги».
  8. Запрос на проведение оплаты через «Яндекс.Деньги» поступает в платёжную платформу.
  9. Выполняются дальнейшая обработка запроса и его отправка в сервис «Яндекс.Деньги».
  10. На стороне «Яндекс.Деньги» выполняется обработка запроса на оплату.
  11. От сервиса «Яндекс.Деньги» к платёжной платформе передаются данные для перенаправления пользователя в сервис «Яндекс.Деньги».
  12. Данные для перенаправления пользователя передаются к Payment Page.
  13. Пользователь перенаправляется в сервис «Яндекс.Деньги».
  14. Пользователь выполняет необходимые действия для оплаты, используя свой Яндекс.Кошелёк.
  15. На стороне сервиса «Яндекс.Деньги» выполняется обработка платежа.
  16. Результат оплаты отображается пользователю в сервисе «Яндекс.Деньги».
  17. Пользователь перенаправляется к Payment Page.
  18. От сервиса «Яндекс.Деньги» к платёжной платформе направляется результат оплаты.
  19. От платёжной платформы к веб-сервису направляется оповещение о результате оплаты.
  20. От платёжной платформы к Payment Page направляется результат проведения оплаты.
  21. Результат оплаты отображается пользователю на Payment Page.

Информация о формате запросов и параметрах вызова Payment Page при работе с «Яндекс.Деньги», а также о формате оповещений о результатах оплат приведена далее; общая информация о работе с API см. в разделе Описание Payment Page API.

Формат запросов

При формировании запросов на открытие платёжной формы с применением метода «Яндекс.Деньги» необходимо учитывать следующее:

  1. Должен использоваться базовый минимум параметров — параметры, обязательные для любого платёжного метода:
    • project_id — идентификатор проекта, полученный от ECommPay при интеграции;
    • payment_id — идентификатор платежа, уникальный в рамках проекта;
    • payment_currency — валюта платежа в формате ISO-4217 alpha-3;
    • payment_amount — сумма платежа в минорных единицах;
    • customer_id — идентификатор пользователя уникальный в рамках проекта.
  2. Валютой платежа может быть только RUB.
  3. Дополнительно может использоваться параметр customer_id — идентификатор пользователя в рамках проекта.
  4. Для предварительного выбора метода «Яндекс.Деньги» необходимо указывать код платёжного метода в параметре force_payment_methodyandexMoney.
  5. Дополнительно могут использоваться любые другие параметры из числа доступных для работы с Payment Page. Детальная информация обо всех параметрах приведена в разделе Параметры открытия платежной формы Payment Page.
  6. После определения всех параметров необходимо составить подпись. Подробную информацию см. в Работа с подписью к данным.

Таким образом, корректный запрос на открытие платёжной формы с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта, пользователя и платежа, а также валюту и сумму платежа и подпись:

EPayWidget.run(
    { payment_id: 'X03936', 
      payment_amount: 10000, 
      payment_currency: 'RUB', 
      project_id: 0, 
      customer_id: 'customer1',
      signature: "kUi2x9dKHAVNU0FYldJrxh4yo+52Kt8KU+Y1Y4HASCQ9vySO\/RLCvhtT4DqtVUkDJrOcZzUCwX6R\/ekpZhkIQg=="
    }
)

Формат оповещений

Для оповещений о результатах оплат с применением метода «Яндекс.Деньги» используется стандартный формат, описание которого представлено в разделе Оповещения.

В следующем примере оповещение свидетельствует о том, что в рамках проекта 35 от пользователя fav_customer была успешно проведена оплата в размере 100,00 RUB со счёта № 410017362577523.

Рис.: Пример оповещения о проведенной оплате

{
        "project_id": 35,
        "payment": {
            "OperationFee": {
                "amount": 0,
                "currency": "RUB"
            },
            "date": "2019-03-21T08:29:25+0000",
            "id": "ORDER_ID_000000001",
            "method": "WalletYandexMoney",
            "status": "success",
            "sum": {
                "amount": 10000,
                "currency": "RUB"
            },
            "type": "purchase",
            "description": "purchase"
        },
        "operation": {
            "id": 34335004,
            "type": "sale",
            "status": "success",
            "date": "2019-03-21T08:29:25+0000",
            "created_date": "2019-03-21T08:23:21+0000",
            "request_id": 33c3e988c6",
            "sum_initial": {
                "amount": 10000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 10000,
                "currency": "RUB"
            },
        "account": {
            "number": "410017362577523"
        },
        "customer": {
            "id": "fav_customer"
        },
            "provider": {
                "id": 1181,
                "payment_id": "24255dbb",
                "date": "2019-03-21T08:28:28+0000",
                "auth_code": "",
                "endpoint_id": "yandex_money"
            },
            "code": "0",
            "message": "Success"
        },
        "signature": "bBi4Esp9MYahN7Co7mktmmqsNnDh8Ku33HYYHIljvWTIcOfL4sfPwHFrDlkMDs+Aw=="
    }

В следующем примере оплата была отклонена из-за недостатка средств на счёте пользователя.

Рис.: Пример оповещения об отказе в проведении оплаты

 {
        "project_id": 35,
        "account": {
            "number": "410017362577523"
        },
        "payment": {
            "OperationFee": {
                "amount": 0,
                "currency": "RUB"
            },
            "date": "2019-03-20T15:33:02+0000",
            "id": "YANDEX_TEST_005",
            "method": "WalletYandexMoney",
            "status": "decline",
            "sum": {
                "amount": 10000,
                "currency": "RUB"
            },
            "type": "purchase",
            "description": ""
        },
        "operation": {
            "id": 30997000000639,
            "type": "sale",
            "status": "decline",
            "date": "2019-03-20T15:33:02+0000",
            "created_date": "2019-03-20T14:50:44+0000",
            "request_id": "16fc9bfd8c0cf7",
            "sum_initial": {
                "amount": 10000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 10000,
                "currency": "RUB"
            },
            "provider": {
                "id": 1181,
                "payment_id": "24246705-000f3",
                "date": "2019-03-20T14:50:45+0000",
                "auth_code": "",
                "endpoint_id": "yandex_money"
            },
            "code": "20105",
            "message": "Insufficient funds on customer account"
         },
        "signature": "6qJMdnMSokT+vz89C4iZFrQxpsyg3NdFCJ3Xv6cWL08oORUlAl05jj3AX4/1Q=="
    }

Дополнительные материалы

Для организации работы с оплатами через Payment Page также могут быть полезны следующие материалы:

Оплаты через Gate

Общая информация

Для оплаты через Gate с использованием метода «Яндекс.Деньги» со стороны веб-сервиса необходимо:

  1. Отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL ECommPay.
  2. Осуществить перенаправление пользователя на сайт сервиса «Яндекс.Деньги».
  3. Принять оповещение о результате оплаты.

Полная схема проведения оплаты представлена далее.



Рис.: Проведение оплаты через Gate

  1. Пользователь на стороне веб-сервиса инициирует оплату через «Яндекс.Деньги».
  2. От веб-сервиса на заданный URL ECommPay передаётся запрос на проведение оплаты через Gate.
  3. Запрос на проведение оплаты поступает в платёжную платформу ECommPay.
  4. Выполняется начальная обработка запроса, в рамках которой обеспечивается проверка наличия обязательных параметров и корректной подписи.
  5. От платёжной платформы к веб-сервису направляется ответ с информацией о получении запроса и его корректности. Подробнее см. в разделе Формат ответа.
  6. В платёжной платформе выполняются дальнейшая обработка запроса и его отправка в сервис «Яндекс.Деньги».
  7. На стороне «Яндекс.Деньги» выполняется обработка запроса на оплату.
  8. От сервиса «Яндекс.Деньги» к платёжной платформе передаются данные для перенаправления пользователя на сайт «Яндекс.Деньги».
  9. От платёжной платформы к веб-сервису направляется оповещение с данными для перенаправления пользователя в «Яндекс.Деньги» в объекте redirect_data.
  10. Пользователь перенаправляется в сервис «Яндекс.Деньги».
  11. Пользователь выполняет необходимые действия для оплаты, используя свой Яндекс.Кошелёк.
  12. На стороне сервиса «Яндекс.Деньги» выполняется обработка платежа.
  13. Пользователю отображается результат оплаты.
  14. Пользователь перенаправляется к веб-сервису.
  15. От сервиса «Яндекс.Деньги» к платёжной платформе направляется уведомление о результате оплаты.
  16. От платёжной платформы к веб-сервису направляется оповещение о результате оплаты.
  17. От веб-сервиса пользователю направляется результат оплаты.

Информация о формате запросов и параметрах инициализации оплат методом «Яндекс.Деньги» через Gate, а также о формате оповещений о результатах оплат приведена далее, общая информация о работе с API см. в разделе Работа с API.

Формат запросов

При работе с запросами на оплаты с применением метода «Яндекс.Деньги» необходимо учитывать следующее:

  1. Должен использоваться запрос, отправляемый методом POST на точку входа /v2/payment/wallet/yandexmoney/sale. Эта точка входа относится к группе запросов на проведение платежей с помощью электронного кошелька: /v2/payment/wallet/{payment_method}/sale.
  2. В запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные сведения:
      • project_id — идентификатор проекта,
      • payment_id — идентификатор платежа,
      • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Использование подписи к данным);
    • customer — объект, содержащий сведения о пользователе:
      • id — идентификатор, уникальный в рамках проекта,
      • ip_address — используемый IP-адрес;
    • payment — объект, содержащий сведения о платеже:
      • amount — сумма платежа в минорных единицах валюты,
      • currency — валюта платежа в формате ISO-4217 alpha-3.
  3. Валютой платежа может быть только RUB.
  4. Дополнительно могут использоваться все параметры, указанные в спецификации.

Таким образом, корректный запрос на оплату с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта и платежа, подпись, данные пользователя, валюту и сумму платежа:

Рис.: Пример запроса на оплату

{
    "general": {
        "project_id": 35,
        "payment_id": "Payment 12",
        "signature": "2tlMuYxLW9Yu6RETr8pdCfmi0UPE8euD+o4EVPjLyfbOQ+9ajAteg5lPk96Q=="
  },
    "customer": {
        "ip_address": "1.1.1.1",
        "id": "customer123"
  },
    "payment": {
        "amount": 10000,
        "currency": "RUB"
  }
}

Форматы данных для перенаправления пользователей

Для перенаправления пользователя от веб-сервиса на сайт сервиса «Яндекс.Деньги» необходимо принять оповещение от платёжной платформы, содержащее ссылку для перенаправления в параметре redirect_data.url и данные для отправки в теле запроса redirect_data.body, и использовать эти параметры при открытии HTML-страницы сайта методом, указанным в redirect_data.method.

Далее приведён фрагмент оповещения, содержащего данные для перенаправления.


"redirect_data": {
            "method": "GET",
            "body": {
                "redirectType": "redirect"
            },
            "encrypted": [],
            "url": "https://money.yandex.ru/payments/internal/confirmation?orderId=24255dbb-31"
        }

Формат оповещений

Для оповещений о результатах оплат с применением метода «Яндекс.Деньги» используется стандартный формат, описание которого представлено в разделе Оповещения.

В следующем примере оповещение свидетельствует о том, что в рамках проекта 35 от пользователя fav_customer была успешно проведена оплата в размере 100,00 RUB со счёта № 410017362577523.

Рис.: Пример оповещения о проведенной оплате

{
        "project_id": 35,
        "payment": {
            "OperationFee": {
                "amount": 0,
                "currency": "RUB"
            },
            "date": "2019-03-21T08:29:25+0000",
            "id": "ORDER_ID_000000001",
            "method": "WalletYandexMoney",
            "status": "success",
            "sum": {
                "amount": 10000,
                "currency": "RUB"
            },
            "type": "purchase",
            "description": "purchase"
        },
        "operation": {
            "id": 34335004,
            "type": "sale",
            "status": "success",
            "date": "2019-03-21T08:29:25+0000",
            "created_date": "2019-03-21T08:23:21+0000",
            "request_id": 33c3e988c6",
            "sum_initial": {
                "amount": 10000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 10000,
                "currency": "RUB"
            },
        "account": {
            "number": "410017362577523"
        },
        "customer": {
            "id": "fav_customer"
        },
            "provider": {
                "id": 1181,
                "payment_id": "24255dbb",
                "date": "2019-03-21T08:28:28+0000",
                "auth_code": "",
                "endpoint_id": "yandex_money"
            },
            "code": "0",
            "message": "Success"
        },
        "signature": "bBi4Esp9MYahN7Co7mktmmqsNnDh8Ku33HYYHIljvWTIcOfL4sfPwHFrDlkMDs+Aw=="
    }

В следующем примере оплата была отклонена из-за недостатка средств на счёте пользователя.

Рис.: Пример оповещения об отказе в проведении оплаты

 {
        "project_id": 35,
        "account": {
            "number": "410017362577523"
        },
        "payment": {
            "OperationFee": {
                "amount": 0,
                "currency": "RUB"
            },
            "date": "2019-03-20T15:33:02+0000",
            "id": "YANDEX_TEST_005",
            "method": "WalletYandexMoney",
            "status": "decline",
            "sum": {
                "amount": 10000,
                "currency": "RUB"
            },
            "type": "purchase",
            "description": ""
        },
        "operation": {
            "id": 30997000000639,
            "type": "sale",
            "status": "decline",
            "date": "2019-03-20T15:33:02+0000",
            "created_date": "2019-03-20T14:50:44+0000",
            "request_id": "16fc9bfd8c0cf7",
            "sum_initial": {
                "amount": 10000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 10000,
                "currency": "RUB"
            },
            "provider": {
                "id": 1181,
                "payment_id": "24246705-000f3",
                "date": "2019-03-20T14:50:45+0000",
                "auth_code": "",
                "endpoint_id": "yandex_money"
            },
            "code": "20105",
            "message": "Insufficient funds on customer account"
        },
        "signature": "6qJMdnMSokT+vz89C4iZFrQxpsyg3NdFCJ3Xv6cWL08oORUlAl05jj3AX4/1Q=="
    }

Дополнительные материалы

Для организации работы с оплатами через Gate также могут быть полезны следующие материалы:

Повторяемые оплаты через Gate

Общая информация

Платёжный метод «Яндекс.Деньги» предоставляет возможность проводить повторяемые оплаты двух типов: экспресс-оплаты и регулярные оплаты. Подробнее о повторяемых оплатах см. в Повторяемые оплаты.

Регистрация повторяемой оплаты

Для регистрации повторяемых оплат со стороны веб-сервиса необходимо отправить запрос на оплату, содержащий требуемые параметры и подпись, а также признак регистрации повторяемой оплаты recurring.register: true, на рабочий URL ECommPay и принять оповещение о результате оплаты. Для регистрации регулярной оплаты в запросе необходимо передать информацию о периодичности, сумме, начале и конце совершения регулярной оплаты.

В оповещении о регистрации повторяемой оплаты вы получите её идентификатор, который можно использовать для проведения экспресс-оплат, продления, изменения условий или отмены регулярной оплаты.

Подробнее о проведении оплаты через Gate с помощью метода «Яндекс.Деньги» см. в разделе Оплаты через Gate.

Проведение повторяемой оплаты

После того, как оплата зарегистрирована, пользователь может проводить экспресс-оплаты, или средства начнут списываться автоматически по заданным условиям регулярной оплаты.

Изменение условий проведения регулярной оплаты

В любой момент можно изменить условия проведения оплаты, например, изменить время выполнения, дату окончания или сумму списаний. При изменении условий фактического списания средств со счета пользователя не происходит.

Отмена проведения регулярной оплаты

До момента истечения срока выполнения регулярной оплаты её можно отменить.

Информация о формате запросов и параметрах, а также о формате оповещений о результатах приведена далее, общая информация о работе с API см. в разделе Работа с API.

Формат запросов

При работе с запросами на проведение повторяемой оплаты с применением метода «Яндекс.Деньги» необходимо учитывать следующее:

  1. Должны использоваться запросы, отправляемые методом POST на следующие URL:

    В адресе в поле {paymentMethod} должен использоваться код платёжного метода — yandexmoney.

  2. В запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные сведения:
      • project_id — идентификатор проекта,
      • payment_id — идентификатор платежа,
      • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Использование подписи к данным);
    • customer — объект, содержащий сведения о пользователе:
      • id — идентификатор, уникальный в рамках проекта,
      • ip_address — используемый IP-адрес;
      • account_save—необязательный параметр, указывающий, должны ли быть сохранены данные кошелька пользователя для проведения экспресс-оплат;
    • payment — объект, содержащий сведения о платеже:
      • amount — сумма,
      • currency — валюта платежа в формате ISO-4217 alpha-3;
    • recurring — объект, содержащий сведения о повторяемой оплате:
      • register — признак регистрации регулярной платы,
      • id — идентификатор зарегистрированной регулярной оплаты,
      • saved_account_id — идентификатор сохраненного в платёжной платформе кошелька пользователя для проведения экспресс-оплаты, подробная информация представлена в разделе Сохранение платежных данных
      • start_date — дата начала регулярной оплаты, в формате ДД-ММ-ГГГГ (должна быть как минимум на один день позже, чем дата регистрации),
      • expiry_year — год окончания проведения регулярной оплаты,
      • expiry_month — месяц окончания проведения регулярной оплаты,
      • expiry_day — день окончания проведения регулярной оплаты,
      • amount — сумма платежа,
      • period — период выполнения регулярной оплаты,
      • interval — интервал выполнения регулярной оплаты,
      • time — время выполнения регулярной оплаты в формате hh:mm:ss (UTC0).

      Обязательность параметров в объекте recurring зависит от типа запроса. Дополнительные сведения см. в спецификации API.

  3. Дополнительно могут использоваться все параметры, указанные в спецификации.

Корректный запрос на регистрацию повторяемой оплаты с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта и платежа, подпись, данные пользователя, валюту и сумму платежа, а также признак регистрации и условия проведения списаний при регулярной оплате.

Рис.: Пример запроса на регистрацию экспресс-оплаты

 {
  "general": {
    "project_id": 238,
    "payment_id": "TEST_15427007172789",
    "signature": "DH0v2pZnkK9hwytQ6/ZtDSQh+wwx/OqrWdbltzO5GMSkzd0Iq6lM2v8rmWQV4sbP+4A==",
  },
  "customer": {
    "ip_address": "87.245.207.226",
    "id": "customer123",
    "account_save": "true"
  },
  "payment": {
    "amount": 1000,
    "currency": "RUB"
  },
  "recurring": {
    "register": true
  }
}

Рис.: Пример запроса на регистрацию регулярной оплаты

 {
  "general": {
    "project_id": 238,
    "payment_id": "TEST_15427007172789",
    "signature": "DH0v2pZnkK9hwytQ6/ZtDSQh+wwx/OqrWdbltzO5GMSkzd0Iq6lM2v8rmWQV4sbP+4A==",
  },
  "customer": {
    "ip_address": "87.245.207.226"
  },
  "payment": {
    "amount": 1000,
    "currency": "RUB"
  },
  "recurring": {
    "register": true,
    "amount": 1000,
    "interval": 1,
    "cycle": "week",
    "start_date": "21-11-2018",
    "expiry_year": 2025,
    "expiry_month": 11,
    "expiry_day": 25
  }
}

Корректный запрос на проведение экспресс-оплаты с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта и платежа, подпись, IP-адрес пользователя, валюту и сумму платежа, а также идентификатор сохраненного кошелька при проведении экспресс-оплаты.

Рис.: Пример запроса на проведение экспресс-оплаты

 {
  "general": {
    "project_id": 238,
    "payment_id": "TEST_15427007172789",
    "signature": "DH0v2pZnkK9hwytQ6/ZtDSQh+wwx/OqrWdbltzO5GMSkzd0Iq6lM2v8rmWQV4sbP+4A==",
  },
  "customer": {
    "ip_address": "87.245.207.226",
    "id": "customer123"
  },
  "payment": {
    "amount": 1000,
    "currency": "RUB"
  },
  "saved_account_id": "9657893243"
}

Корректный запрос на изменение условий или продление регулярной оплаты с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта и платежа, подпись, IP-адрес пользователя, валюту и сумму платежа, идентификатор зарегистрированной повторяемой оплаты, а также новые условия её проведения.

Рис.: Пример запроса на изменение условий регулярной оплаты

 {
  "general": {
    "project_id": 238,
    "payment_id": "TEST_15427007172789",
    "signature": "DH0v2pZnkK9hwytQ6/ZtDSQh+wwx/OqrWdbltzO5GMSkzd0Iq6lM2v8rmWQV4sbP+4A==",
  },
  "customer": {
    "ip_address": "87.245.207.226"
  },
  "payment": {
    "amount": 1000,
    "currency": "RUB"
  },
  "recurring": {
    "id": 1234567890,
    "expiry_year": 2030,
    "expiry_month": 11,
    "expiry_day": 25
  }
}

Корректный запрос на отмену проведения регулярной оплаты с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта и платежа, подпись, IP-адрес пользователя, валюту и сумму платежа, а также идентификатор зарегистрированной повторяемой оплаты.

Рис.: Пример запроса на отмену регулярной оплаты

 {
  "general": {
    "project_id": 238,
    "payment_id": "TEST_15427007172789",
    "signature": "DH0v2pZnkK9hwytQ6/ZtDSQh+wwx/OqrWdbltzO5GMSkzd0Iq6lM2v8rmWQV4sbP+4A==",
  },
  "customer": {
    "ip_address": "87.245.207.226"
  },
  "payment": {
    "amount": 1000,
    "currency": "RUB"
  },
  "recurring": {
    "id": 1234567890
  }
}

Формат оповещений

Для оповещений о результатах действий с повторяемыми оплатами с применением метода «Яндекс.Деньги» используется стандартный формат, описание которого представлено в разделе Оповещения.

В следующем примере оповещение свидетельствует о том, что в рамках проекта 238 для пользователя была успешно зарегистрирована повторяемая оплата.

Рис.: Пример оповещения о регистрации повторяемой оплаты

 {
        "project_id": 238,
        "payment": {
            "id": "cof_payment",
            "type": "purchase",
            "status": "success",
            "date": "2018-11-20T08:44:46+0000",
            "method": "yandexMoney",
            "sum": {
                "amount": 300,
                "currency": "RUB"
            },
            "description": "payment"
        },
        "account": {
            "number": "customer@mail.com"
        },
        "recurring": {
            "id": 1000030038,
            "currency": "RUB",
            "valid_thru": "-0001-11-30T00:00:00+0000"
        },
        "operation": {
            "id": 1000034,
            "type": "recurring",
            "status": "success",
            "date": "2018-11-20T08:44:46+0000",
            "created_date": "2018-11-20T08:44:41+0000",
            "request_id": "07fd7ade7cf010",
            "sum_initial": {
                "amount": 300,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 300,
                "currency": "RUB"
            },
            "provider": {
                "id": 1063,
                "payment_id": "2548950091",
                "date": "2018-11-20T08:44:45+0000",
                "auth_code": ""
            },
            "code": "0",
            "message": "Success"
        },
        "signature": "x2tsnvLCRXZMX8Kwyr9a8+I3RipuPWUod5c89cDSQ6cRq/yx56uZb7MTMdDEEg4w=="
    }

В следующем примере оповещение свидетельствует о том, что условия проведения регулярной оплаты успешно обновлены.

Рис.: Пример оповещения об изменении условий проведения регулярной оплаты

{
        "project_id": 238,
        "payment": {
            "id": "SALE_ID",
            "type": "purchase",
            "status": "success",
            "date": "2018-11-22T07:05:56+0000",
            "method": "yandexMoney",
            "sum": {
                "amount": 100,
                "currency": "RUB"
            },
            "description": "cof payment"
        },
        "recurring": {
            "id": 1000034,
            "currency": "RUB",
            "valid_thru": "2018-11-29T00:00:00+0000"
        },
        "operation": {
            "id": 1972,
            "type": "recurring_update",
            "status": "success",
            "date": "2018-11-22T07:09:18+0000",
            "created_date": "2018-11-22T07:09:16+0000",
            "request_id": "ab70b4f9643bb0b",
            "sum_initial": {
                "amount": 0,
                "currency": ""
            },
            "sum_converted": {
                "amount": 0,
                "currency": ""
            },
            "provider": {
                "id": 1063,
                "payment_id": "",
                "auth_code": ""
            },
            "code": "0",
            "message": "Success"
        },
        "signature": "dVpS1keJ0Bf0ofZSLhwJm3rr0Oh534I+8lPJ42BRcAak+1nLPlD9rkjcKYUEtgpsMA=="
    }

В следующем примере оповещение свидетельствует о том, что проведение регулярной оплаты успешно отменено.

Рис.: Пример оповещения об отмене проведения регулярной оплаты

  {
        "project_id": 238,
        "payment": {
            "id": "SALE_ID",
            "type": "purchase",
            "status": "success",
            "date": "2018-11-22T07:05:56+0000",
            "method": "yandexMoney",
            "sum": {
                "amount": 100,
                "currency": "RUB"
            },
            "description": "cof payment"
        },
        "recurring": {
            "id": 1000034,
            "currency": "RUB",
            "valid_thru": "2018-11-29T00:00:00+0000"
        },
        "operation": {
            "id": 1973,
            "type": "recurring_cancel",
            "status": "success",
            "date": "2018-11-22T07:14:51+0000",
            "created_date": "2018-11-22T07:14:50+0000",
            "request_id": "8d5ea1f970faaa76c4d10",
            "sum_initial": {
                "amount": 0,
                "currency": ""
            },
            "sum_converted": {
                "amount": 0,
                "currency": ""
            },
            "provider": {
                "id": 1063,
                "payment_id": "",
                "auth_code": ""
            },
            "code": "0",
            "message": "Success"
        },
        "signature": "QHS5h1BVZqHS39wlzC0pfgSZZAhZVA6ZLDnyP1JAWHM0irFE/Lt3dMTizyQsossGDUVMAQ=="
    }

В следующем примере оповещение свидетельствует о том, что регистрация повторяемой оплаты была отклонена.

Рис.: Пример оповещения о неуспешной регистрации повторяемой оплаты

{
        "project_id": 238,
        "payment": {
            "id": "123456",
            "type": "purchase",
            "status": "decline",
            "date": "2018-11-15T07:17:08+0000",
            "method": "yandexMoney",
            "sum": {
                "amount": 200,
                "currency": "RUB"
            },
            "description": "cof payment"
        },
        "errors": [
            {
                "code": "2701",
                "message": "Rules Failed Code",
                "description": "fatal: RULES_FAILED_CODE"
            }
        ],
        "recurring": {
            "id": 100070,
            "currency": "RUB",
            "valid_thru": "-0001-11-30T00:00:00+0000"
        },
        "operation": {
            "id": 10001868,
            "type": "recurring",
            "status": "decline",
            "date": "2018-11-15T07:17:08+0000",
            "created_date": "2018-11-15T07:17:08+0000",
            "request_id": "e5ee540d420d6ccd",
            "sum_initial": {
                "amount": 200,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 200,
                "currency": "RUB"
            },
            "provider": {
                "id": 1063,
                "payment_id": ""
            },
            "code": "2701",
            "message": "Rules Failed Code"
        },
        "signature": "SgrlW4XHS8dJdGW3lDLacXdwe4L5Mvg3SjFEoViCg9k04OqTBaNimdWxwwXYGjCsFI5ig=="
    }

Дополнительные материалы

Для организации работы с оплатами через Gate также могут быть полезны следующие материалы:

Возвраты через Gate

Общая информация

«Яндекс.Деньги» поддерживает проведение полных и частичных возвратов. Для проведения возврата через Gate с использованием метода «Яндекс.Деньги» со стороны веб-сервиса необходимо отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL ECommPay и принять оповещение о результате. Полная схема проведения возврата представлена далее.

Прим.: Если запрос на возврат отправлен по окончании суток, в которые была совершена оплата (после 23:59:59, GMT+3), то платежная система удерживает комиссию за проведение операции.


Рис.: Проведение возврата через Gate

  1. Пользователь запрашивает возврат средств в веб-сервисе.
  2. От веб-сервиса мерчанта на заданный URL ECommPay передаётся запрос на проведение возврата через Gate.
  3. Gate перенаправляет запрос в платёжную платформу ECommPay для дальнейшей обработки.
  4. На стороне платёжной платформы ECommPay выполняются необходимые проверка и первичная обработка запроса.
  5. От платёжной платформы в веб-сервис передается ответ с результатом первичной обработки запроса. Подробнее см. в разделе Формат ответа.
  6. Обработанный запрос передается в сервис «Яндекс.Деньги».
  7. На стороне «Яндекс.Деньги» выполняется обработка платежа.
  8. От «Яндекс.Деньги» к платёжной платформе ECommPay направляется оповещение о результате.
  9. От платёжной платформы ECommPay к веб-сервису направляется оповещение о результате.
  10. Пользователь получает от веб-сервиса информацию о поступлении запрошенных средств.

Информация о формате запросов и параметрах инициализации возвратов методом «Яндекс.Деньги» через Gate, а также о формате оповещений о результатах выплат приведена далее, общая информация о работе с API см. в разделе Работа с API.

Формат запросов

При работе с запросами на возврат с применением метода «Яндекс.Деньги» необходимо учитывать следующее:

  1. Должен использоваться запрос, отправляемый методом POST на точку входа /v2/payment/wallet/yandexmoney/refund. Эта точка входа относится к группе запросов на проведение платежей с помощью электронного кошелька: /v2/payment/wallet/{payment_method}/refund.
  2. В запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные идентификационные сведения о запросе:
      • project_id — идентификатор проекта;
      • payment_id — идентификатор платежа;
      • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Использование подписи к данным);
    • customer — объект, содержащий сведения о пользователе:
      • ip_address — используемый IP-адрес;
    • payment — объект, содержащий сведения о возврате :
      • description — комментарий или описание возврата,
      • amount — сумма возврата в минорных единицах валюты (обязательный при частичном возврате),
      • currency — валюта возврата в формате ISO-4217 alpha-3 (обязательный при частичном возврате).
  3. Дополнительно могут использоваться все параметры, указанные в спецификации.

Таким образом, корректный запрос на возврат с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта и платежа, подпись и IP-адрес пользователя:

Рис.: Пример запроса на возврат

{
   "general": {    
    "project_id": 239,    
    "payment_id": "refund_02",   
    "signature": "of8k9xerKSK4XL1QFaDH3p9Mh0CIcjmOwSwKJ7KLTZYO56lCv+f1M0Sf/7eg=="
  },  
   "customer": {    
     "ip_address": "1.2.3.4" 
  },  
   "payment": {    
     "amount": 10000,    
     "currency": "RUB",
     "description": "refund_02"
 }
}

Формат оповещений

Для оповещений о результатах возврата с применением метода «Яндекс.Деньги» используется стандартный формат, описание которого представлено в разделе Оповещения.

В следующем примере оповещение свидетельствует о том, что в рамках проекта 386 для пользователя был успешно проведён частичный возврат в размере 100,00 RUB на счёт account1.

Рис.: Пример оповещения о проведенном возврате

{
        "project_id": 386,
        "payment": {
            "id": "EP1bb6-c379",
            "type": "purchase",
            "status": "partially refunded",
            "date": "2019-03-04T11:16:29+0000",
            "method": "WalletYandexMoney",
            "sum": {
                "amount": 50000,
                "currency": "RUB"
            },
            "description": ""
        },
        "account": {
            "number": "account1"
        },
        "operation": {
            "id": 633,
            "type": "refund",
            "status": "success",
            "date": "2019-03-04T11:16:29+0000",
            "created_date": "2019-03-04T11:16:25+0000",
            "request_id": "88c5433b45f91",
            "sum_initial": {
                "amount": 10000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 10000,
                "currency": "RUB"
            },
            "provider": {
                "id": 1181,
                "payment_id": "94b4a6a434857ee45ab107",
                "date": "2019-03-04T11:16:28+0000",
                "auth_code": ""
            },
            "code": "0",
            "message": "Success"
        },
        "signature": "NPKaC8A2wQehyGWVYTVTQ14HE4JBB+H2FVHbS1YTT9VOHG1VFJ5zqg=="
    }

В следующем примере возврат был отклонён, так как значение суммы в запросе на возврат больше суммы в инитной оплате.

Рис.: Пример оповещения об отказе в проведении возврата

{
        "project_id": 386,
        "payment": {
            "id": "EP1bb6-c379",
            "type": "purchase",
            "status": "success",
            "date": "2019-03-04T11:16:29+0000",
            "method": "WalletYandexMoney",
            "sum": {
                "amount": 50000,
                "currency": "RUB"
            },
            "description": ""
        },
        "account": {
            "number": "account1"
        },
        "operation": {
            "id": 633,
            "type": "refund",
            "status": "decline",
            "date": "2019-03-04T11:16:29+0000",
            "created_date": "2019-03-04T11:16:25+0000",
            "request_id": "88c5433b45f91",
            "sum_initial": {
                "amount": 100000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 100000,
                "currency": "RUB"
            },
            "provider": {
                "id": 1181,
                "payment_id": "94b4a6a434857ee45ab107",
                "date": "2019-03-04T11:16:28+0000",
                "auth_code": ""
            },
            "code": "3283",
            "message": "Refund amount more than init amount"
        },
        "signature": "NPKaC8A2wQehyGWVYTVTQ14HE4JBB+H2FVHbS1YTT9VOHG1VFJ5zqg=="
    }

Дополнительные материалы

Для организации работы с возвратами через Gate также могут быть полезны следующие материалы:

Выплаты через Gate

Общая информация

Для выплаты через Gate с использованием метода «Яндекс.Деньги» со стороны веб-сервиса необходимо отправить запрос, содержащий требуемые параметры и подпись, на рабочий URL ECommPay и принять оповещение о результате выплаты. Полная схема проведения выплаты представлена далее.



Рис.: Проведение выплаты через Gate

  1. Пользователь на стороне веб-сервиса инициирует выплату через «Яндекс.Деньги».
  2. От веб-сервиса на заданный URL ECommPay передаётся запрос на проведение выплаты через Gate.
  3. Запрос на проведение выплаты поступает в платёжную платформу.
  4. Выполняется начальная обработка запроса, в рамках которой обеспечивается проверка наличия обязательных параметров и корректной подписи.
  5. От платёжной платформы к веб-сервису направляется ответ с информацией о получении запроса и его корректности. Подробнее см. в разделе Формат ответа.
  6. В платёжной платформе выполняются дальнейшая обработка запроса и его отправка в сервис «Яндекс.Деньги».
  7. На стороне «Яндекс.Деньги» выполняется обработка платежа.
  8. От «Яндекс.Деньги» к платёжной платформе направляется оповещение о результате.
  9. От платёжной платформы к веб-сервису направляется оповещение о результате.
  10. От веб-сервиса пользователю направляется результат выплаты.

Информация о формате запросов и параметрах инициализации выплат методом «Яндекс.Деньги» через Gate, а также о формате оповещений о результатах выплат приведена далее, общая информация о работе с API см. в разделе Работа с API.

Формат запросов

При работе с запросами на выплаты с применением метода «Яндекс.Деньги» необходимо учитывать следующее:

  1. Должен использоваться запрос, отправляемый методом POST на точку входа /v2/payment/yandexmoney/payout.
  2. В запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные сведения:
      • project_id — идентификатор проекта,
      • payment_id — идентификатор платежа,
      • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Использование подписи к данным);
    • customer — объект, содержащий сведения о пользователе:
      • id — идентификатор,
      • ip_address — используемый IP-адрес;
    • account — объект, содержащий сведения о счёте пользователя:
      • number — номер счёта;
    • payment — объект, содержащий сведения о платеже:
      • amount — сумма,
      • currency — валюта платежа в формате ISO-4217 alpha-3.
  3. Валютой платежа может быть только RUB.
  4. Дополнительно могут использоваться все параметры, указанные в спецификации.

Таким образом, корректный запрос на выплату с применением метода «Яндекс.Деньги» должен содержать идентификаторы проекта и платежа, подпись, номер счёта (для зачисления средств) и IP-адрес пользователя, валюту и сумму платежа:

Рис.: Пример запроса на выплату

{
    "general": {
        "project_id": 35,
        "payment_id": "Payment 12",
        "signature": "2tlMuYxLW9Yu6RETr8pdCfmi0UPE8euD+2AbrQgJguu0BQjXWH6naCA9Ts6o4EVPjLyfbOQ+9ajAteg5lPk96Q=="
  },
    "customer": {
        "id": "fav_customer",
        "ip_address": "1.1.1.1" 
  },
    "payment": {
        "amount": 10000,
        "currency": "RUB"
  },
    "account": {
        "number": "45456965"
  }
}

Формат оповещений

Для оповещений о результатах выплат с применением метода «Яндекс.Деньги» используется стандартный формат, описание которого представлено в разделе Оповещения.

В следующем примере оповещение свидетельствует о том, что в рамках проекта 199 для пользователя fav_customer была успешно проведена выплата в размере 100,00 RUB.

Рис.: Пример оповещения о проведенной выплате

 {
        "project_id": 199,
        "payment": {
            "id": "yandexpayout",
            "type": "payout",
            "status": "success",
            "date": "2018-08-20T13:50:16+0000",
            "method": "YandexMoney",
            "sum": {
                "amount": 1000,
                "currency": "RUB"
            },
            "description": "10000"
        },
        "customer": {
            "id": "fav_customer"
        },
        "operation": {
            "id": 188500000010,
            "type": "payout",
            "status": "success",
            "date": "2018-08-20T13:50:16+0000",
            "created_date": "2018-08-20T13:50:14+0000",
            "request_id": "81b1ce17e524",
            "sum_initial": {
                "amount": 10000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 10000,
                "currency": "RUB"
            },
            "provider": {
                "id": 1063,
                "payment_id": "",
                "date": "2018-08-20T13:50:15+0000",
                "auth_code": ""
            },
            "code": "0",
            "message": "Success"
        },
        "signature": "wM8KqQhG5CgFfqDGvIl8hm71ZbhBB6yUg0xEGHnqtEUmDYahTMOW4RZCXk+KA=="
    }

В следующем примере выплата была отклонена по причине превышения максимального лимита по выплате.

Рис.: Пример оповещения об отказе в проведении выплаты

{
        "project_id": 460,
        "payment": {
            "id": "test_YM",
            "type": "payout",
            "status": "decline",
            "date": "2019-03-01T18:21:10+0000",
            "method": "YandexMoney",
            "sum": {
                "amount": 10000,
                "currency": "RUB"
            },
            "description": "Payout"
        },
        "account": {
            "number": "13043"
        },
        "customer": {
            "id": "Customer"
        },
        "operation": {
            "id": 29911000000101,
            "type": "payout",
            "status": "decline",
            "date": "2019-03-01T18:21:10+0000",
            "created_date": "2019-03-01T18:21:09+0000",
            "request_id": "4c0181064f2b078",
            "sum_initial": {
                "amount": 10000,
                "currency": "RUB"
            },
            "sum_converted": {
                "amount": 10000,
                "currency": "RUB"
            },
            "provider": {
                "id": 1063,
                "payment_id": "",
                "auth_code": ""
            },
            "code": "3104",
            "message": "Payment Constraint Invalid Payout Amount"
        },
        "signature": "0AfxEKIBSnElP6Rq8WWiZg2h/UZ4OD2WmfP+Q2f9g8D0PUKXA0hm+ufw=="
    }

Дополнительные материалы

Для организации работы с выплатами через Gate также могут быть полезны следующие материалы:

Тестирование

Общая информация

Для метода «Яндекс.Деньги» доступно тестирование оплат через Payment Page и Gate, а также возвратов через Gate.

Тестирование может выполняться в рамках тестового проекта, и для подключения и отключения этой функциональности необходимо обращаться к специалистам технической поддержки ECommPay support@ecommpay.com.

При проведении тестовых платежей следует учитывать, что в запросах должен указываться идентификатор тестового проекта, а интерфейсы эмулятора платёжных форм Payment Page и «Яндекс.Деньги» могут отличаться от рабочих.



Статусы тестовых платежей

При тестировании оплат их итоговые статусы определяются исходя из сумм, указанных в запросах:

  • decline — при указании суммы 40000 или 40400,
  • success — при указании любой другой суммы;

При тестировании возвратов их итоговые статусы определяются исходя из сумм, указанных в запросах:

  • decline — при указании суммы 50000 или 50500,
  • success — при указании любой другой суммы.

Оплаты через Payment Page

Для проведения тестовой оплаты через Payment Page необходимо:

  1. Отправить в платёжную платформу корректный тестовый запрос на открытие Payment Page.
  2. Если в запросе не был указан метод yandexMoney — выбрать его на странице эмулятора.
  3. Щёлкнуть кнопку Success или Decline (в зависимости от запрашиваемой суммы).
  4. Принять оповещение с информацией о результате оплаты.

Если при переходе на страницу эмулятора платёжной формы «Яндекс.Деньги» кнопка Success или Decline не щёлкнута в течение 30 минут, то со стороны платёжной платформы отправляется оповещение о переводе платежа в статус decline (независимо от суммы, указанной в запросе).

Подробная информация о проведении оплат с использованием метода «Яндекс.Деньги» через Payment Page представлена в пункте Оплаты через Payment Page.

Оплаты через Gate

Для проведения тестовой оплаты через Gate необходимо:

  1. Отправить в платёжную платформу корректный тестовый запрос на оплату.
  2. Принять оповещение с данными для перенаправления.
  3. Перейти по полученному URL и щёлкнуть кнопку Success или Decline (в зависимости от запрашиваемой суммы) — на странице эмулятора.
  4. Принять оповещение с информацией о результате оплаты.

Если при переходе на страницу эмулятора платёжной формы «Яндекс.Деньги» кнопка Success или Decline не щёлкнута в течение 30 минут, то со стороны платёжной платформы отправляется оповещение о переводе платежа в статус decline (независимо от суммы, указанной в запросе).

Подробная информация о проведении оплат с использованием метода «Яндекс.Деньги» через Gate представлена в пункте Оплаты через Gate.

Возвраты через Gate

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

Следует учитывать, что выполнение тестового возврата на полную или частичную сумму возможно только в течение суток после проведения оплаты. Подробная информация о проведении возвратов с использованием метода «Яндекс.Деньги» через Gate представлена в пункте Возвраты через Gate.

Анализ результатов проведения платежей

Как и при работе с другими платёжными методами, которые предоставляет ECommPay, при использовании метода «Яндекс.Деньги» доступны разные способы анализа информации о платежах и операциях с применением этого метода — как в отдельности, так и в совокупности с другими методами.

Всю необходимую информацию можно получать и анализировать средствами Dashboard (Old Dashboard), в том числе с помощью аналитических панелей на вкладке Analytics.

Также можно выгружать нужную информацию для последующего анализа с помощью специализированных аналитических средств сторонних разработчиков:

  • Dashboard (Old Dashboard) позволяет выгружать данные в форматах CSV и XLS с помощью инструментов на вкладке Платежи. При этом можно выполнять разовые выгрузки информации на локальный компьютер и задействовать периодическую выгрузку и отправку информации на заданные адреса электронной почты.
  • Data API позволяет получать информацию в формате JSON и отправлять ее на заданный URL — для этого применяются запросы /operations/get.

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