參數(shù)都沒問題的,但是還是會(huì)報(bào)"config:invalid signature"!求解!!
appId,timestamp,nonceStr,signature我在微信公眾號(hào)那兒驗(yàn)證了的。跟我得到的結(jié)果是一樣的,下面代碼:
//獲取WxAccessToken
? ? function getWxAccessToken(){
? ? ? ? //1.請(qǐng)求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.設(shè)置參數(shù)
? ? ? ? curl_setopt($ch,CURLOPT_URL,$url);
? ? ? ? curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
? ? ? ? //4.調(diào)用接口
? ? ? ? $res = curl_exec($ch);
? ? ? ? //5.關(guān)閉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.設(shè)置curl的參數(shù)
? ? ? ? curl_setopt($ch,CURLOPT_URL,$url);
? ? ? ? curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
? ? ? ? //3.采集
? ? ? ? $output = curl_exec($ch);
? ? ? ? //4.關(guān)閉
? ? ? ? curl_close($ch);
? ? ? ? return json_decode($output,true);
? ? }
//獲取jsapi_ticket全局票據(jù)
? ? 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;
? ? }
//獲取指定位數(shù)隨機(jī)碼
? ? 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票據(jù)
? ? ? ? $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."×tamp=".$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: '**************', // 必填,公眾號(hào)的唯一標(biāo)識(shí)
? ? ? ? ? ? ? ? timestamp: '{$timestamp}', // 必填,生成簽名的時(shí)間戳
? ? ? ? ? ? ? ? nonceStr: '{$noncestr}', // 必填,生成簽名的隨機(jī)串
? ? ? ? ? ? ? ? signature: '{$signature}',// 必填,簽名,見附錄1
? ? ? ? ? ? ? ? jsApiList: [
? ? ? ? ? ? ? ? 'onMenuShareTimeline',
? ? ? ? ? ? ? ? 'onMenuShareAppMessage'
? ? ? ? ? ? ? ? ] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
? ? ? ? ? ? });
? ? ? ? ? ? wx.ready(function(){
? ? ? ? ? ? ? ? wx.onMenuShareTimeline({
? ? ? ? ? ? ? ? ? ? title: 'test1', // 分享標(biāo)題
? ? ? ? ? ? ? ? ? ? link: 'http://www.baidu.com', // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁面對(duì)應(yīng)的公眾號(hào)JS安全域名一致
? ? ? ? ? ? ? ? ? ? imgUrl: 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png', // 分享圖標(biāo)
? ? ? ? ? ? ? ? ? ? success: function () {?
? ? ? ? ? ? ? ? ? ? ? ? // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? cancel: function () {?
? ? ? ? ? ? ? ? ? ? ? ? // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? wx.onMenuShareAppMessage({
? ? ? ? ? ? ? ? ? ? title: 'test1', // 分享標(biāo)題
? ? ? ? ? ? ? ? ? ? desc: 'test baidu', // 分享描述
? ? ? ? ? ? ? ? ? ? link: 'http://www.baidu.com', // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁面對(duì)應(yīng)的公眾號(hào)JS安全域名一致
? ? ? ? ? ? ? ? ? ? imgUrl: 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png', // 分享圖標(biāo)
? ? ? ? ? ? ? ? ? ? type: 'link', // 分享類型,music、video或link,不填默認(rèn)為link
? ? ? ? ? ? ? ? ? ? dataUrl: '', // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
? ? ? ? ? ? ? ? ? ? success: function () {?
? ? ? ? ? ? ? ? ? ? ? ? // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? cancel: function () {?
? ? ? ? ? ? ? ? ? ? ? ? // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? });
? ? ? ? ? ? });
? ? ? ? ? ? wx.error(function(res){
? ? ? ? ? ? ? ??
? ? ? ? ? ? });
? ? ? ? </script>
2017-09-06
看來還是得自問自答么?哎。
建議動(dòng)態(tài)獲取url地址,手寫不注意的話就會(huì)錯(cuò)?。。。?!
找了一大圈問題所在,結(jié)果還是url出的問題。
原來的url(手寫,浪):"http://**********/index.php/Index/share.html"
正確的url(動(dòng)態(tài)獲取,穩(wěn)):$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
我的問題就是出在index.php這兒,我的默認(rèn)是隱藏的,所以正常情況就沒有index.php。結(jié)果沒動(dòng)腦子看著視頻那樣就直接加上去了,奉勸大家,動(dòng)腦:-D