Получение платежей на счет яндекс-денег с сайта. Создание обработчика

21.07.2015 12:12:31

  1. Заходим на сайт Яндекс-деньги, под номером кошелька яндекс-денег($ya_money_id) куда необходимо принимать деньги.
  2. Заходим в раздел «Управление кошельком»

  1. Раздел «Информирование» -> HTTP -> Настроить. Вводим пароль.

  1. Указываем в адресе ссылку на php-скрипт, который будет обрабатывать платеж, назовем его result_utl.php. Сохраняем секрет ($sha_word). Далее приложу код обработки платежа.

 

  1. Далее создадим на сайте кнопку для оплаты заказа.

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

<input type="hidden" name="receiver" value="<?=$ya_money_id;?>" /><!--Получатель платежа, наш кошелек -->

<input type="hidden" name="formcomment" value="Товар №<?=$s_order_id;?>" /><!--Комментарий для пользователя -->

<input type="hidden" name="short-dest" value=" Оплата по заказу №<?=$s_order_id;?>" /><!--Краткое описание -->

<input type="hidden" name="label" value="s_order@<?=$s_order_id;?>" /><!--Данные для обработчика result_utl.php -->

<input type="hidden" name="quickpay-form" value="donate" />/><!--Тип формы -->

 <input type="hidden" name="targets" value="" /><!--Цель оставляем пустой -->

<input type="hidden" data-type="number"  name="sum" value="<?=$s_order_price;?>" /><!--Стоимость заказа -->

<input type="hidden" name="need-fio" value="true" /><!--Запрашиваем у пользователя ФИО -->

<input type="hidden" name="need-email" value="false" /><!--Не запрашиваем у пользователя email -->

<input type="hidden" name="need-phone" value="true" /><!--Запрашиваем у пользователя телефон -->

<input type="hidden" name="need-address" value="true" /><!--Запрашиваем у пользователя адрес доставки -->

<!--Способ оплаты – ставим атрибут checked="checked" у того способа оплаты, который выбираем  -->

<input type="radio" style="display:none;"  name="paymentType" value="PC" value="Яндекс.Деньгами" checked="checked" />

<input type="radio" style="display:none;"  name="paymentType" value="AC" value="Банковской картой"  />

<input type="submit" name="submit-button" value="Купить" /><!--Кнопка купить  -->

</form>

$ya_money_id – номер кошелька яндекс-денег. Пример:41001….

$s_order_id id заказа, сформированного в БД,

$s_order_price – общая стоимость заказа.

 

  1. Создаем код обработчика result_utl.php

<?php

header('Content-type: text/plain; charset=windows-1251'); // задаем кодировку файла

 

include "../../../db.php"; //подключаем файл базы данных

include "../../../admin/functions/functions.php"; //подключаем модуль функций

 

$error=''; // переменная, маркер ошибок

$sha_word = "GgPGJG5JFR3rlF8eXXXXXXX"; //Вводим секрет, полученный в пункте 4.

 

//Получаем опции из базы данных для отправки email.

$sql = "SELECT name, val FROM a_options";

$res = mysql_query($sql);

for ($myrow = mysql_fetch_array($res); $myrow==true; $myrow = mysql_fetch_array($res))

{

    $S['options'][$myrow[0]]=$myrow[1];

}

$box   = $S['options']['Отправка заявок от клиента на email'];  

$config['smtp_username'] = $S['options']['Отправка заявок от клиента на email'];

$config['smtp_from']     = $S['options']['SMTP: login']; // Будет показывать при прочтении в поле "От кого"

$config['smtp_charset']  = 'Windows-1251'; //кодировка сообщений. (или UTF-8, итд)

$config['smtp_debug']    = true; //Если Вы хотите видеть сообщения ошибок, укажите true вместо false

$config['smtp_host']     = $S['options']['SMTP: Сервер для отправки почты']; //сервер для отправки почты

$config['smtp_password'] = $S['options']['SMTP: password']; //Измените пароль

$config['smtp_login']    = $S['options']['SMTP: login'];

$config['smtp_port']     = $S['options']['SMTP: Порт']; // Порт работы. Не меняйте, если не уверены.

 

//Получаем данные из label – для создания оплаты по заказу

$nomer='';$tip='';

if (isset($_REQUEST['label']) and $_REQUEST['label']!=''){

 

    if (strstr(_GP('label'),'@')==true)

    {

        $arr=explode('@', _GP('label'));

        if ($arr[0]=='s_order'){$tip='Заказ покупателя';}

        else{$tip='Продажа';}

       

        $nomer=$arr[1];

    }else{

       $error .='<br/>error no correct label. $label = '._GP('label');

   }

}

if($nomer==''){ $error .='<br/>error no nomer. $nomer = '. $nomer;}//проверяем на наличие номера

if($tip==''){ $error .='<br/>error no tip. $tip = '. $tip;}//проверяем на наличие типа

 

//Формируем sha1

$str=   _GP('notification_type'). '&' .

        _GP('operation_id'). '&' .

        _GP('amount'). '&' .

        _GP('currency'). '&' .

        _GP('datetime'). '&' .

        _GP('sender'). '&' .

        _GP('codepro') . '&'.$sha_word.'&' .

        _GP('label');

 

//проверяем на ошибки

if(_GP('sha1_hash')==''){ $error .='<br/>error no sha1_hash. $sha1_hash = '._GP('sha1_hash');}

if(sha1($str)!=_GP('sha1_hash')){ $error .='<br/>error no correct sha1_hash. sha1($str) = '. sha1($str).' != '. _GP('sha1_hash');}

 

if ($error!=''){//есть ошибки. Оповещаем администратора

send_mail_smtp(

        $box,

        'ОТЛАДКА при оплате '.$_SERVER['HTTP_HOST'],

        $error,

        'Администратору',

        $config['smtp_login'],

        'Интернет-магазин'.$_SERVER['HTTP_HOST'],

        1,

        array(),

        array(),

        0,

        0,

        $config

    );

}else{//успешная обработка платежа

   

    $sql = "INSERT into platezi (

        data,

         id_z_p_p,

        tip,

         s_scheta_id,

        summa,

         kommentarii

                ) VALUES (

        '".date('Y-m-d H:i:s')."',

        '"._DB($nomer)."',

        '"._DB($tip)."',

        '3',

        '"._DB(_GP('amount'))."',

        'Оплата через сайт'

    )";

    $res = mysql_query($sql);

}

?>