Прочитал текущую статью и понял что не все понимают как правильно это сделать. На самом деле не нужны никакие библиотеки для обычного приема денег с оповещением на сайт. А вся интеграция укладывается в три этапа.
Заходим сюда: https://sp-money.yandex.ru/myservices/online.xml
— вводим адрес, по которому система Яндекс.Деньги должна стучаться, когда поступит платеж на ваш кошелек.
— смотрим секрет и записываем его в свой скрипт для приема (ниже есть пример).
— ставим галочку «Отправлять уведомления»
— нажимаем сохранить.
Все. Настройка со стороны яндекс окончена.
Заходим сюда: https://money.yandex.ru/embed/quickpay/shop.xml
Генерируем любую понравившуюся Вам форму. Можно также использовать кнопку-приниматель и для благовторителей. Все они по своей сути абсолютно одинаковые. Получим код вида:
При выводе формы оплаты на вашем сайте добавляем в get-параметры фрейма параметр label, в котором указываем, например id пользователя, которому хотим пополнить баланс на вашем сайте:
стало:
добавили параметр label=1
Размещаем форму у себя на сайте.
Все. На этом второй этап завершен.
Необязательно использовать форму, которую предлагает яндекс. Можно создать свою у себя на сайте. Как это сделать написано здесь: https://money.yandex.ru/i/forms/guide-to-custom-p2p-forms.pdf. Меня же интересовал вопрос сделать быстро и красиво. Форма от яндекса вполне себе приличная.
По адресу, который Вы указали в настройках яндекса должен размещаться скрипт, который обрабатывает информацию, получаемую от сервиса яндекс.Деньги.
Я опишу вкратце, вы его сможете настроить под себя:
Вот и все. Три простых шага, и Вы спокойно принимаете денюжки от ваших пользователей на вашем сайте с оповещением на сайт. Код php принципиально не содержит никаких проверок, так как я просто хотел показать как именно оно все работает. Всем спасибо за внимание!
Этап 1
Настройка на стороне Яндекс.Деньги
Заходим сюда: https://sp-money.yandex.ru/myservices/online.xml
— вводим адрес, по которому система Яндекс.Деньги должна стучаться, когда поступит платеж на ваш кошелек.
— смотрим секрет и записываем его в свой скрипт для приема (ниже есть пример).
— ставим галочку «Отправлять уведомления»
— нажимаем сохранить.
Все. Настройка со стороны яндекс окончена.
Этап 2
Генерация формы оплаты для вашего сайта
Заходим сюда: https://money.yandex.ru/embed/quickpay/shop.xml
Генерируем любую понравившуюся Вам форму. Можно также использовать кнопку-приниматель и для благовторителей. Все они по своей сути абсолютно одинаковые. Получим код вида:
<iframe frameborder="0" allowtransparency="true" scrolling="no" src="https://money.yandex.ru/embed/shop.xml?account=00000000000&quickpay=shop&payment-type-choice=on&writer=seller&targets=1&targets-hint=&default-sum=&button-text=01" width="450" height="200"></iframe>
При выводе формы оплаты на вашем сайте добавляем в get-параметры фрейма параметр label, в котором указываем, например id пользователя, которому хотим пополнить баланс на вашем сайте:
стало:
<iframe frameborder="0" allowtransparency="true" scrolling="no" src="https://money.yandex.ru/embed/shop.xml?account=00000000000&quickpay=shop&payment-type-choice=on&writer=seller&targets=1&targets-hint=&default-sum=&button-text=01&label=1" width="450" height="200"></iframe>
добавили параметр label=1
Размещаем форму у себя на сайте.
Все. На этом второй этап завершен.
Необязательно использовать форму, которую предлагает яндекс. Можно создать свою у себя на сайте. Как это сделать написано здесь: https://money.yandex.ru/i/forms/guide-to-custom-p2p-forms.pdf. Меня же интересовал вопрос сделать быстро и красиво. Форма от яндекса вполне себе приличная.
Этап 3
Настройка на вашем сайте
По адресу, который Вы указали в настройках яндекса должен размещаться скрипт, который обрабатывает информацию, получаемую от сервиса яндекс.Деньги.
Скрипт для приема
Я опишу вкратце, вы его сможете настроить под себя:
<?php
$secret = '000000000000000000000'; // секрет, который мы получили в первом шаге от яндекс.
// получение данных.
$r = array(
'notification_type' => $_POST['notification_type'], // p2p-incoming / card-incoming - с кошелька / с карты
'operation_id' => $_POST['operation_id'], // Идентификатор операции в истории счета получателя.
'amount' => $_POST['amount'], // Сумма, которая зачислена на счет получателя.
'withdraw_amount' => $_POST['withdraw_amount'], // Сумма, которая списана со счета отправителя.
'currency' => $_POST['intval'], // Код валюты — всегда 643 (рубль РФ согласно ISO 4217).
'datetime' => $_POST['datetime'], // Дата и время совершения перевода.
'sender' => $_POST['sender'], // Для переводов из кошелька — номер счета отправителя. Для переводов с произвольной карты — параметр содержит пустую строку.
'codepro' => $_POST['codepro'], // Для переводов из кошелька — перевод защищен кодом протекции. Для переводов с произвольной карты — всегда false.
'label' => $_POST['label'], // Метка платежа. Если ее нет, параметр содержит пустую строку.
'sha1_hash' => $_POST['sha1_hash'] // SHA-1 hash параметров уведомления.
);
// проверка хеш
if (sha1($r['notification_type'].'&'.
$r['operation_id'].'&'.
$r['amount'].'&'.
$r['currency'].'&'.
$r['datetime'].'&'.
$r['sender'].'&'.
$r['codepro'].'&'.
$secret.'&'.
$r['label']) != $r['sha1_hash']) {
exit('Верификация не пройдена. SHA1_HASH не совпадает.'); // останавливаем скрипт. у вас тут может быть свой код.
}
// обработаем данные. нас интересует основной параметр label и withdraw_amount для получения денег без комиссии для пользователя.
// либо если вы хотите обременить пользователя комиссией - amount, но при этом надо учесть, что яндекс на странице платежа будет писать "без комиссии".
$r['amount'] = floatval($r['amount']);
$r['withdraw_amount'] = floatval($r['withdraw_amount']);
$r['label'] = intval($r['label']); // здесь я у себя передаю id юзера, который пополняет счет на моем сайте. поэтому обрабатываю его intval
// дальше ваш код для обновления баланса пользователя / для вставки полученного платежа в историю платежей, например:
db_query('INSERT INTO payments (user_id, amount) VALUES('.$r['label'].', ',$r['amount']')'); // ваш запрос в базу
?>
Вот и все. Три простых шага, и Вы спокойно принимаете денюжки от ваших пользователей на вашем сайте с оповещением на сайт. Код php принципиально не содержит никаких проверок, так как я просто хотел показать как именно оно все работает. Всем спасибо за внимание!