收藏
回答

微信小程序登录,服务端解密有几率-41003

问题模块
API和组件


服务器是将unionId作为唯一id的,需要使用WXBizDataCrypt.decryptData将encryptedData解密出来。不过在调用WXBizDataCrypt.decryptData的时候总是又会30%的几率解密失败,返回errorCode -41003


服务器端语言:PHP (Laravel框架)


报错为:openssl_decrypt(): IV passed is only 15 bytes long…ects an IV of precisely 16 bytes, padding with \0

最后一次编辑于  2017-12-23  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

9 个回答

  • 枫儿
    枫儿
    2017-12-23

    官方大人们,有没有人出来回答一下啊,急急急

    2017-12-23
    赞同
    回复
  • 枫儿
    枫儿
    2017-12-23

    补充:每次小程序获取到iv的值中间有空格的,就会出错

    成功的iv例子:$iv = "MLbq\/WIGb1YHk8f0GWmzLA=="
    出错的iv例子:$iv = "shNiHyqyaVamI Fe\/YHUjw=="


    2017-12-23
    赞同
    回复
  • Zoelov
    Zoelov
    2018-03-13

    怎么解决的?

    2018-03-13
    赞同
    回复 2
    • 枫儿
      枫儿
      2018-08-30

      总的来说就两点

      1,小程序端 iv、decryptData  等包含特殊字符的字段发送服务器encodeURIComponent

      2,wx.login 获取 code,调用时间稍微提前调用会

      2018-08-30
      赞同
      回复
    • 枫儿
      枫儿
      2018-08-30

      2018-08-30
      赞同 11
      回复
  • coder2017
    coder2017
    2018-05-04

    楼主好,可以上一段代码吗?现在iv是通过<button>控件的open-data才能获取到,encodeURIComponent()方法是向服务端发送request前调用呢还是在服务端收到iv后再调用。

    2018-05-04
    赞同
    回复 3
    • 枫儿
      枫儿
      2018-06-01

      现在小程序官方已经改成了<button>控件的open-data,那么我现在大概流程就是,用户点击button -> 绑定用户事件里拿到 iv和encryptedData -> 调用wx.login拿到code,然后将三个参数都encodeURIComponent后网络请求发给服务器

      2018-06-01
      赞同
      回复
    • 刘小军Lebus
      刘小军Lebus
      2018-07-08

      你好。

      我用encodeURIComponent之后,‘==’被换成了%3D%3D,导致iv的长度不对,产生了41002的错误。

      我之前也是跟你差不多,有几率出现41003,怎么说呢,其实还是有规律41003的:第一次登陆都失败,第二次都成功,然后删除登录态之后立刻登陆又成功,但是过一段时间之后再登陆又41003了

      2018-07-08
      赞同
      回复
    • 枫儿
      枫儿
      2018-08-05回复刘小军Lebus

      encodeURIComponent就是将字符串进行URLEncode编码,当然是转成如%3D%3D,服务器接收到后将其URLDecode解码还原为原字符串

      2018-08-05
      赞同 11
      回复