Автоматический прием Яндекс.Денег на сайте на php
Прочитал текущую статью и понял что не все понимают как правильно это сделать. На самом деле не нужны никакие библиотеки для обычного приема денег с оповещением на сайт. А вся интеграция укладывается в три этапа.
Этап 1
Настройка на стороне Яндекс.Деньги
Заходим сюда: https://sp-money.yandex.ru/myservices/online.xml
— вводим адрес, по которому система Яндекс.Деньги должна стучаться, когда поступит платеж на ваш кошелек.
— смотрим секрет и записываем его в свой скрипт для приема (ниже есть пример).
— ставим галочку «Отправлять уведомления»
— нажимаем сохранить.
Все. Настройка со стороны яндекс окончена.
Этап 2
Генерация формы оплаты для вашего сайта
Заходим сюда: 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. Меня же интересовал вопрос сделать быстро и красиво. Форма от яндекса вполне себе приличная.
Этап 3
Настройка на вашем сайте
По адресу, который Вы указали в настройках яндекса должен размещаться скрипт, который обрабатывает информацию, получаемую от сервиса яндекс.Деньги.
Скрипт для приема
$_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 принципиально не содержит никаких проверок, так как я просто хотел показать как именно оно все работает. Всем спасибо за внимание!
[DEV: PHP] Пишем код для пополнения балансов в играх и сервисах
Допустим, у вас есть игровая платформа или сервис, в котором вы планируете принимать криптовалюту для пополнения баланса пользователей.
В платежном гейте Apirone есть кошельки под отдельные криптовалюты и аккаунты, объединяющие крипто-кошельки. Аккаунты и кошельки можно создавать API-запросом, что очень удобно при масштабировании и разворачивании уже готовых проектов. Также можно это сделать на странице https://apirone.com/dashboard/create
Запросы полностью анонимные, а создавать кошельки и аккаунты можно сколько угодно, без ограничений по количеству.
Главное хранить данные кошелька в безопасном месте.
Тестовый кошелек: tbtc-bde1cfc70297e4ff7068334b25986819
Transfer key: hyl1aQkd5vwdzT1uExgUCOXOcekUg4Yc
Для пополнения баланса на любую сумму, клиентам достаточно показать текущий курс https://apirone.com/docs/rate/#ticker
адрес для оплаты и QR-код https://developers.google.com/chart/infographics/docs/qr_codes?hl=ru . В криптовалютах нет назначения платежа и суммы оплаты, поэтому идентификатором платежей служит адрес (для примера, возьмем блокчейн биткоина).
Для каждого пользователя POST-запросом создаем отдельный биткоин-адрес с параметрами id пользователя, email или login, также можно добавить секретный ключ, чтобы повысить безопасность вашей платформы.
array( ‘url’=> ‘http://example.com/callback’, ‘data’ => array ( ‘user_id’ => «1234», ‘secret’ => «7j0ap91o99cxj8k9»))); $wallet = «tbtc-bde1cfc70297e4ff7068334b25986819»; $api_base = «https://apirone.com/api/v2/wallets/». $wallet .»/addresses»; $curl = curl_init($api_base); curl_setopt($curl, CURLOPT_HTTPHEADER, array(«Content-Type: application/json»)); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json_data)); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $http_status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); $response = curl_exec($curl); curl_close($curl); $decoded = json_decode($response, true); echo «Please send the payment to the following bitcoin address: » . $decoded[«address»]; ?>?php>
В ‘url’=> ‘http://example.com/callback’ меняем ссылку на адрес страницы для колбэка на своем сайта. Эта страница будет получать всю информацию о поступающих платежах.
‘user_id’ — какой-либо идентификатор вашего клиента.
‘secret’ — придуманный вами секретный код, для дополнительной безопасности при получении данных от платежного сервиса.
$wallet — идентификатор кошелька, с которым мы работаем.В этом примере используем тестнет биткоина для отладки, на продакшен поменяете на рабочий кошелек.
Вы можете заводить неограниченное количество адресов, к тому же они вечные. Это значит, что мы будем мониторить их всегда, а при поступлении платежа — уведомлять указанный url со всеми сохраненными параметрами.
На странице пополнения баланса клиенту будет удобно, если платеж автоматически появится на экране. Для этого можно периодически делать запрос в базу и проверять была ли оплата.
Страница колбэка нужна для приема данных о транзакции и следования бизнес-логике при оплате. На эту страницу Apirone передает: адрес, сумму, хэш транзакции, количество подтверждений и данные которые мы указали: user_id и secret. Данные передаются POST запросом в формате JSON, так удобнее и безопаснее.
- Настоятельно рекомендуем зачислять платеж минимум после одного подтверждения в сети, а если суммы ощутимо большие, то после 3 подтверждений.
- Рекомендуем хранить в базе данных целочисленные значения суммы в сатоши, потому что значения с плавающей запятой могут привести к ошибкам вычисления.
- Эндпоинт для всех кошельков одинаковый, меняйте параметр $wallet на Litecoin, Bitcoin Cash, Dogecoin и др. В будущем будут появляться новые криптовалюты, стэйбл-коины и токены.
Автоматический прием Яндекс.Денег на сайте на php
Прочитал текущую статью и понял что не все понимают как правильно это сделать. На самом деле не нужны никакие библиотеки для обычного приема денег с оповещением на сайт. А вся интеграция укладывается в три этапа.
Этап 1
Настройка на стороне Яндекс.Деньги
Заходим сюда: https://sp-money.yandex.ru/myservices/online.xml
— вводим адрес, по которому система Яндекс.Деньги должна стучаться, когда поступит платеж на ваш кошелек.
— смотрим секрет и записываем его в свой скрипт для приема (ниже есть пример).
— ставим галочку «Отправлять уведомления»
— нажимаем сохранить.
Все. Настройка со стороны яндекс окончена.
Этап 2
Генерация формы оплаты для вашего сайта
Заходим сюда: 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. Меня же интересовал вопрос сделать быстро и красиво. Форма от яндекса вполне себе приличная.
Этап 3
Настройка на вашем сайте
По адресу, который Вы указали в настройках яндекса должен размещаться скрипт, который обрабатывает информацию, получаемую от сервиса яндекс.Деньги.
Скрипт для приема
$_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 принципиально не содержит никаких проверок, так как я просто хотел показать как именно оно все работает. Всем спасибо за внимание!