Сложно сказать в чём у вас ошибка, так как вы не предоставили код. Вероятно, криво составили QR, раз уж ошибка возникает при его сканировании. Более подробно о том как нужно составлять урл для QR-кода можно прочитать в
вики.
Я внедрил Google Authenticator в свой проект без каких-либо проблем. Использую пакет
sonata-project/google-authenticator.
Генерация кода:
$g = new \Google\Authenticator\GoogleAuthenticator();
$secret = $g->generateSecret();
echo '<img src="https://chart.googleapis.com/chart?'
.'cht=qr&chl=otpauth://totp/mysite%3Fsecret%3D'
.$secret.'&chs=200x200&chld=L|0" />';
Значение $secret сохраняется в БД и привязано к конкретному юзеру.
Проверка OTP:
$g = new \Google\Authenticator\GoogleAuthenticator();
if ($g->checkCode($secret, $code)) {
echo 'Welcome!'
} else {
echo 'Wrong code';
}
Примеры кода приведены для библиотеки версии 1.0.2.
Важный момент - время на сервере и на телефонах должно совпадать, чтобы генерируемые OTP совпадали. Поэтому сервер синхронизируется по протоколу NTP. С телефонами сложнее. Можно в настройках системы установить синхронизацию часов телефона с временем из GSM сети (для любых платформ), либо в настройках приложения Google Authenticator (в android версии есть, в iOS версии нет, про другие платформы не в курсе).