- Пошаговая настройка Яндекс.Деньги с HTTP уведомлениями
- Яндекс Деньги: Пошаговая настройка системы оплаты на сайте с автоматическими HTTP-уведомлениями
- Шаг 1. Настройка формы HTML
- Шаг 2. Настройка HTTP-уведомлений
- Шаг 3. Прием HTTP-уведомлений. PHP скрипт.
- Уведомление о входящем переводе
- Формат запроса
- Уведомления
- HTTP-уведомления
- Формат запроса
- Прием уведомления
- Параметры уведомления
- Формат ответа
- Удостоверение подлинности и целостности уведомления
- Примеры уведомлений
Пошаговая настройка Яндекс.Деньги с HTTP уведомлениями
Наверное у каждого разработчика найдется заказчик, который просил. или просит установить систему оплаты на сайт, чтобы принимать платежи в автоматическом режиме.
Сегодня мы рассмотрим настройку http уведомлений для сервиса Яндекс.Деньги. С помощью этого, мы без лишних заморочек и документов (ака Робокасса) можем настроить автоматический прием платежей на нашем сайте.
Для начала рассмотрим HTML форму. Она простая, все тэги я прокомментирую.
Следующий шаг — Настройка HTTP-Уведомлений.
Сейчас сделаем настройку для нашего кошелька в системе Яндекс.Деньги. Для этого переходим по ссылке: https://sp-money.yandex.ru/myservices/online.xml.
Тут мы получаем секретный код, который понадобиться для формирования ключа проверки в нашем скрипте, который будет принимать уведомления. Ну и естественно ссылка на сам скрипт, на который Яндекс.Деньги будут отсылать уведомления, после успешной оплаты.
Есть небольшая хитрость. Если сайт не поддерживает протокол https://, то личные данные пользователя (email, адрес, фио) которые отсылаются из формы яндекса будут пустыми.
А теперь рассмотрим сам PHP-скрипт.
Полный список передаваемых параметров можно прочитать в документации Яндекс.
Яндекс Деньги: Пошаговая настройка системы оплаты на сайте с автоматическими HTTP-уведомлениями
Несмотря на то, что у Яндекса довольно обширный раздел справки и то, что в инете сейчас полно инфы практически обо всем, с настройкой оплаты через Яндекс Деньги и получением при этом HTTP-уведомлений могут возникнуть проблемы .
Для того, чтобы понять, что такое HTTP-уведомления (уверен, не все знают), я приведу два примера покупки плагина на сайте.
- Без уведомлений. Кто-то покупает плагин у вас на сайте. Вам приходит email об оплате. После того, как вы получаете этот email, вы отсылаете плагин человеку, купившему его.
Думаю, что минус данного подхода очевиден — вас может не быть дома или у вас в данный момент может не работать интернет. В итоге покупатель превращается в недовольного покупателя, так как ему приходиться ждать плагин какое-то время (может быть ему потом этот плагин и вовсе не нужен будет уже).
В течение этого поста я буду периодически ссылаться на документацию Яндекса, так как не вижу смысла описывать у себя в статье каждый параметр.
Шаг 1. Настройка формы HTML
Для удобства я оставил комментарии непосредственно в коде формы.
Шаг 2. Настройка HTTP-уведомлений
Сейчас нужно будет сделать небольшую настройку на сайте Яндекс Денег. Для этого переходим по адресу https://sp-money.yandex.ru/myservices/online.xml.
Перед тем, как у вас отобразится следующая страница, Яндекс попросит вас ввести платёжный пароль.
Я думаю тут особо нечего комментировать, потому что и так всё понятно — указываем URL скрипта, который будет обрабатывать уведомления (мы его создадим в следующем шаге), жмём кнопку «Показать секрет» и копируем его, так как он тоже понадобится нам в следующем шаге. В заверешении отмечаем галочку «Показать уведомления» и жмём кнопку «Сохранить».
Также в данном случае прошу вас обратить внимание на защищенный протокол https:// адреса получения обновлений. Если ваш сайт поддерживает https:// , то вы сможете получать личную информацию пользователей в уведомлении (email, адрес, фио), если же использовать незащищенный http:// , то эти параметры будут пустыми.
Хотя как вариант (плохой вариант), можно попытаться затолкать всё необходимое в label .
Шаг 3. Прием HTTP-уведомлений. PHP скрипт.
В соответствии с предыдущим шагом я создаю файл receive.php в корне сайта. Содержимое файла будет зависеть от того, какие действия вы будете предпринимать после получения уведомления.
Сейчас мы рассмотрим только то, как получить параметры платежа и сделать проверку того, что все полученные данные верны.
Полный список параметров уведомлений вы найдёте здесь, в документации Яндекса.
В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.
Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.
Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.
Уведомление о входящем переводе
Уведомление отправляется, если:
Формат запроса
Уведомление отправляется как HTTP-запрос на адрес, указанный в настройках счета, в следующем формате:
Яндекс.Деньги делают три попытки доставить уведомление: сразу при получении перевода, затем — через 10 минут, последняя — через час.
Для приема уведомлений рекомендуется использовать протокол HTTPS. Обратите внимание, что получение контактной информации об отправителе в уведомлениях возможно только при использовании этого протокола. При использовании протокола HTTP контактные данные в уведомлении передаваться не будут.
Если уведомления не приходят, проверьте настройки: правильно ли указан адрес вашего сервера и доступен ли сервер сейчас (используйте кнопку «Протестировать»). При этом запись о входящем переводе сохранится в истории кошелька (при отправке тестовых уведомлений запись в истории не сохраняется).
Для приема уведомлений рекомендуется использовать протокол HTTPS. Обратите внимание, что получение контактной информации об отправителе в уведомлениях возможно только при использовании этого протокола. При использовании протокола HTTP контактные данные в уведомлении передаваться не будут.
Для переводов из кошелька — p2p-incoming
Для переводов с произвольной карты — card-incoming .
Код валюты счета пользователя. Всегда 643 (рубль РФ согласно ISO 4217).
Для переводов из кошелька — номер счета отправителя.
Для переводов с произвольной карты — параметр содержит пустую строку.
Для переводов из кошелька — перевод защищен кодом протекции.
Для переводов с произвольной карты — всегда false.
Уведомления
Самый простой способ получать информацию о переводах — подключить уведомления по электронной почте в настройках кошелька на Яндексе. Сообщения будут приходить на адрес, привязанный к кошельку.
Если вы хотите мгновенно узнавать о поступлении денег и сразу идентифицировать каждый перевод, включите HTTP-уведомления. Сервис будет передавать данные о сумме, значении поля label, а также контактные данные отправителя (контактные данные отправителя передаются только по HTTPS-соединению.)
HTTP-уведомления можно получать только на один адрес сервера. Если у вас несколько сайтов и разные формы, с помощью которых вы собираете переводы на один кошелек в Яндекс.Деньгах, на сервере нужно настроить разбор поля label. Например: label=XXyyyyyy, где ХХ — ID магазина, а уууууу — номер транзакции.
HTTP-уведомления
Уведомление отправляется при получении перевода из кошелька или с банковской карты.
Уведомление не отправляется при пополнении с баланса мобильного.
Формат запроса
Уведомление отправляется как HTTP-запрос на адрес, указанный в настройках кошелька, в следующем формате:
каждый параметр уведомления указывается в виде пары «ключ=значение» в виде параметра POST-запроса;
Прием уведомления
Яндекс.Деньги делают три попытки доставить уведомление: сразу при получении перевода, затем — через 10 минут, последняя — через час.
Для приема уведомлений рекомендуется использовать протокол HTTPS (получение контактной информации об отправителе в уведомлениях возможно только по этому протоколу; по HTTP контакты не передаются).
Если уведомления не приходят, проверьте настройки: правильно ли указан адрес вашего сервера и доступен ли сервер сейчас (используйте кнопку Протестировать). При этом запись о входящем переводе сохранится в истории кошелька (при отправке тестовых уведомлений запись в истории не сохраняется).
Параметры уведомления
Параметр | Тип | Описание |
---|---|---|
Передаются по HTTP | ||
notification_type | string | Для переводов из кошелька — p2p-incoming. Для переводов с произвольной карты — card-incoming. |
operation_id | string | Идентификатор операции в истории счета получателя. |
amount | amount | Сумма, которая зачислена на счет получателя. |
withdraw_amount | amount | Сумма, которая списана со счета отправителя. |
currency | string | Код валюты — всегда 643 (рубль РФ согласно ISO 4217). |
datetime | datetime | Дата и время совершения перевода. |
sender | string | Для переводов из кошелька — номер счета отправителя. Для переводов с произвольной карты — параметр содержит пустую строку. |
codepro | boolean | Для переводов из кошелька — перевод защищен кодом протекции. Для переводов с произвольной карты — всегда false. |
label | string | Метка платежа. Если ее нет, параметр содержит пустую строку. |
sha1_hash | string | SHA-1 hash параметров уведомления. |
unaccepted | boolean | Перевод еще не зачислен. Получателю нужно освободить место в кошельке или использовать код протекции (если codepro=true). |
Передаются только по HTTPS | ||
lastname | string | Имя. |
firstname | string | Фамилия. |
fathersname | string | Отчество. |
string | Адрес электронной почты отправителя перевода. Если email не запрашивался, параметр содержит пустую строку. | |
phone | string | Телефон отправителя перевода. Если телефон не запрашивался, параметр содержит пустую строку. |
city | string | Город. |
street | string | Улица. |
building | string | Дом. |
suite | string | Корпус. |
flat | string | Квартира. |
zip | string | Индекс. |
Параметр | Тип | Описание |
---|---|---|
Передаются по HTTP | ||
notification_type | string | Для переводов из кошелька — p2p-incoming. Для переводов с произвольной карты — card-incoming. |
operation_id | string | Идентификатор операции в истории счета получателя. |
amount | amount | Сумма, которая зачислена на счет получателя. |
withdraw_amount | amount | Сумма, которая списана со счета отправителя. |
currency | string | Код валюты — всегда 643 (рубль РФ согласно ISO 4217). |
datetime | datetime | Дата и время совершения перевода. |
sender | string | Для переводов из кошелька — номер счета отправителя. Для переводов с произвольной карты — параметр содержит пустую строку. |
codepro | boolean | Для переводов из кошелька — перевод защищен кодом протекции. Для переводов с произвольной карты — всегда false. |
label | string | Метка платежа. Если ее нет, параметр содержит пустую строку. |
sha1_hash | string | SHA-1 hash параметров уведомления. |
unaccepted | boolean | Перевод еще не зачислен. Получателю нужно освободить место в кошельке или использовать код протекции (если codepro=true). |
Передаются только по HTTPS | ||
lastname | string | Имя. |
firstname | string | Фамилия. |
fathersname | string | Отчество. |
string | Адрес электронной почты отправителя перевода. Если email не запрашивался, параметр содержит пустую строку. | |
phone | string | Телефон отправителя перевода. Если телефон не запрашивался, параметр содержит пустую строку. |
city | string | Город. |
street | string | Улица. |
building | string | Дом. |
suite | string | Корпус. |
flat | string | Квартира. |
zip | string | Индекс. |
Формат ответа
Уведомление считается принятым, если получатель ответил на запрос кодом HTTP 200 OK.
Удостоверение подлинности и целостности уведомления
Один из параметров уведомления, sha1_hash, содержит значение хэш-функции SHA-1 от свертки параметров уведомления совместно с секретным словом.
Секретное слово для проверки уведомлений используется как разделяемый секрет между Яндекс.Деньгами и разработчиком приложения. Благодаря этому подделать уведомление невозможно. Секретное слово можно получить в настройках HTTP-уведомлений для вашего кошелька.
Всегда проверяйте значение параметра sha1_hash. Это нужно, чтобы удостовериться:
в целостности данных уведомления;
в том, что уведомление отправлено Яндекс.Деньгами.
Чтобы проверить целостность и подлинность уведомления, рассчитайте хэш по алгоритму, приведенному ниже. Сравните полученные данные со значением параметра sha1_hash в уведомлении.
Шаг 1. Сформируйте строку из параметров уведомления в кодировке UTF-8 (где notification_secret — это секретное слово для проверки уведомлений).
Пример строки параметров с меткой платежа:
Шаг 2. Вычислите значение хэш-функции SHA-1 от полученной строки.
Шаг 3. Отформатируйте полученный результат в HEX-кодированном виде.
Пример рассчитанного значения параметра sha1_hash:
Примеры уведомлений
Уведомление о переводе с карты с запросом ФИО и адреса отправителя (по HTTPS):
Adblockdetector