Я пытаюсь реализовать алгоритм аутентификации php для WeChat, код был скопирован из их документации здесь: https://mp.weixin.qq.com/wiki?t=resource/res_main&ID = mp1421135319&маркер =&Ланг = zh_CN
По сути, это служба, которая отправляет несколько параметров и хешированный секрет и сравнивает полученный результат с токеном на сервере.
Я пытался сделать аутентификацию, но она каждый раз терпела неудачу. Я искал запрос, извлек параметры и попытался отследить код.
$signature = '000a2ad000ce0000a8325206deba18d04b602085';
$timestamp = '1477497908';
$nonce = '876122376';
$token = 'spotops';$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
echo '1: '.$tmpStr . "\r\n";
echo '2: ' . $signature ;
Удивительно — я получил такой результат:
1: 503a2ad085ce4386a8325206deba18d04b602085
2: 000a2ad000ce0000a8325206deba18d04b602085
Как видите, только вторая половина строки одинакова, а первые 16 символов различны.
Это, как вы можете догадаться, очень расстраивает, так как функция аутентификации всегда будет неудачной.
Я тестировал один и тот же код на другом сервере (PHP 5.6.24, первый, насколько я помню, запускает 5.6.13), и я получаю там правильный ответ.
Похоже, что я что-то упустил, и поскольку другая часть строки одинакова, я могу только предположить, что это что-то с функцией Sha1 — но я не уверен, что.
Будем благодарны за любую помощь или идею, предпочтительно такую, которая не требует обновления версии PHP на сервере.
Задача ещё не решена.
Других решений пока нет …