Достаточно частый вопрос, который задают мне при работе с Perfect money и на котором я сначала не заострил внимание — это сверка MD5 подписи с сервера при оплате через Perfect Money.
Нужно удостовериться, что присланный POST запрос верен и провести какие-то действия.
В чём заключается невнимательность при настройке? Вроде верно задаёте альтернативную фразу в аккаунте perfect money. НО ВАЖНО, для сверки необходимо использовать не просто ALTERNATE_PHRASE, а его ХЕШ – причём в заглавных буквах.
В примере https://perfectmoney.com/acct/samples/sample_status.txt это написано, но невнимательный читатель обычно убирает закомментированный текст и от этого платежи будут идти неверно.
$PassHash = strtoupper(md5(‘your_passphrase’));
$string =
$_POST[‘PAYMENT_ID’].':’.
$_POST[‘PAYEE_ACCOUNT’].':’.
$_POST[‘PAYMENT_AMOUNT’].':’.
$_POST[‘PAYMENT_UNITS’].':’.
$_POST[‘PAYMENT_BATCH_NUM’].':’.
$_POST[‘PAYER_ACCOUNT’].':’.
$PassHash.':’.
$_POST[‘TIMESTAMPGMT’];
$hash = strtoupper(md5($string));
if ($hash == $_POST[‘V2_HASH’]) {
действия
}
Строго не рекомендую держать хеш в открытом виде, так чтоб на будущее знали.
Автор красавец, сам же и ошибся. Вот правильный вариант:
$PassHash = strtoupper(md5(‘your_passphrase’));
$string =
$_POST[‘PAYMENT_ID’].’:’.
$_POST[‘PAYEE_ACCOUNT’].’:’.
$_POST[‘PAYMENT_AMOUNT’].’:’.
$_POST[‘PAYMENT_UNITS’].’:’.
$_POST[‘PAYMENT_BATCH_NUM’].’:’.
$_POST[‘PAYER_ACCOUNT’].’:’.
$PassHash.’:’.
$_POST[‘TIMESTAMPGMT’];
$hash = strtoupper(md5($string));
if ($hash == $_POST[‘V2_HASH’]) {
действия
}
Все верно, опечатка была.