评论

uniapp使用jssdk。关于安卓手机正常。苹果手机wx.config:fail

uniapp使用jssdk 调用扫一扫功能。对遇到的问题做个总结

最近在使用uniapp开始微信扫一扫功能,现在对这块做一个总结

1.解决跨越问题。后端接口通过花生壳内网穿透方式访问(http://97489ltvk625.vicp.fun/prod-api)

2.登录公众号配置js安全域名(不需要加http/https协议前缀例:97489ltvk625.vicp.fun)

3有需要微信授权登录的额外配置授权登录域名。类似2

4   导入jssdk模块 import jWeixin from 'weixin-js-sdk'

5.    初始化jssdk。这里一定要注意 jsApiList传的是对象.不是字符串.苹果手机如果传的是jsApiList:"['checkJsApi','scanQRCode'] "会导致errMsg: "config:fail。要没其他提示。我觉得这是个最大的坑。

    let url= location.href.split('#')[0] //需要携带http前缀,hash模式只需要#号前面的网址。苹果手机如果不是hash模式需要在app.vue里获得第一次访问的链接保存作为后端url参数。url不能使用encodeURIComponent() 方法

               

uni.request({

                url: 'http://97489ltvk625.vicp.fun/prod-api/wechat/initJsApiConfig.do',//这里是后台访问链接

                method: 'POST',

                data:{

                    url:url //签名使用的url参数。

                },

                header:{

                    'Content-Type' : 'application/x-www-form-urlencoded' //根据自己需求自行配置

                },

                dataType: 'json',

                success: res => {

                    let wx_co = res.data.data

    


                    // 通过config接口注入权限设置,config信息由后端提供

                    jWeixin.config({

                        debug: true, // 是否开启调试模式

                        appId: wx_co.appId, // 必填,公众号的唯一标识

                        timestamp: wx_co.timestamp, // 必填,生成签名的时间戳

                        nonceStr: wx_co.nonceStr, // 必填,生成签名的随机串

                        signature: wx_co.signature, // 必填,签名,见附录1

                        jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

//jsApiList一定一定不能用字符串包起来。否则苹果手机报错。初始化不了

                    });

                    

                    // config 信息严重失败会执行该函数

                    jWeixin.error(function (err) {

                        alert("错误信息:" + JSON.stringify(err));

                    });

                },

                fail: (err) => {

                    console.info('接口请求失败...',err)

                },

            });

6调用扫码

     jWeixin.scanQRCode({

                    needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,

                    scanType: ["barCode"], //"qrCode"二维码,"barCode"条形码

                    success: function(res)

                        var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果

                    },

                    fail(err){

                        log.info(err)

                    }

                });

最后的最后如果还是有问题。还是下载微信开发者工具。在里面输入网站可以看到报错信息和调试信息。

最后一次编辑于  11-15  
点赞 0
收藏
评论
登录 后发表内容