Справочники, инструменты, документация

PHP: Настройка системы оплаты на сайте с автоматическими HTTP-уведомлениями ЮMoney

Для того, чтобы понять, что такое HTTP-уведомления, приведем два примера покупки на сайте.
  • Без уведомлений. Кто-то покупает что-то у вас на сайте. Вам приходит email об оплате. После того, как вы получаете этот email, вы отсылаете товар человеку, купившему его. Минус данного подхода очевиден — вас может не быть дома или у вас в данный момент может не работать интернет. В итоге покупатель превращается в недовольного покупателя, так как ему приходиться ждать товар какое-то время.
  • С HTTP-уведомлением. Посетитель оплачивает товар у вас на сайте и сразу же получает ссылку на скачивание либо товар сразу же высылается ему по email.

Настройка формы HTML

<form method="POST" action="https://yoomoney.ru/quickpay/confirm.xml">

<!-- Номер кошелька ЮMoney, на который нужно зачислять деньги отправителей -->
<input type="hidden" name="receiver" value="410000000000000">

<!-- Название перевода в истории отправителя (для переводов из кошелька или с привязанной карты). Отображается в кошельке отправителя.
Удобнее всего формировать его из названий магазина и товара. Например: Мой магазин: валенки белые (длина до 50 символов)-->
<input type="hidden" name="formcomment" value="Проект «Железный человек»: реактор холодного ядерного синтеза">

<!-- Название перевода на странице подтверждения. Рекомендуем делать его таким же, как formcomment -->
<input type="hidden" name="short-dest" value="Проект «Железный человек»: реактор холодного ядерного синтеза"/>

<!-- Метка, которую сайт или приложение присваивает конкретному переводу. 
Например, в качестве метки можно указывать код или идентификатор заказа (длина до 64 символа) -->
<input type="hidden" name="label" value="$order_id">

<!-- Тип формы, возможные значения:
shop — для универсальной формы;
small — для кнопки;
donate — для «благотворительной» формы -->
<input type="hidden" name="quickpay-form" value="shop">

<!-- Назначение платежа, это покупатель видит на сайте ЮMoney при вводе платежного пароля (длина до 150 символов) -->
<input type="hidden" name="targets" value="Покупка на сайте">

<!-- Сумма перевода (спишется с отправителя), валюта - рубли по умолчанию -->
<input type="hidden" name="sum" value="400.00" data-type="number">

<!-- Должен ли ЮMoney запрашивать ФИО покупателя-->
<input type="hidden" name="need-fio" value="false">

<!-- Должен ли ЮMoney запрашивать email покупателя-->
<input type="hidden" name="need-email" value="true">

<!-- Должен ли ЮMoney запрашивать телефон покупателя-->
<input type="hidden" name="need-phone" value="false">

<!-- Должен ли ЮMoney запрашивать адрес покупателя-->
<input type="hidden" name="need-address" value="false">

<!-- Метод оплаты, возможные значения:
PC — оплата из кошелька ЮMoney;
AC — с банковской карты;
MC — с баланса мобильного -->
<input type="hidden" name="paymentType" value="AC" />

<!-- Куда перенаправлять пользователя после успешной оплаты платежа -->
<input type="hidden" name="successURL" value="http://websait/thankyou">

<button>Оплатить</button> 
</form>

Настройка HTTP-уведомлений

Сейчас нужно будет сделать небольшую настройку на сайте ЮMoney. Для этого переходим по адресу https://yoomoney.ru/myservices/online.xml

Перед тем, как у вас отобразится следующая страница, ЮMoney попросит вас ввести платёжный пароль.

Настройка HTTP-уведомлений

Указываем URL скрипта, который будет обрабатывать уведомления (мы его создадим в следующем шаге), жмём кнопку «Показать секрет» и копируем его, так как он тоже понадобится нам в следующем шаге. В заверешении отмечаем галочку «Показать уведомления» и жмём кнопку «Сохранить».

Также в данном случае следует обратить внимание на защищенный протокол https:// адреса получения обновлений. Если ваш сайт поддерживает https://, то вы сможете получать личную информацию пользователей в уведомлении (email, адрес, фио), если же использовать незащищенный http://, то эти параметры будут пустыми.

Прием HTTP-уведомлений

В соответствии с предыдущим шагом создаем файл receive.php в корне сайта. Содержимое файла будет зависеть от того, какие действия вы будете предпринимать после получения уведомления.

Сейчас мы рассмотрим только то, как получить параметры платежа и сделать проверку того, что все полученные данные верны.

$secret_key = 'PLzJI0SgyuqPW2kdjuoLOKKP'; // секретное слово, которое мы получили в предыдущем шаге.

// возможно некоторые из нижеперечисленных параметров вам пригодятся
// $_POST['operation_id'] - номер операция
// $_POST['amount'] - количество денег, которые поступят на счет получателя
// $_POST['withdraw_amount'] - количество денег, которые будут списаны со счета покупателя
// $_POST['datetime'] - тут понятно, дата и время оплаты
// $_POST['sender'] - если оплата производится через ЮMoney, то этот параметр содержит номер кошелька покупателя
// $_POST['label'] - лейбл, который мы указывали в форме оплаты
// $_POST['email'] - email покупателя (доступен только при использовании https://)

$sha1 = sha1( $_POST['notification_type'] . '&'. $_POST['operation_id']. '&' . $_POST['amount'] . '&643&' . $_POST['datetime'] . '&'. $_POST['sender'] . '&' . $_POST['codepro'] . '&' . $secret_key. '&' . $_POST['label'] );

if ($sha1 != $_POST['sha1_hash'] ) {
    // тут содержится код на случай, если верификация не пройдена
    exit();
}

// тут код на случай, если проверка прошла успешно

exit();

Полный список параметров уведомлений вы найдёте в документации ЮMoney.