参数都没问题的,但是还是会报"config:invalid signature"!求解!!

来源:2-2 分享接口实现二

FireTang

2017-09-06 10:26

appId,timestamp,nonceStr,signature我在微信公众号那儿验证了的。跟我得到的结果是一样的,下面代码:

//获取WxAccessToken

    function getWxAccessToken(){

        //1.请求url地址

        $appid='******************';

        $appsecret='*******************************************';

        $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;

        //2.初始化

        $ch = curl_init();

        //3.设置参数

        curl_setopt($ch,CURLOPT_URL,$url);

        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

        //4.调用接口

        $res = curl_exec($ch);

        //5.关闭curl

        curl_close($ch);

        if(curl_errno($ch)){

            var_dump(curl_error($ch));

        }

        $arr=json_decode($res,true);


        return $arr;        

    }

public function http_curl($url){

        //1.初始化curl

        $ch = curl_init();

        //2.设置curl的参数

        curl_setopt($ch,CURLOPT_URL,$url);

        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

        //3.采集

        $output = curl_exec($ch);

        //4.关闭

        curl_close($ch);

        return json_decode($output,true);

    }


//获取jsapi_ticket全局票据

    function getJsApiTicket(){

        //如果session中保存有效的jsapi_ticket

        if($_SESSION['jsapi_ticket_expire_time'] > time() && $_SESSION['jsapi_ticket']){

            $jsapi_ticket = $_SESSION['jsapi_ticket'];

        }else{

            $access_token = $this->getWxAccessToken();

            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token['access_token']."&type=jsapi";

            $res = $this->http_curl($url);

            $jsapi_ticket=$res['ticket'];

            $_SESSION['jsapi_ticket']=$jsapi_ticket;

            $_SESSION['jsapi_ticket_expire_time']=time()+7000;

        }

        return $jsapi_ticket;



    }

//获取指定位数随机码

    function getRandCode($length){

        $str = array_merge(range('a','z'),range('A','Z'),range('0','9')); 

        shuffle($str); 

        if($length){

            $str = implode('',array_slice($str,0,$length));

        }else{

            $str = implode('',array_slice($str,0,16));

        }

         

        return $str; 

    }


//分享朋友圈

    function share(){

        //1.获取jsapi_ticket票据

        $jsapi_ticket = $this->getJsApiTicket();

        $timestamp=time();

        $noncestr=$this->getRandCode(16);

        $url="http://*********/index.php/Index/share.html";

        // //2.获取signature

    $signature="jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."&timestamp=".$timestamp."&url=".$url;

        $signature=sha1($signature);

        $this->assign('name','baidu');

        $this->assign('timestamp',$timestamp);

        $this->assign('noncestr',$noncestr);

        $this->assign('signature',$signature);

        $this->display('Index:share');

    }



HTML—JS部分:

<script>

            wx.config({

                debug: true, 

                appId: '**************', // 必填,公众号的唯一标识

                timestamp: '{$timestamp}', // 必填,生成签名的时间戳

                nonceStr: '{$noncestr}', // 必填,生成签名的随机串

                signature: '{$signature}',// 必填,签名,见附录1

                jsApiList: [

                'onMenuShareTimeline',

                'onMenuShareAppMessage'

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

            });

            wx.ready(function(){

                wx.onMenuShareTimeline({

                    title: 'test1', // 分享标题

                    link: 'http://www.baidu.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

                    imgUrl: 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png', // 分享图标

                    success: function () { 

                        // 用户确认分享后执行的回调函数

                    },

                    cancel: function () { 

                        // 用户取消分享后执行的回调函数

                    }

                });


                wx.onMenuShareAppMessage({

                    title: 'test1', // 分享标题

                    desc: 'test baidu', // 分享描述

                    link: 'http://www.baidu.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

                    imgUrl: 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png', // 分享图标

                    type: 'link', // 分享类型,music、video或link,不填默认为link

                    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空

                    success: function () { 

                        // 用户确认分享后执行的回调函数

                    },

                    cancel: function () { 

                        // 用户取消分享后执行的回调函数

                    }

                });

            });


            wx.error(function(res){

                

            });

        </script>


写回答 关注

1回答

  • FireTang
    2017-09-06 12:02:58

    看来还是得自问自答么?哎。

    建议动态获取url地址,手写不注意的话就会错!!!!!

    找了一大圈问题所在,结果还是url出的问题。

    原来的url(手写,浪):"http://**********/index.php/Index/share.html"

    正确的url(动态获取,稳):$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

    我的问题就是出在index.php这儿,我的默认是隐藏的,所以正常情况就没有index.php。结果没动脑子看着视频那样就直接加上去了,奉劝大家,动脑:-D

PHP微信公众平台开发高级篇—微信JS-SDK

JS-SDK微信交互引擎,诸多功能提供更优质的网页体验

33774 学习 · 75 问题

查看课程

相似问题