鍍金池/ 問答/PHP  網(wǎng)絡(luò)營(yíng)銷  HTML/ 微信開發(fā)jssdk分享到朋友圈,彈出config:invalid signatu

微信開發(fā)jssdk分享到朋友圈,彈出config:invalid signature,求解答,一直搞不懂。

最近在搗鼓jssdk
我先是用了微信測(cè)試號(hào)
一點(diǎn)問題都沒
顯示config:OK

但是我換成認(rèn)證訂閱號(hào)
并且配置了js安全域名問www.likeyunba.com
然后更換認(rèn)證訂閱號(hào)的appid和appscrice之后

就彈出config:invalid signature

clipboard.png

我就覺得奇怪
測(cè)試號(hào)都沒問題
那么是不是說明代碼沒問題

換成認(rèn)證的訂閱號(hào)
就不行了

有人遇到過嗎?
代碼如下

<?php
  //獲取微信access_token
 function getaccess_token(){
    //appid與appsecret改成你自己的
    $appid = '替換成自己的APPID';
    $appsecret = '替換成自己的APPSECRICE';
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
    $data = curl_exec($ch);
    curl_close($ch);
    $data = json_decode($data,true);
    return $data['access_token'];
 }
//獲取jsapi_ticket
 function getjsapi_ticket(){
  $access_token = getaccess_token();
  $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={$access_token}";
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
  $data = curl_exec($ch);
  curl_close($ch);
  $data = json_decode($data,true);
  return $data['ticket'];
 }
 //默認(rèn)生成16位隨機(jī)數(shù)
 function createNonceStr($length = 16) {
     $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     $str = "";
     for ($i = 0; $i < $length; $i++) {
       $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
     }
     return $str;
   } 
//獲取要排序的signature相關(guān)代碼
  function getSignPackage() {
    $jsapiTicket = getjsapi_ticket();
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $timestamp = time();
    $nonceStr = createNonceStr();
 
    // 這里參數(shù)的順序要按照 key 值 ASCII 碼升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    $signature = sha1($string);
    $signPackage = array(
      "appId"     => '替換成自己的APPID',
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature
    );
    return $signPackage; 
  }
  $signPackage = getSignPackage();
?>
<body>
<!--此處是前端頁面代碼-->
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
  wx.config({
    debug: false,
    appId: '<?php echo $signPackage["appId"];?>',
    timestamp: <?php echo $signPackage["timestamp"];?>,
    nonceStr: '<?php echo $signPackage["nonceStr"];?>',
    signature: '<?php echo $signPackage["signature"];?>',
    jsApiList: [
      // 所有要調(diào)用的 API 都要加到這個(gè)列表中
      'onMenuShareTimeline',
      'onMenuShareAppMessage'
    ]
  });

  //分享到朋友圈
  wx.ready(function () {
      wx.onMenuShareTimeline({
        title: '微信圣誕帽頭像生成器,別@微信官方了',
        link: 'http://www.likeyunba.com/pan/res/1514069421.html',
        imgUrl: 'http://www.likeyunba.com/pan/res/1514050575.jpg',
        success: function (res) {
           window.location.; // 分享成功后跳轉(zhuǎn)網(wǎng)頁代碼 },
        },
        cancel: function (res) {
          alert('干嘛要取消呢?');
        },
        fail: function (res) {
          alert(JSON.stringify(res));
        }
      })
      
          //分享給朋友
      wx.onMenuShareAppMessage({
            title: "微信圣誕帽頭像生成器,別@微信官方了", // 分享標(biāo)題
            desc: "簡(jiǎn)簡(jiǎn)單單就可以生成圣誕帽頭像,各種帽子任你選!", // 分享描述
            link: "http://www.likeyunba.com/pan/res/1514069421.html", // 分享鏈接
            imgUrl: "http://www.likeyunba.com/pan/res/1514050575.jpg", // 分享圖標(biāo)
            type: '', // 分享類型,music、video或link,不填默認(rèn)為link
            dataUrl: '', // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
            success: function () { 
                window.location.; // 分享成功后跳轉(zhuǎn)網(wǎng)頁代碼 },
            },
            cancel: function () { 
                 alert('干嘛要取消呢?');
            }
        });

  });

</script>
</html>

懂的人麻煩復(fù)制我的代碼幫忙測(cè)試解決一下
上面兩個(gè)部分需要修改

clipboard.png

clipboard.png

回答
編輯回答
乖乖瀦

timestam 是沒帶引號(hào)嗎?還是編輯器的問題

2018年6月22日 01:12
編輯回答
笑浮塵

個(gè)人覺得就這兩句生成的url和你訪問的url不一致引起的, 比如服務(wù)器有端口號(hào)有參數(shù)之類的

 $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
 $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

可以裝個(gè)微信開發(fā)工具, 將你生成的url輸出對(duì)比看看是否一致

2017年2月21日 14:35
編輯回答
情已空

把生成的內(nèi)容console出來呀,然后掛個(gè)vConsole就能看了。個(gè)人懷疑是在讀或者寫那個(gè)json緩存時(shí),沒有權(quán)限導(dǎo)致的錯(cuò)誤……所以還是推薦服務(wù)器上單搞個(gè)目錄放簽名程序,每次用時(shí)ajax拿簽名就好。這樣所有項(xiàng)目都可以用同一份緩存,避免多個(gè)項(xiàng)目同時(shí)跑時(shí)重復(fù)簽名可能造成的錯(cuò)誤。
另外多說一句,jssdk已經(jīng)1.2.0啦,用老版本的小心iOS有坑~

2018年4月8日 12:57
編輯回答
苦妄

說實(shí)話我也好想試試,哥們認(rèn)證怎么搞得,小弟一直用在測(cè)試號(hào),好想搞個(gè)真的試試

2018年4月3日 22:55