В общем, суть проблемы в том, что хеши md5 не хотят совпадать, хоть тресни... Хоть и все настроено как положено... Форма запроса платежа как и положено отправляет данные... PHP: $output .= "<div class=w1 align=center>Пополнение баланса <img src='' border=0><div class=multiple3><form method='POST' action='https://merchant.webmoney.ru/lmi/payment.asp'> <input style=\"width: 15%; height: 35px; font-size:20px;\" type='text' name='LMI_PAYMENT_AMOUNT' value=''> <input type='hidden' name='LMI_PAYMENT_DESC_BASE64' value='".base64_encode("Пополнение баланса для ".$mkportals->member['name'])."'> <input type='hidden' name='LMI_PAYMENT_NO' value='{$mkportals->member['id']}'> <input type='hidden' name='LMI_PAYEE_PURSE' value='R850275512100'>";$output .= "</select><input style=\"width: 20%; height: 35px; font-size:20px;\" type=submit value='Пополнить'></form></div></div>"; Все данные проходят и успешно оплата производится (с кошелька покупателя списывается, продавцу зачисляется), но вот хеши не совпадают. Собственно использую такой код для результ обработчика: PHP: <?php//кошелек на который будут перечислены средства$wm_purce = "R850275512100"; if( isset($_POST['LMI_PREREQUEST']) && $_POST['LMI_PREREQUEST'] == 1) { $sql = "SELECT id,price FROM orders WHERE id=".$_POST['LMI_PAYMENT_NO']; $result = mysql_query($sql); $rows = mysql_num_rows($result); if ( $rows != 1 ) { exit('Order not faund'); } else { $row = mysql_fetch_array($result); if($_POST['LMI_PAYMENT_NO'] == $row['id'] && $_POST['LMI_PAYEE_PURSE'] == $wm_purce && $_POST['LMI_PAYMENT_AMOUNT'] == $row['price']) { echo 'YES'; } else { exit(); } }}else { $LMI_SECRET_KEY = "Тут мой секретный ключ, идентичный тому что установил в настройках кошелька"; $sql = "SELECT id,price FROM orders WHERE id=".$_POST['LMI_PAYMENT_NO']; $result = mysql_query($sql); $rows = mysql_num_rows($result); if ( $rows != 1 ) { exit('Order not faund'); } else { $row = mysql_fetch_array($result); $str_hash = $wm_purce. $row['price']. $row['id']. $_POST['LMI_MODE']. $_POST['LMI_SYS_INVS_NO']. $_POST['LMI_SYS_TRANS_NO']. $_POST['LMI_SYS_TRANS_DATE']. $LMI_SECRET_KEY. $_POST['LMI_PAYER_PURSE']. $_POST['LMI_PAYER_WM']; $str_hash = strtoupper(md5($str_hash)); if($str_hash == $_POST['LMI_HASH']) { //обновляем статус заказа - оплачен и //отправляем пользователю письмо о том что его оплата прошла. } else { exit(); } }} ?> Решил в код добавить запись в файл, чтобы понять, что действительно хеши разные PHP: $str_hash = $_POST['LMI_PAYEE_PURSE'].$_POST['LMI_PAYMENT_AMOUNT'].$_POST['LMI_PAYMENT_NO'].$_POST['LMI_MODE'].$_POST['LMI_SYS_INVS_NO'].$_POST['LMI_SYS_TRANS_NO'].$_POST['LMI_SYS_TRANS_DATE'].$LMI_SECRET_KEY.$_POST['LMI_PAYER_PURSE'].$_POST['LMI_PAYER_WM']; $str_hash = strtoupper(md5($str_hash)); $fp = fopen("t.txt", "a");$mytext = $str_hash." - ".$_POST['LMI_HASH']."\r\n";fwrite($fp, $mytext);fclose($fp); if($str_hash == $_POST['LMI_HASH']) { //обновляем статус заказа - оплачен и //отправляем пользователю письмо о том что его оплата прошла. } как видно из кода, весь порядок генерации хеша мною соблюден, но хеши получаются разные, это видно из файла Слева от дефиса хеш сгенерирован согласно тому порядку, что взят из официального источника, слева хеш, который присылает система, и как видно он совсем другой. В чем дело? Код: F815E4EBB45A559431983B4E9DA1F60F - F38F2CFEC237D2E5C4CEE4B4A6E116C1 5298C17D649459D7310CDC3A7AE2E34A - 8917A7F68F92042C5163CF2B24258A49 398643F6AA5DCDB5428C3E5A8D3F16F0 - 4BC6C192CEAE2E3188C170DE0A5DEA98 197FA3A4061B44FA67268387ADB21FBC - 437169ED3EE0BB1BBB83A0AE4FB60E2F 183674E7ECB524C4B1420B6EEB69739F - 87572CF7BF952F383EF31669F63BF074 9393573DEAD6C63AD1B2FCB563BE8D32 - 898EC43A5857E35A626E7767058A2592
До формирования? т.е. до того, как система вернет данные в результ? Хеш по идее и подавно не совпадет, ведь данные о времени будут другими, а они тоже участвуют в создании хеша. Я вот как раз спецом в строку объеденил все ПОСТ данные, которые вернул сервис мерчанта PHP: $str_hash = $_POST['LMI_PAYEE_PURSE'].$_POST['LMI_PAYMENT_AMOUNT'].$_POST['LMI_PAYMENT_NO'].$_POST['LMI_MODE'].$_POST['LMI_SYS_INVS_NO'].$_POST['LMI_SYS_TRANS_NO'].$_POST['LMI_SYS_TRANS_DATE'].$LMI_SECRET_KEY.$_POST['LMI_PAYER_PURSE'].$_POST['LMI_PAYER_WM']; $str_hash = strtoupper(md5($str_hash)); т.е. 1 в 1 но с присланным хешем от системы хеш полученный из склееных строк не совпадает...
Я ступил немного в том посте =) Сверил твои скрипты с докой вебманек, ошибок не нашел. LMI_MODE ведь устанавливается в настройках аккаунта?
Мистика оО Создал новый кошель, настроил по аналогии с первым и... заработало! А старый кошель так и не хочет отдавать нормальный хеш... Странно...