下面是我生成二维码的代码
public function getUrl($user, $hostname, $secret) {
$encoder = "https://chart.googleapis.com/chart?chs=200x200&chld=M%70&cht=qr&chl=";
$encoderURL = sprintf( "%sotpauth://totp/%s@%s",$encoder, $user, $hostname);
$finalEncodorURL = $encoderURL . "%26secret=". urlencode($secret);
return $finalEncodorURL;
}据推测,这将生成一个二维码,它确实生成了。但是,当我使用google authenticator应用程序扫描此代码时,它将生成一个错误
The barcode 'otpauth://totp/user4@noemail.com&secret=UOPKN6QFW3J6PW74' is not a valid authentication barcode.但是,当“手动输入”使用密钥时,它会工作,我可以使用生成的密钥登录。
我在互联网上发现有人告诉我应该对数据进行urlencode,我确实这么做了,但还是不起作用。
下面是由上面的函数生成的示例url:
https://chart.googleapis.com/chart?chs=200x200&chld=M%70&cht=qr&chl=otpauth://totp/user4@noemail.com%26secret=UOPKN6QFW3J6PW74我是不是遗漏了什么或者做错了什么?
发布于 2015-01-22 17:24:45
只需将&secret=替换为?secret= (别忘了对url进行编码)。
我也不知道这里是不是这样,但是帐户名不能有空格。如果你用安卓手机扫描就行了,但用iPhones就不行了(想想看!)
发布于 2016-12-07 19:44:38
似乎Google和IOS Authenticator应用程序都不喜欢OTP二维码中的“帐号名称”中的空格。将它们替换为-或_,或将其删除。
Windows phone应用程序允许使用空格,而我6个月前安装在Android手机上的一个版本可以正常工作。我没有机会测试IOS,但看起来IOS有一个问题。手动输入钥匙很好,但不会扫描包含空格的二维码。
发布于 2014-06-18 17:19:21
您应该对传递给图表API的数据进行完全URL编码。
otpauth%3A%2F%2Ftotp%2Fuser4%40noemail.com%26secret%3DUOPKN6QFW3J6PW74
这将确保数据被正确编码。
https://stackoverflow.com/questions/24259449
复制相似问题