收藏
回答

wx.chooseImage,wx.scanQRCode安卓调起正常,苹果为什么无效果?

扫描身份证需要先调起获取wx.chooseImage功能

安卓手机正常使用,模拟器正常使用

扫描二维码需要调取wx.scanQRCode功能

安卓手机正常使用,模拟器提示有权限

为了看是不是权限问题,我专门装了vConsole并接入了wx.checkJsApi(提示的都是true

但是苹果就是没效果。根据一篇2018年的提问,让注释掉

// sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
// sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有

注释掉后,依旧还是无效果

以下是我的代码

// 点击扫描患者身份证
onIdCard() {
    let _this = this
    // 拍照或从手机相册中选图
    this.$wx.chooseImage({
        count: 1, // 默认9
        // sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
        // sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
        success: function (res) {//接口调用成功时执行的回调函数
            let localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
            if (localIds.length != 0) {
                // 加载提示
                showLoadingToast({
                    message: '加载中...',
                    forbidClick: true,
                    overlay: true,
                    duration: 3000
                });
                console.log(localIds[0])
                _this.getImgData(localIds[0])
            }
        },
        fail: function (res) {//接口调用失败时执行的回调函数
            console.log("调取相机或拍照失败!")
            console.log(res)
        }
    });
},
// 将图片转换为base64
getImgData(localId) {
    console.log(localId)
    let _this = this
    this.$wx.getLocalImgData({
        localId: localId, // 图片的localID
        success: function (res) {
            let localData = res.localData; // localData是图片的base64数据,可以用img标签显示
            if (localData.indexOf('data:image') != 0) {
                //判断是否有这样的头部
                localData = 'data:image/jpeg;base64,' +  localData
            }
            //第一个替换的是换行符
            //第二个替换的是图片类型,因为在IOS机上测试时看到它的图片类型时jgp
            localData = localData.replace(/\r|\n/g, '').replace('data:image/jgp', 'data:image/jpeg')
            _this.addedPreviewFile = localData;
            if (localData) {
                // orc校验
                postOcrIdCard(_this.$axios, _this.addedPreviewFile).then(res => {
                    if (res.data.code == 200) {
                        let result = res.data.data
                        _this.idCardMessage.age = result.age
                        _this.idCardMessage.address = result.address
                        _this.idCardMessage.birthday = result.birthday
                        _this.idCardMessage.doctorId = localStorage.getItem('doctorId')
                        _this.idCardMessage.idCardNo = result.idCardNo
                        _this.idCardMessage.name = result.name
                        _this.idCardMessage.patientId = ''
                        _this.idCardMessage.sex = result.sex
                        console.log(toRaw(_this.idCardMessage))
                        postBindRecordIdCard(_this.$axios,_this.idCardMessage).then( res =>{
                            console.log(res)
                            if(res.data.code = 200){
                                showSuccessToast(res.data.data);
                            }else{
                                showFailToast(res.data.msg);
                            }
                        })
                    }
                    // 关闭加载
                    closeToast();
                })
            }
        },
        fail: function (res) {
            console.log("获取base64失败!")
            console.log(res)
        }
    });
},
// 点击扫描患者二维码
onQrCode(){
    let _this = this
    // 扫描患者二维码
    this.$wx.scanQRCode({
        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
        scanType: ["qrCode"], // 默认二维码
        success: function (res) {
            let result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
            console.log(result)
            postBindRecordQr(_this.$axios, {
                doctorId: localStorage.getItem('doctorId'),
                patientId: result
            }).then( res =>{
                console.log(res)
                if(res.data.code = 200){
                    showSuccessToast(res.data.data);
                }else{
                    showFailToast(res.data.errMsg);
                }
            })
        },
        error:function (res){
            console.log('调取扫一扫功能失败!')
            console.log(res)

        }
    });
},


求大神帮忙解决下,之前还以为是测试公众号的问题,上到正式环境了还不行,要上线啊。加急加急!

回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    2023-07-11

    你好,麻烦提供下机型,微信版本号和复现链接

    2023-07-11
    有用
    回复
  • 白如风🦊
    白如风🦊
    2023-07-11

    刚刚偶然点击了一下右上角的刷新页面功能,刷新之后,功能是正常的。但是重新进来,依旧会有问题。

    2023-07-11
    有用
    回复 2
    • 白如风🦊
      白如风🦊
      2023-07-11
      又偶然发现config又报成功,又报失败,顺着config:invalidsignature找到了解决方案
      在进入需要注入config权限页面之前,使用window.location.href = ‘你要进入的页面地址’
      就解决了
      2023-07-11
      1
      回复
    • RunningCoder
      RunningCoder
      02-26
      我这边也遇到类似的问题,使用的是 vue,登录页登录后如果是通过 vue router 跳转到扫码按钮所在页面,此时点击按钮就不会触发回调(iOS),但如果改成 window.location.href = ‘你要进入的页面地址’ 后就会正确触发
      02-26
      回复
登录 后发表内容
问题标签