美文网首页JavaScript基础教程程序员
关于前端微信分享jssdk config:invalid sig

关于前端微信分享jssdk config:invalid sig

作者: StevenTang | 来源:发表于2017-08-25 11:11 被阅读49次

    关于前端微信分享jssdk config:invalid signature 签名错误


    这几天刚刚把微信写完,说出来你可能不信,我写个微信分享一起用了2个礼拜。中间各种心酸,一开始后台老大哥帮我把后台签证给写好了,不过不起作用,想叫他在改,但是后面公司有个项目急着上线,没有空,产品催的又急,自己没有办法,开始自己处理后台.
    好了,话不多说,正文开始

    首先微信的的东西看微信SDK文档是肯定的

    因为我是前端,就只写关于前端的代码了,后台我也涉及了,在文章的最后我会附上我自己改的后台代码

    $.ajax({
            type: "post",
            dataType: 'json',
            url: '接口链接',
            data: {
                url: urld
            },
            
            success: function(conf) {
                console.log(conf);
                configWxAPI(conf);
                var conf = conf.url;
                return conf;
            
    
            },
            error: function(event, XMLHttpRequest, ajaxOptions, thrownError) {
                
            }
        });
    
        //配置权限
        function configWxAPI(conf) {
            wx.config({
                debug: false, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端
                //打开,参数信息会通过log打出,仅在pc端时才会打印
                appId: "唯一的ID", //必填,公众号的唯一标识
                timestamp: conf.timestamp, //必填,生成签名的时间戳
                nonceStr: conf.nonceStr, //必填,生成签名的随机串
                signature: conf.signature, //必填,签名
                jsApiList: [
                    
                    'onMenuShareTimeline',
                    'onMenuShareAppMessage',
                    'onMenuShareQQ',
                    'onMenuShareWeibo',
                    'previewImage',
                    
                ] //必填,需要使用的JS接口列表,也就是配置你想使用的调用接口
            });
    //      微信分享
            wx.ready(function() {
              //分享的图片
                var imgUrl = ""
                          //分享朋友
                wx.onMenuShareAppMessage({
                    title: "标题",
                    desc: "内容简介",
                    link: "分享链接",
                    imgUrl: imgUrl,
                    success: function() {
                        //分享成功之后执行的回调函数
                    },
                    cancel: function() {
                        //取消分享之后执行的回调函数
                    }
                });
                                 //分享朋友圈
                wx.onMenuShareTimeline({
                    title: "标题",
                    desc: "内容简介",
                    link: "分享链接",
                    imgUrl: imgUrl,
                    success: function() {
                        //分享成功之后执行的回调函数
                    },
                    cancel: function() {
                        //取消分享之后执行的回调函数
                    }
                });
            });
            wx.error(function(conf) {
                console.log(conf);
                // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
            });
        };
    

    后台部分的代码

    public function getSignPackage() {
        
        if(IS_POST){
            if(!I('post.url')) $this->ajaxReturn(array('status'=>0,'msg'=>'请输入当前的URL'));
            $jsapiTicket = $this->getJsApiTicket();
              //这句代码微信SDK上面没有介绍,但是用来签证的url里面就&后面会自动带有&,所以这里用了php的字符串替换
            $url =  str_replace("&","&",I('post.url'));
    
            $timestamp = time();
            $nonceStr = $this->createNonceStr();
        
            // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    
          #####个人理解为,微信的签证是需要随机字符串+url+时间+getticket接口获取的 JSAPI 调用凭证   编码生成的(不知道对不对)
    
    这里的时间还有随机字符串传给和前台的一样,还有url链接是由前台传给后台,在由后台通过这个url进行下面的编码
    记住传给后台的url和当前链接要一模一样,记住传给后台的url和当前链接要一模一样,记住传给后台的url和当前链接要一模一样,
        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    
        $signature = sha1($string);
    
        $signPackage = array(
        "jsapiTicket" =>$jsapiTicket,
          "appId"     => $this->appId,
          "nonceStr"  => $nonceStr,
          "timestamp" => $timestamp,
          "url"       => $url,
          "signature" => $signature,
          "rawString" => $string
        );
        $this->ajaxReturn($signPackage);
    
    
    #####之后就通过微信的验证OK之后,就可以了分享了 或者调用别的微信接口了

    相关文章

      网友评论

        本文标题:关于前端微信分享jssdk config:invalid sig

        本文链接:https://www.haomeiwen.com/subject/arxddxtx.html