Подключение приема платежей в автоматическом режиме через ONPAY Merchant API

Опубликовал: Четверг, Ноябрь 15, 2012 в категории AJAX, PHP | Пока нет комментариев

Cкрипт подключения приема платежей в автоматическом режиме через ONPAY Merchant API находится в файле prgoplata/onpay.php (листинг 3.62).

Листинг 3.62

<?php

// подключение к файлу настроек

require_once("../my.php");

// подключение к базе данных

require_once("../mybaza.php");

// подключение к файлу формирования доступа к товарам

require_once("../arhivtovar/create_new_htaccess.php");

$key=OP_KEY;

$ff=fopen("1.txt","w");

//Ответ на запрос check от OnPay (проверка наличия заказа в базе данных)

if($_REQUEST['type']==’check’)

{

$error=0;

$order_amount=$_REQUEST['order_amount'];

$order_currency=$_REQUEST['order_currency'];

$code=$pay_for=$_REQUEST['pay_for'];

$md5=$_REQUEST['md5'];

$sum=floatval($order_amount);

$code=intval($code); //Код должен быть целым числом

//Проверка кода и переводимой за него суммы

$txt=$order_amount.";".$order_currency.";".$code.";".$md5.";".$sum.";"; fwrite($ff,$error.$txt);

fclose($ff);

//поиск заказа в базе

$query1="SELECT * FROM zakaz WHERE id=’".$code."’;";

$rez1=mysql_query($query1); if($rez1)

{ if(mysql_num_rows($rez1))

{

$rezult=answer($_REQUEST['type'],0,$pay_for,

$order_amount,$order_currency,’OK’);

//Отвечаем серверу OnPay, что все хорошо, можно принимать деньги

} else

$error=1;

} else

$error=1; if($error==1)

$rezult=answer($_REQUEST['type'],2,$pay_for,

$order_amount,$order_currency,’Error code pay_for: ‘.$code);

//Сообщаем ошибку

}

//Ответ на запрос pay от OnPay if($_REQUEST['type']=="pay")

