收藏
回答

微信小程序 wx.scanCode 鉴权失败,permission denied

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.scanCode 微信安卓客户端 8.0.24 "Client:" "Android 10, WeChat 8.0.24.2180"

在小程序中调用 wx.scanCode 鉴权失败。

调用 wx.scanCode API,同样的代码,在微信小程序中会在显示 config ok 之后显示 permission denied。并且无法使用扫码功能。

在微信内置网页中打开,可以在 config ok 信息打印之后正常使用扫码功能。

这边目前尝试了大部分安卓手机,基本上 100% 复现。

最大的问题是,半个多月前进行过测试还好好的,最近一段时间突然大规模发生问题



最后一次编辑于  2022-07-04
回答关注问题邀请回答
收藏

4 个回答

  • L Y L
    L Y L
    2022-07-05

    简单记录下这个这个问题的解决方式,也许对后续遇到这个问题的人有帮助

    背景

    在最近的微信更新后,安卓机,小程序中嵌入 web-view 的页面使用微信 JS SDK 会产生如下奇怪的现象,`wx.confg` 调用成功,通过设置 debug 参数为 true 看到打印的信息能够确认 config 成功。鉴权成功后调用 JS SDK 的 API 仍然报错,一般的报错为 `permission denied` 。该问题只会在微信小程序的 web-view 页面中发生,在其他环境(微信内置浏览器、企业微信内置浏览器)均不会发生。

    解决办法

    通过尝试,发现在 web-view 中需要使用 wx.config 和 JS SDK 的页面只要在当前路由刷新一下页面,js 代码里面执行一下 `location.reload()` 方法,就可以正常使用了。可以通过判断当前是否为微信小程序中来判断是否执行刷新当前页面的逻辑。下面贴一段代码。

    if (this.thidPartyPlatform.MINIPROGRAM) { // 判断当前环境是否为小程序
          const stopReloadKey = 'stop_reload';
          const stopReload = this.storageHelper.get(stopReloadKey); // 设置一个标识,防止页面一直 reload 死循环
          if (!stopReload) {
            this.storageHelper.set(stopReloadKey, 'true');
            location.reload();
            return;
          } else {
            this.storageHelper.delete(stopReloadKey);
          }
        }
    


    比较奇怪的点是,这种需要刷新来确保鉴权成功的情况,一般都是传递了不正确的 url 来获取鉴权的签名参数,但是微信这次的更新后的表现是,传递的 url 参数正确,并且也看到了 `config:ok` 的信息,仍然不能使用 SDK 中的 API。猜不出来微信做了啥更改,又只能靠自己的猜测来 hack 这次问题了

    2022-07-05
    有用 2
    回复 1
    • Wentz
      Wentz
      2022-07-07
      @官方的技术人员,快出来挨打,一周了这个问题还是没有修好,影响非常大,层主给出了非常详尽的复现背景,请官方人员不要再推脱、说些没用的话,尽快修复
      2022-07-07
      回复
  • Daisy
    Daisy
    2023-10-13

    测试手机要扫码关注一下相应的公众号就可以了

    2023-10-13
    有用
    回复
  • 时光如水
    时光如水
    2022-07-04

    微信版本是不是8.0.24?

    2022-07-04
    有用
    回复 12
    • 时光如水
      时光如水
      2022-07-04
      webview 嵌套在小程序 同样出现此问题 官网在哪里呢
      2022-07-04
      回复
    • L Y L
      L Y L
      2022-07-04回复时光如水
      是的,就是 8.0.24
      2022-07-04
      回复
    • L Y L
      L Y L
      2022-07-04
      最近才出现的这个问题,之前都没有这个问题。
      2022-07-04
      1
      回复
    • 时光如水
      时光如水
      2022-07-04
      找到解决方案了,刷新一下这个报错的页面就可以了,我们就是这么解决的..
      2022-07-04
      1
      回复
    • L Y L
      L Y L
      2022-07-04回复时光如水
      是在代码里面直接 `location.reload` 吗?
      2022-07-04
      回复
    查看更多(7)
  • Lipeng
    Lipeng
    2022-07-04

    微信申请授权使用摄像头时没同意?

    2022-07-04
    有用
    回复 1
    • L Y L
      L Y L
      2022-07-04
      已开启,而且上面的的信息中有指出,只在小程序中会出现这个问题,在微信的内置网页中是没有这个问题的
      2022-07-04
      回复
登录 后发表内容