Вот код формы транзакции:
} 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", "Не прошёл хеш");
}
?>
Заранее спасибо за ответы.