ЮMoney (кошелёк)
Приём денег на личный кошелёк ЮMoney через quickpay-форму — без юрлица и мерчант-договора. Юзер платит банковской картой или со своего кошелька ЮMoney, деньги падают на ваш кошелёк. Валюта — RUB.
Создание платежа не делает ни одного API-вызова: шлюз просто собирает подписанную ссылку на форму yoomoney.ru/quickpay/confirm и редиректит юзера. Подтверждение приходит HTTP-уведомлением с sha1-хэшем.
Что понадобится
Кошелёк ЮMoney. Из его настроек:
- номер кошелька (получатель платежей);
- секрет для HTTP-уведомлений — выдаётся в разделе HTTP-уведомлений настроек кошелька, там же, где указывается URL.
Настройка в кабинете
| Поле | Что это | Обязательное |
|---|---|---|
wallet | Номер кошелька-получателя | Да |
notification_secret | Секрет HTTP-уведомлений из настроек кошелька (шифруется Fernet при сохранении) | Да |
Включение — переключатель активности в карточке «ЮMoney (кошелёк)». Кнопка «Тест» проверяет только заполненность полей: проверочного API у ЮMoney нет, ключи сверятся первым живым платежом.
Вебхук
URL: https://ваш-домен/api/v1/payments/yoomoney — укажите его в настройках кошелька как адрес HTTP-уведомлений.
Уведомление приходит form-encoded. Подлинность проверяется sha1-хэшем по девяти полям уведомления (notification_type, operation_id, amount, currency, datetime, sender, codepro, секрет, label) — сравнение constant-time, при несовпадении 403. Внутренний payment_id едет в поле label.
Защищённые и непринятые переводы (codepro=true / unaccepted=true) не зачисляются — деньги ещё не ваши, транзакция остаётся в ожидании.
Особенности
- Сумма приходит за вычетом комиссии, и вдобавок quickpay-форма позволяет юзеру руками поменять сумму. Поэтому пайплайн сверяет полученное с ценой счёта: всё, что меньше 90% (
UNDERPAYMENT_TOLERANCE = 0.90), считается подменой/недоплатой и помечается FAILED. Комиссия ЮMoney (до ~3%) в допуск укладывается. - Ссылка формируется с
paymentType=AC— оплата банковской картой (SB— списание с баланса ЮMoney). - Возвратов по API и рекуррентов нет: возврат из кабинета фиксируется только записью, деньги возвращаете вручную.
- Поллинга статуса нет — подтверждение приходит только HTTP-уведомлением. Если уведомления не доходят, первым делом проверьте URL и секрет в настройках кошелька.
Платёж не пришёл?
Как устроен пайплайн подтверждения и реконсилятор зависших платежей (запускается каждые 5 минут) — см. /payments/webhooks. Учтите: у ЮMoney нет API-поллинга, так что для этого шлюза критично, чтобы HTTP-уведомления реально доходили.
