Статья о платежной системе Яндекс Деньги. Рассмотрим только html форму и обработку запроса от сервера. Это можно использовать, например, для пополнения счета или оплату товара на сайте.
HTML форма располагается у вас на сайте и служит переходом с вашего сайта на сайт платежной системы. Передает ей все необходимые данные через POST запрос.
Код формы:
label - ID платежа в вашей системе. Будет использован для поиска нужного платежа в вашей БД
receiver - Ваш кошелек, на него будет происходить оплата (14 цифр)
sum - Сумма оплаты в рублях
quickpay-form - Тип транзакции (shop - универсальная форма; donate - «благотворительная» форма; small - кнопка)
paymentType - Определяет средство платежа (PC – оплата со счета Яндекс Денег; AC – оплата с банковской карты)
formcomment - Название платежа (до 50 символов)
short-dest - Название платежа на странице подтверждения
targets - Назначение платежа (до 150 символов)
Настроить нужные поля аккаунта можно по адресу: https://sp-money.yandex.ru/myservices/online.xml (официальный сайт Яндекс Денег)
Поле ввода - ссылка на файл обработки операции (далее URL). Описание содержания этого файла смотрите в пункте "Обработка запроса" этой статьи
Кнопка "Изменить секрет" - введите сюда какой-нибудь пароль и сохраните его в БД вашего сайта, он еще пригодится
Галочка "Отправлять уведомления" - нужно отметить, включит отправку запроса на URL, указанный выше.
После оплаты платежная система присылает запрос на указанный вами URL. В этом файле, в первую очередь, необходимо проверить подлинность запроса, ведь он мог быть запущен не платежной системой. После чего уже делаем нужны операции: изменение статуса платежа в вашей БД или пополнение счета пользователя на сайте. Начнем по порядку.
Система присылает следующие данные (сразу сократим названия переменных, зачем нам в коде длинные переменные?):
label - ID платежа, который вы указали в форме
operation_id - Идентификатор операции в истории счета получателя
sender - Для переводов из кошелька — номер счета отправителя. Для переводов с произвольной карты — параметр содержит пустую строку
datetime - Дата и время совершения перевода
codepro - Для переводов из кошелька — перевод защищен кодом протекции. Для переводов с произвольной карты — всегда false.
amount - Сумма, которая зачислена на ваш счет
withdraw_amount - Сумма, которая списана со счета отправителя (совпадает с суммой, указанной в форме)
currency - Код валюты — всегда 643 (Рубль РФ)
notification_type - Для переводов из кошелька — p2p-incoming; Для переводов с произвольной карты — card-incoming
sha1_hash - SHA-1 hash параметров уведомления.
Теперь нужно проверить хеш. Это обязательное действие. Без него безопасность данной операции будет близка к нулю.
Создадим свой вариант хеша:
Заметили переменную $key, которая ранее нигде не фигурировала? Это секретный ключ, который вы вводили в настройках аккаунта. Система не присылает его, поэтому он должен храниться у вас в БД
С проверками закончили. Теперь можно сделать то, ради чего этот запрос пришел - изменить статус транзакции или пополнить счет пользователя, на ваше усмотрение. И эти действия я описывать не буду - все в ваших руках.
Осталось только вернуть системе правильный ответ. Тут все просто. Если обработка успешно завершена - отвечаем OK, а если нет - CANCEL
Пример правильного ответа:
Вот и все, запрос завершен и эта статья тоже.
HTML форма
HTML форма располагается у вас на сайте и служит переходом с вашего сайта на сайт платежной системы. Передает ей все необходимые данные через POST запрос.
Код формы:
label - ID платежа в вашей системе. Будет использован для поиска нужного платежа в вашей БД
receiver - Ваш кошелек, на него будет происходить оплата (14 цифр)
sum - Сумма оплаты в рублях
quickpay-form - Тип транзакции (shop - универсальная форма; donate - «благотворительная» форма; small - кнопка)
paymentType - Определяет средство платежа (PC – оплата со счета Яндекс Денег; AC – оплата с банковской карты)
formcomment - Название платежа (до 50 символов)
short-dest - Название платежа на странице подтверждения
targets - Назначение платежа (до 150 символов)
Настройка аккаунта
Настроить нужные поля аккаунта можно по адресу: https://sp-money.yandex.ru/myservices/online.xml (официальный сайт Яндекс Денег)
Поле ввода - ссылка на файл обработки операции (далее URL). Описание содержания этого файла смотрите в пункте "Обработка запроса" этой статьи
Кнопка "Изменить секрет" - введите сюда какой-нибудь пароль и сохраните его в БД вашего сайта, он еще пригодится
Галочка "Отправлять уведомления" - нужно отметить, включит отправку запроса на URL, указанный выше.
Обработка запроса
После оплаты платежная система присылает запрос на указанный вами URL. В этом файле, в первую очередь, необходимо проверить подлинность запроса, ведь он мог быть запущен не платежной системой. После чего уже делаем нужны операции: изменение статуса платежа в вашей БД или пополнение счета пользователя на сайте. Начнем по порядку.
Система присылает следующие данные (сразу сократим названия переменных, зачем нам в коде длинные переменные?):
$id =trim($_POST['label']); $order =trim($_POST['operation_id']); $payer =trim($_POST['sender']); $odate =trim($_POST['datetime']); $code =trim($_POST['codepro']); $amount =trim($_POST['amount']); $wamount =trim($_POST['withdraw_amount']); $cur =trim($_POST['currency']); $type =trim($_POST['notification_type']); $hash =trim($_POST['sha1_hash']);
label - ID платежа, который вы указали в форме
operation_id - Идентификатор операции в истории счета получателя
sender - Для переводов из кошелька — номер счета отправителя. Для переводов с произвольной карты — параметр содержит пустую строку
datetime - Дата и время совершения перевода
codepro - Для переводов из кошелька — перевод защищен кодом протекции. Для переводов с произвольной карты — всегда false.
amount - Сумма, которая зачислена на ваш счет
withdraw_amount - Сумма, которая списана со счета отправителя (совпадает с суммой, указанной в форме)
currency - Код валюты — всегда 643 (Рубль РФ)
notification_type - Для переводов из кошелька — p2p-incoming; Для переводов с произвольной карты — card-incoming
sha1_hash - SHA-1 hash параметров уведомления.
Теперь нужно проверить хеш. Это обязательное действие. Без него безопасность данной операции будет близка к нулю.
Создадим свой вариант хеша:
$hash_gen = hash("sha1", $type.'&'.$order.'&'.$amount.'&'.$cur.'&'.$odate.'&'.$payer.'&'.$code.'&'.$key.'&'.$id); if($hash_gen!=$hash) // ошибка
Заметили переменную $key, которая ранее нигде не фигурировала? Это секретный ключ, который вы вводили в настройках аккаунта. Система не присылает его, поэтому он должен храниться у вас в БД
С проверками закончили. Теперь можно сделать то, ради чего этот запрос пришел - изменить статус транзакции или пополнить счет пользователя, на ваше усмотрение. И эти действия я описывать не буду - все в ваших руках.
Осталось только вернуть системе правильный ответ. Тут все просто. Если обработка успешно завершена - отвечаем OK, а если нет - CANCEL
Пример правильного ответа:
exit('OK');
Вот и все, запрос завершен и эта статья тоже.
Комментариев нет:
Отправить комментарий