我正在使用this库为Google身份验证器生成二维码。
不幸的是,当我扫描QR码时,它是不正确的。将QR码上传到this网站提供以下内容:
OTPAUTH%3A%2F%2FTOTP :0000000000000000000000000000000000000000000000000000000000000000000000000000000
在totp
之后似乎出现了问题,但输入的下一部分是%2F
,它已经出现了两次并且处理得当。
当我将输入字符串放入this在线生成器时,正确生成了QR码。
这是我的代码:
testQR :: IO ()
testQR = do
let path = "hello.pgm"
arrayToFile path
. toArray
. fromJust
. encode (fromJust $ version 1) M Alphanumeric
$ "otpauth%3A%2F%2Ftotp%2FLabel%3AJames%3Fsecret%3DGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ%26issuer%3DMyCompany"
我考虑过使用haskell-qrencode
,但即使安装了Missing C library: qrencode
,我也会收到错误qrencode
。请随意为此修改建议,而不是上述问题。
答案 0 :(得分:0)
diagrams-qrcode取得了不错的成绩。
答案 1 :(得分:0)
虽然不是我问题的直接解决方案,但以下是我最终的结果。
我正在使用haskell-qrencode
生成QR码,然后JuicyPixels
来创建PNG图像。
我的功能现在如下:
genQR :: String -> Base.String -> IO ()
genQR user s = do
let secret = mkSecretString s
url = mkURL user secret
path = "hello.png"
qr <- encodeString url Nothing QR_ECLEVEL_M QR_MODE_EIGHT True
let pixels = map (map (\case
0 -> 255 :: Pixel8
1 -> 0)) $ toMatrix qr
height = length pixels
width = length $ head pixels
pxGen = \x y -> pixels !! y !! x
image = generateImage pxGen width height
writePng path image