Здравствуйте ест скрипт магазина подключаю к нему ROBOKASSA но тут возникла проблема которую сам не могу решить, так как не пойму как может один md5 хеш быть равным с другим md5 хеш.
Вот описание на сайте ROBOKASSA. Небольшая выдержка:
sMerchantLogin - login магазина в обменном пункте(обязательный параметр)
nOutSum - требуемая к получению сумма.
nInvId - номер счета в магазине
sSignatureValue - контрольная сумма MD5(обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей следующие параметры, разделенные ':', с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования): sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном алфавитном порядке]
Файл RESULT
В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):
OutSum=nOutSum&
InvId=nInvId&
SignatureValue=sSignatureValue
nOutSum
-полученная сумма.
nInvId
- номер счета в магазине
sSignatureValue
- контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей некоторые параметры, разделенные ':', с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т.е. nOutSum:nInvId:sMerchantPass2
Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).
Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому системе. Результат должен содержать "OKnMerchantInvId", т.е. для счета #5 должен быть возвращен текст "OK5".
Вот тестовый код для примера.
PHP:
скопировать код в буфер обмена
// Данные для 1 хеша $mrh_login = "tester"; // Логин в робочанге $out_summ = "0.1"; // Сумма платежа в wmz $inv_id = "123"; // Номер счёта $mrh_pass1 = "uy4n2vo§3EZC6RZs"; // Пароль 1 // Формируем 1 md5 хеш из параметров указанных ниже $crc = strtoupper (md5 ( "$mrh_login:$out_summ:$inv_id:$mrh_pass1" )); // Данные для хеша Result $out_summ = "0.1"; // Сумма платежа в wmz $inv_id = "123"; // Номер счёта $mrh_pass2 = "uy4n2vo§3EZC6RZs"; // Пароль 2 // Формируем полученные данные в md5 хеш $my_crc = strtoupper ( md5 ( "$out_summ:$inv_id:$mrh_pass2" ) ); echo '<br />'; //Проверяем 2 хеша if ($my_crc != $crc) { echo "bad sign\n"; } // признак успешно проведенной операции // success echo "OK$inv_id\n"; И и при этом естественным образом получаются 2 разных md5 хеша
696AFF191E13FA6B2F95E80D29AEDCE5
E1127DECE358AFD01535165D48E6B9F5
Ответ проверки bad sign
Как так может быть чтобы они оказались одинаковыми? или я что то не правильно понял?
Подскажите как правильно должно быть что я упустил?
|