[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Настройка платежной системы
makgreen
Здравствуйте. Возникла проблема с установкой платежной системы на сайт, а именно с занесением данных после проведения оплаты в базу MySQL. Нужно после того как человек оплатит счет в payeer, чтобы сумма зачислилась на его баланс на сайте.

Вот код формы транзакции:



} elseif($ps == 2) {

// Payeer

$sql = 'INSERT INTO enter (sum, date, login, paysys, service) VALUES ('.$sum.', '.time().', "'.$login.'", "LR", "bal")';
if(mysql_query($sql)) {

$m_shop = '3748869'; // ID вашего магазина
$m_orderid = mysql_insert_id(); // Номер платежа
$m_amount = $sum; // Сумма платежа
$m_curr = 'USD'; // Используемая валюта
$m_desc = base64_encode($login); // Комментарий к платежу
$m_key = 'QiruguUDao'; // Секретный ключ вашего магазина

$arHash = array(
$m_shop,
$m_orderid,
$m_amount,
$m_curr,
$m_desc,
$m_key
);
$sign = strtoupper(hash('sha256', implode(":", $arHash)));


print '<FIELDSET style="border: solid #666666 1px; padding-top: 15px; margin-bottom: 10px;">
<LEGEND><b>
Confirmation of payment</b></LEGEND>
<form
method="GET" action="//payeer.com/api/merchant/m.php">
<input
type="hidden" name="m_shop" value= "'.$m_shop.'">
<input
type="hidden" name="m_orderid" value= "'.$m_orderid.'">
<input
type="hidden" name="m_amount" value= "'.number_format($m_amount, 2, ".", "").'">
<input
type="hidden" name="m_curr" value= "'.$m_curr.'">
<input
type="hidden" name="m_desc" value="'.$m_desc.'">
<input
type="hidden" name="m_sign" value="'.$sign.'">
<center>

You transfer <strong>'.$sum.'</strong> USD to account <strong>'.$cfgPayeer.'</strong> Payeer.com <br />Add Balance in the project '.$cfgURL.'<br />
<p
align="center"><input class="subm" type="submit" value=" Payment is confirmed " /></p>
</center>
</form>
</FIELDSET>
';


C самой транзакцией проблем нет, а вот дальше как я понял существует страница которая собственно проверяет статус транзакции и в случае успеха деньги зачисляются на баланс пользователя.

Вот код этой страницы:


<?php
include "cfg.php";

if (isset($_POST["m_operation_id"]) && isset($_POST["m_sign"]))
{
$m_key = "QiruguUDao";
$arHash = array($_POST['m_operation_id'],
$_POST['m_operation_ps'],
$_POST['m_operation_date'],
$_POST['m_operation_pay_date'],
$_POST['m_shop'],
$_POST['m_orderid'],
$_POST['m_amount'],
$_POST['m_curr'],
$_POST['m_desc'],
$_POST['m_status'],
$m_key);
$sign_hash = strtoupper(hash('sha256', implode(":", $arHash)));
$login = base64_decode($_POST[m_desc]);
if ($_POST["m_sign"] == $sign_hash && $_POST['m_status'] == "success")
{
echo $_POST['m_orderid']."|success";



$query = "SELECT * FROM enter WHERE id = ".intval($_REQUEST['m_orderid'])." LIMIT 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if($row['id']) {

if(sprintf("%01.2f", $_REQUEST['m_amount'])==$row['sum'] && $_REQUEST['m_shop']==$cfgPayeer && $_REQUEST['m_curr']=='USD'){

mysql_query('UPDATE users SET lr_balance = lr_balance + '.$row[sum].' WHERE login = "'.$row[login].'" LIMIT 1');
mysql_query("UPDATE enter SET status = 2, purse = '".htmlspecialchars($_REQUEST['m_shop'], ENT_QUOTES)."', paysys = 'LR' WHERE id = ".intval($_REQUEST['m_orderid'])." LIMIT 1");

} else {
print "ERROR";
mail($adminmail, "Status", "Не те данные");
}

}
else {
print "ERROR";
mail($adminmail, "Status", "Нет записи в БД".$_REQUEST['m_orderid']);
}

}
else {
print "ERROR";
mail($adminmail, "Status", "Не прошёл хеш");
}
?>


Но после оплаты деньги на балансе аккаунта не появляются, в чем может быть проблема? Так же добавлю что в скрипте сайта есть и другая платежная система, с которой все работает нормально. На всякий случай приложу код её файлов.

Генерация транзакции:


if($ps == 1) {

// PM

$sql = 'INSERT INTO enter (sum, date, login, paysys, service) VALUES ('.$sum.', '.time().', "'.$login.'", "PM", "bal")';
mysql_query($sql);

print '<FIELDSET style="border: solid #666666 1px; padding-top: 15px; margin-bottom: 10px;">
<LEGEND><b>
Confirmation of payment</b></LEGEND>
<form
action="https://perfectmoney.com/api/step1.asp" method="POST">
<input
type="hidden" name="PAYEE_ACCOUNT" value="'.$cfgPerfect.'">
<input
type="hidden" name="PAYEE_NAME" value="'.$cfgPAYEE_NAME.'">
<input
type="hidden" name="PAYMENT_ID" value="'.mysql_insert_id().'">
<input
type="hidden" name="PAYMENT_AMOUNT" value="'.$sum.'">
<input
type="hidden" name="PAYMENT_UNITS" value="USD">
<input
type="hidden" name="STATUS_URL" value="http://'.$cfgURL.'/pmresult.php">
<input
type="hidden" name="PAYMENT_URL" value="http://'.$cfgURL.'/?pay=yes">
<input
type="hidden" name="PAYMENT_URL_METHOD" value="POST">
<input
type="hidden" name="NOPAYMENT_URL" value="http://'.$cfgURL.'/enter/?er=1">
<input
type="hidden" name="NOPAYMENT_URL_METHOD" value="POST">
<input
type="hidden" name="BAGGAGE_FIELDS" value="">
<input
type="hidden" name="SUGGESTED_MEMO" value="'.$login.'">
<center>

You transfer <strong>'.$sum.'</strong> USD to account <strong>'.$cfgPerfect.'</strong> PerfectMoney<br />Add Balance in the project '.$cfgURL.'<br />
<p
align="center"><input name="PAYMENT_METHOD" type="submit" value=" Payment is confirmed " class="button square green effect-2"/></p>
</center>
</form>
</FIELDSET>
';



И файл обработчик:


<?php
include "cfg.php";

$ALTERNATE_PHRASE_HASH = strtoupper("5A6E0ACF35G7824624A3538891AD17DGH9");

$string = $_REQUEST['PAYMENT_ID'].':'.$_REQUEST['PAYEE_ACCOUNT'].':'.$_REQUEST['PAYMENT_AMOUNT'].':'.$_REQUEST['PAYMENT_UNITS'].':'.$_REQUEST['PAYMENT_BATCH_NUM'].':'.$_REQUEST['PAYER_ACCOUNT'].':'.$ALTERNATE_PHRASE_HASH.':'.$_REQUEST['TIMESTAMPGMT'];

$hash = strtoupper(md5($string));

if($hash==$_REQUEST['V2_HASH']) {

$query = "SELECT * FROM enter WHERE id = ".intval($_REQUEST['PAYMENT_ID'])." LIMIT 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if($row['id']) {

if(sprintf("%01.2f", $_REQUEST['PAYMENT_AMOUNT'])==$row['sum'] && $_REQUEST['PAYEE_ACCOUNT']==$cfgPerfect && $_REQUEST['PAYMENT_UNITS']=='USD'){

mysql_query('UPDATE users SET pm_balance = pm_balance + '.$row[sum].' WHERE login = "'.$row[login].'" LIMIT 1');
mysql_query("UPDATE enter SET status = 2, purse = '".htmlspecialchars($_REQUEST['PAYER_ACCOUNT'], ENT_QUOTES)."', paysys = 'PM' WHERE id = ".intval($_REQUEST['PAYMENT_ID'])." LIMIT 1");

} else {
print "ERROR";
mail($adminmail, "Status", "Не те данные");
}

}
else {
print "ERROR";
mail($adminmail, "Status", "Нет записи в БД".$_REQUEST['PAYMENT_ID']);
}

}
else {
print "ERROR";
mail($adminmail, "Status", "Не прошёл хеш");
}
?>

Заранее спасибо за ответы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.