{

$onpay_id=$_REQUEST['onpay_id'];

$code=$pay_for=$_REQUEST['pay_for'];

$order_amount=$_REQUEST['order_amount'];

$order_currency=$_REQUEST['order_currency'];

$balance_amount=$_REQUEST['balance_amount'];

$balance_currency=$_REQUEST['balance_currency'];

$exchange_rate=$_REQUEST['exchange_rate'];

$paymentDateTime=$_REQUEST['paymentDateTime'];

$md5=$_REQUEST['md5'];

$error=”;

//Проверка входных данных

$txt=$onpay_id.";".$code.";".$order_amount.";".$order_currency.";";

$txt.=$balance_amount.";".$balance_currency.";".$exchange_rate.";";

$txt.=$paymentDateTime.";".$md5; if (empty($onpay_id))

{

$error .="Не указан id<br>";

} else

{

if (!is_numeric(intval($onpay_id)))

{$error .="Параметр не является числом<br>";}

}

if (empty($order_amount))

{$error .="Не указана сумма<br>";}

else

{

if (!is_numeric($order_amount))

{$error .="Параметр не является числом<br>";}

}

if (empty($balance_amount))

{$error .="Не указана сумма<br>";}

else

{

if (!is_numeric(intval($balance_amount)))

{$error .="Параметр не является числом<br>";}

}

if (empty($balance_currency))

{$error .="Не указана валюта<br>";}

else

{

if (strlen($balance_currency)>4)

{$error .="Параметр слишком длинный<br>";}

}

if (empty($order_currency))

{$error .="Не указана валюта<br>";}

else

{

260

if (strlen($order_currency)>4)

{$error .="Параметр слишком длинный<br>";}

} Часть II. Проект интернет-магазина

if (empty($exchange_rate))

{$error .="Не указана сумма<br>";}

else

{

if (!is_numeric($exchange_rate))

{$error .="Параметр не является числом<br>";}

}

//********** //Если нет ошибок

if (!$error)

{

//** fwrite($ff,$txt); fclose($ff);

//** if(is_numeric($code))

{//Если pay_for число

$code=intval($code); //Код должен быть целым числом

$sum=floatval($order_amount);

//Проверяем, что код есть в базе данных, и оплачиваемая сумма не меньше допустимой

$query1="SELECT * FROM zakaz WHERE id=’".$code."’;";

$rez1=mysql_query($query1); if(mysql_num_rows($rez1) == 1)

{

//Создаем строку хэша с присланных данных

$md5fb=strtoupper(md5($_REQUEST['type'].";".$pay_for.";".$onpay_id.";".$order_ amount.";".$order_currency.";".$key.""));

//Сверяем строчки хеша (присланную и созданную нами)

if ($md5fb != $md5)

{$rezult=answerpay($_REQUEST['type'],7,$pay_for,$order_amount,$order_currency,’Md5 signature is wrong’,$onpay_id);}

else

{

// изменение статуса заказа

$Id=$code; require_once("mybaza.php");

$query1="UPDATE zakaz SET pay=’yes’ WHERE id=’".$Id."’ ";

$rez1=mysql_query($query1);

// создание ссылок

$data=date(‘Y-m-d’,strtotime(‘now+10days’));

$query2="SELECT id,id_tovar FROM zakaz_table WHERE id_zakaz=".$Id." ";

$rez2=mysql_query($query2); while($row2=mysql_fetch_assoc($rez2))

{

$query3="SELECT arhiv FROM tovars WHERE id=’".$row2[id_tovar]."’ ";

$link=mysql_result(mysql_query($query3),0);

$query4="SELECT id_user FROM zakaz WHERE id=’".$Id."’ ";

$id_user=mysql_result(mysql_query($query4),0);

$query5="INSERT INTO link_downloads SET id_user=’".$id_user."’, file=’".$link."’,status=’yes’,data=’".$data."’, id_zakaz=’".$Id."’ ";

$rez5=mysql_query($query5);

$id_link=mysql_insert_id();

$query6="UPDATE zakaz_table SET id_link=’".$id_link."’ WHERE id=’".$row2[id]."’ ";

$rez6=mysql_query($query6);

}

// изменения в файле .htaccess

create_new_htaccess();

//******************** if ($rezult1)

//Если занесение информации в базу данных прошло без ошибок,

{

$rezult=answerpay($_REQUEST['type'],0,$pay_for,

$order_amount,$order_currency,’OK’,$onpay_id);

} else

{

$rezult=answerpay($_REQUEST['type'],3,$pay_for,

$order_amount,$order_currency,’Error in mechant database queries: operation or balance tables error’,$onpay_id);

}

}

} else

{

$rezult=answerpay($_REQUEST['type'],3,$pay_for,

$order_amount,$order_currency,’Cannot find any pay

rows acording to this parameters: wrong payment’,$onpay_id);

}

}

else {

//Если pay_for не правильный формат

$rezult=answerpay($_REQUEST['type'],3,$pay_for,

$order_amount,$order_currency,’Error in parameters data’,$onpay_id);

}

}

//Если есть ошибки

else

{ fwrite($ff,$error.$txt); fclose($ff);

$rezult=answerpay($_REQUEST['type'],3,$pay_for,

$order_amount,$order_currency,’Error in parameters data’,

$onpay_id);

}

}

echo $rezult;

//Функция выдает ответ для сервиса onpay в формате XML на pay-запрос

function answerpay($type,$code,$pay_for,$order_amount,$order_currency,$text,

$onpay_id)

{

global $key;

$md5=strtoupper(md5("$type;$pay_for;$onpay_id;$pay_for;$order_amount;

$order_currency; $code;$key"));

return "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">\n<result>\n<code>".

$code."</code>\n <comment>".$text."</comment>\n<onpay_id>".$onpay_id.

"</onpay_id>\n <pay_for>".$pay_for."</pay_for>\n<order_id>".$pay_for.

"</order_id>\n<md5>".$md5."</md5>\n</result>";

}

//Функция выдает ответ для сервиса onpay в формате XML на чек-запрос

function answer($type,$code,$pay_for,$order_amount,$order_currency,$text)

{

global $key;

$md5=strtoupper(md5("$type;$pay_for;$order_amount;$order_currency;$code;$key")); return "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">\n<result>\n<code>".

$code."</code>\n<pay_for>".$pay_for."</pay_for>\n<comment>".$text."</comment>\

n<md5>".$md5."</md5>\n</result>";

}

?>

При успешной оплате скрипт изменяет статус заказа в базе данных, формирует уведомления по e-mail и сервису мгновенных оповещений покупателю и администратору об успешной оплате заказа.

Источник: Петин В. А., Сайт на AJAX под ключ. Готовое решение для интернет-магазина. — СПб.: БХВ-Петербург, 2011. — 432 с.: ил. + CD-ROM — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>