zoukankan      html  css  js  c++  java
  • 调用微信公众平台扫一扫示例及解决接口报错 { "errMsg": "config:invalid signature" }

    一、解决报错问题

    单从报错信息 invalid signature 就可以看出是 签名signature 有问题,

     

    查了很多资料,终于知道了问题点,

    后台让我直接调接口是不对的,签名是根据请求接口的页面url来生成的,所以url要动态地传给后台,而且这个页面url还要除去'#'hash部分,可用 location.href.split('#')[0] 获取,需不需要 encodeURIComponent 进行编码询问后台,有的需要有的不需要。

    eg:

        var pageUrl ={
            url:(window.location.href).split('#')[0]
        };
        $.ajax({
            url:"/get-sign"+"?action=get_sign_package",
            type:"post",
            data:pageUrl,
            success:function(data){
                var params = JSON.parse(data);
                /*配置 wx.config 参数*/
                wx.config({
                    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                    appId: params.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
                    timestamp: params.timestamp, // 必填,生成签名的时间戳
                    nonceStr: params.nonceStr, // 必填,生成签名的随机串
                    signature: params.signature,// 必填,签名,见附录1
                    jsApiList: [
                        'checkJsApi',
                        'scanQRCode'
                    ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
            }
        });

    经过上述修改,就能成功取到需要的参数。

    二、调用微信扫一扫

    经过上面成功配置微信参数,你就可以在你想使用微信接口的地方直接使用了,以扫一扫为例:

    wx.ready(function(){
            wx.checkJsApi({  //判断当前客户端版本是否支持指定JS接口
                jsApiList: [
                    'scanQRCode'
                ],
                success: function (res) {// 以键值对的形式返回,可用true,不可用false。如:{"checkResult":{"scanQRCode":true},"errMsg":"checkJsApi:ok"}
                    if(res.checkResult.scanQRCode != true){
                        alert('抱歉,当前客户端版本不支持扫一扫');
                    }
                },
                fail: function (res) { //检测getNetworkType该功能失败时处理
                    alert('checkJsApi error');
                }
            });
    
        });
    
        /*处理失败验证*/
        wx.error(function (res) {
            alert("share error: " + res.errMsg);
        });

    如果是事件触发调用接口的话,就把对应调用写在事件里面:

    $(document).on('click','#scanQRCode',function(){
            wx.scanQRCode({
                needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                success: function (res) {
                    scanSuc(res);  // 扫描成功的回调函数
                },
                error: function(res){
                    if(res.errMsg.indexOf('function_not_exist') > 0){
                        alert('版本过低请升级')
                    }
                }
            });
        });
  • 相关阅读:
    Android 4编程入门经典—开发智能手机与平板电脑应用
    硅谷产学研的创新循环
    用集群实现网格计算
    用商业模式改变世界(上)
    wrox经典红皮书:C++高级编程(第2版)
    编程导师Ivor Horton新作《Java 7入门经典》即将出版
    诚聘译者,翻译有奖!您就是引领先进技术潮流的先驱!
    定义目录的格式
    关于Q+
    Resource and Performance Tradeoffs in DelayTolerant Wireless Networks
  • 原文地址:https://www.cnblogs.com/lyr1213/p/9166982.html
Copyright © 2011-2022 走看看