@radio_mus

Как правильно внести отметку об оплате пользователя в БД (или проблема с ResultURI)?

Здравствуйте!
Друзья, подскажите пожалуйста, столкнулся первый раз, видимо делаю что то не так.
Как я понимаю, при успешной оплате, робокасса обращается к файлу result, путь к которому указывается в технических настройках.
В этом файле находится пароль№2, а также запись в файл order.txt куда вносится информация о платеже, а также я указал sql запрос на внесение изменений в БД (отметка о платеже пользователя).
Но дело в том, что при успешной оплате (оплата проходит и приходит на счет робокассы), ни в файл, ни в БД информация не вносится. Тех поддержка ничем помочь не может.

Форма:
<form method="post" action="https://merchant.roboxchange.com/Index.aspx">

$mrh_login = "логин";
$mrh_pass1 = "пароль1";

// номер заказа
$inv_id = 0;

// описание заказа
$inv_desc = "Подтверждение участия в проекте АДМ на сайте chudopridet.ru, от ".$_SESSION["auth_email"];

// сумма заказа
$out_summ = "1";

// тип товара
$shp_item = "2";

// предлагаемая валюта платежа
$in_curr = "";

// язык
$culture = "ru";

// формирование подписи
$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item");

// форма оплаты товара
print "<input type=hidden name=MrchLogin value=$mrh_login>".
      "<input type=hidden name=OutSum value=$out_summ>".
      "<input type=hidden name=InvId value=$inv_id>".
      "<input type=hidden name=Desc value='$inv_desc'>".
      "<input type=hidden name=SignatureValue value=$crc>".
      "<input type=hidden name=Shp_item value='$shp_item'>".
      "<input type=hidden name=IncCurrLabel value=$in_curr>".
      "<input type=hidden name=EmailUser value={$_SESSION["auth_email"]}>".
      "<input type=hidden name=Culture value=$culture>";


Result:
$mrh_pass2 = "пароль2";
//установка текущего времени
$tm=getdate(time()+9*3600);
$date="$tm[year]-$tm[mon]-$tm[mday] $tm[hours]:$tm[minutes]:$tm[seconds]";

// чтение параметров
$out_summ = $_REQUEST["OutSum"];
$inv_id = $_REQUEST["InvId"];
$shp_item = $_REQUEST["Shp_item"];
$email_user = $_REQUEST["EmailUser"];
$crc = $_REQUEST["SignatureValue"];

$crc = strtoupper($crc);

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_item=$shp_item"));

// проверка корректности подписи
if ($my_crc !=$crc) {
  echo "bad sign\n";
  exit();
}

// признак успешно проведенной операции
echo "OK$inv_id\n";

include("db_connect.php");
mysql_query("UPDATE reg_user SET payment = '1' WHERE email = {$email_user}",$link);

// запись в файл информации о проведенной операции
$f=@fopen("order.txt","a+") or
          die("error");
fputs($f,"order_num :$inv_id;Summ :$out_summ;Date :$date\n");
fclose($f);


Спасибо большое, всем откликнувшимся!
  • Вопрос задан
  • 319 просмотров
Пригласить эксперта
Ответы на вопрос 1
@RoverWhite
Прежде всего мне не нравиться форма оплаты товара
надо бы так
print "<input type=\"hidden\" name=\"MrchLogin\" value=\"$mrh_login\">".
      "<input type=\"hidden\" name=\"OutSum\" value=\"$out_summ\">".
      "<input type=\"hidden\" name=\"InvId\" value=\"$inv_id\">".
      "<input type=\"hidden\" name=\"Desc\" value=\"$inv_desc\">".
      "<input type=\"hidden\" name=\"SignatureValue\" value=\"$crc\">".
      "<input type=\"hidden\" name=\"Shp_item\" value=\"$shp_item\">".
      "<input type=\"hidden\" name=\"IncCurrLabel\" value=\"$in_curr\">".
      "<input type=\"hidden\" name=\"EmailUser\" value=\"{$_SESSION["auth_email"]}\">".
      "<input type=\"hidden\" name=\"Culture\" value=\"$culture\">";


Во вторых добавьте в файл result логирование обращений к файлу:
хотя бы вот так
file_put_content('result_'.time().'.log', var_export($_REQUEST, true));
Тогда хоть можно будет посмотреть есть ли вообще обратные уведомления от robokassa
и что конкретно пошло не так.
Может подпись некорректна, может еще что-то с кодировками например, а может и вовсе обращение не приходит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы