微信h5頁(yè)面分享之多個(gè)頁(yè)面一個(gè)公眾號(hào)

我想先放個(gè)圖百新,因?yàn)檫@句話讓我陷入了深深的沉思……


image.png

我只想說(shuō)剛剛開始讀還讀的通饭望,再讀幾遍就有點(diǎn)迷茫了。厌漂。

一斟珊、功能項(xiàng)目環(huán)境

  • 直播h5頁(yè)面的分享功能
  • 多個(gè)直播
  • 一個(gè)公眾號(hào)

二囤踩、實(shí)現(xiàn)步驟

基本步驟在官方文檔中,還算是人能讀通的综慎,我就直接復(fù)制過(guò)來(lái)了

步驟一:綁定域名

先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫“JS接口安全域名”怔锌。

備注:登錄后可在“開發(fā)者中心”查看對(duì)應(yīng)的接口權(quán)限变过。

步驟二:引入JS文件

在需要調(diào)用JS接口的頁(yè)面引入如下JS文件媚狰,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js

如需進(jìn)一步提升服務(wù)穩(wěn)定性,當(dāng)上述資源不可訪問(wèn)時(shí)类嗤,可改訪問(wèn):http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)辨宠。

備注:支持使用 AMD/CMD 標(biāo)準(zhǔn)模塊加載方法加載

步驟三:通過(guò)config接口注入權(quán)限驗(yàn)證配置

所有需要使用JS-SDK的頁(yè)面必須先注入配置信息嗤形,否則將無(wú)法調(diào)用(同一個(gè)url僅需調(diào)用一次,對(duì)于變化url的SPA的web app可在每次url變化時(shí)進(jìn)行調(diào)用,目前Android微信客戶端不支持pushState的H5新特性笔咽,所以使用pushState來(lái)實(shí)現(xiàn)web app的頁(yè)面會(huì)導(dǎo)致簽名失敗霹期,此問(wèn)題會(huì)在Android6.2中修復(fù))历造。

wx.config({
  debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái)船庇,若要查看傳入的參數(shù)溢十,可以在pc端打開张弛,參數(shù)信息會(huì)通過(guò)log打出酪劫,僅在pc端時(shí)才會(huì)打印。
  appId: '', // 必填刻剥,公眾號(hào)的唯一標(biāo)識(shí)
  timestamp: , // 必填造虏,生成簽名的時(shí)間戳
  nonceStr: '', // 必填麦箍,生成簽名的隨機(jī)串
  signature: '',// 必填挟裂,簽名
  jsApiList: [] // 必填,需要使用的JS接口列表
});

三栗竖、代碼

前端

let url = location.href.split('#')[0];
let link = encodeURIComponent(url);
$.ajax({
    type: "GET",
    url: 'https://h5-saic.matrixpr.net/know/token/get-sign-str1',
    dataType: "jsonp",
    jsonp: 'callback',
    data: {
        url: link,
        type: '02'
    },
    success: function(res) {
        wx.config({
            debug: false,
            appId: res.data.appId,
            timestamp: res.data.timestamp,
            nonceStr: res.data.noncestr,
            signature: res.data.signature,
            jsApiList:['updateTimelineShareData','updateAppMessageShareData']
    });
wx.ready(() => {
    //wx.hideOptionMenu();
    wx.updateTimelineShareData({
        title: tent.sharetitle, // 分享標(biāo)題
        desc: tent.sharetitle2, // 分享描述
        link: url, // 分享鏈接渠啤,該鏈接域名或路徑必須與當(dāng)前頁(yè)面對(duì)應(yīng)的公眾號(hào)JS安全域名一致
        imgUrl: tent.sharesrc, // 分享圖標(biāo)
        success: function () {
            // 設(shè)置成功
            console.log('成功')
            resolve();
        },
        fail:function(e){
                const msg = e.errMsg || "未知錯(cuò)誤";
                cAlert(msg);
            reject(new Error(msg));
        }
    })
    wx.updateAppMessageShareData({ 
      title: tent.sharetitle, // 分享標(biāo)題
      desc: tent.sharetitle2, // 分享描述
      link: url, // 分享鏈接沥曹,該鏈接域名或路徑必須與當(dāng)前頁(yè)面對(duì)應(yīng)的公眾號(hào)JS安全域名一致
      imgUrl: tent.sharesrc, // 分享圖標(biāo)
      success: function () {
            // 設(shè)置成功  
            resolve();
      },
      fail:function(e){
        const msg = e.errMsg || "未知錯(cuò)誤";
        cAlert(msg);
        reject(new Error(msg));
     }
  })
})
},
error: function(xhr, status, error) {
    console.log("獲取微信參數(shù)失敗==" + error);
}
});

PHP

public function actionGetSignStr(){
        header("Access-Control-Allow-Origin: *");
        $url  = (\Yii::$app->request->get('url'));
        $type  = (\Yii::$app->request->get('type'));
        if (empty($url)) {
            OutTools::outJsonP(OutTools::error(Constants::PARAM_LOSE, '缺少必要參數(shù)架专!'));
        }
        $url = urldecode($url);
        $redis = Yii::$app->redis;
        $key = 'matrix_main_kyle'.$type;
        if ( $redis->get($key) ) {
            $ticket = $redis->get($key);
        } else {
            $access_token = $this->getTokenCuigsnqaphep11( 'matrix_main',$type );
            //var_dump($access_token);die;
            //$curlUrl = 'https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token='.$access_token.'&type=agent_config';
            //$curlUrl = 'https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token='.$access_token;
            $curlUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$access_token.'&type=jsapi';
            $res = HttpTools::http_get($curlUrl);
            $r = json_decode($res,true);

            if($r['errcode'] == 0){
                $ticket = $r['ticket'];
                $expires_in = $r['expires_in'];
                $redis->set($key, $ticket);
                $redis->expire($key, $expires_in);
            }else{
                OutTools::outJsonP(OutTools::error(Constants::PARAM_LOSE, '獲取失敳拷拧委刘!'));
            }
        }
        $noncestr = $this->generateNonce();
        $timestamp = time();
        //$url = 'https://h5-saic.matrixpr.net/sgm_zhihu_store/html9999';
        //$url = 'http://192.168.89.110:8080/';
        $jsapi_ticket='jsapi_ticket='.$ticket.'&noncestr='.$noncestr.'&timestamp='.$timestamp.'&url='.$url;
        // 轉(zhuǎn)換成key=val&串
//        $params = [
//            'ticket' => $ticket,
//            'noncestr' => $noncestr,
//            'timestamp' => $timestamp,
//            'url' => $url,
//        ];
        //$jsapi_ticket = self::createLinkString ( $params, true, false );
        $signature = sha1($jsapi_ticket);

        $str = [
            'ticket' => $ticket,
            'noncestr' => $noncestr,
            'timestamp' => $timestamp,
            'signature' => $signature,
            'jsapi_ticket' => $jsapi_ticket,
            'url' => $url,
            'appId' => 'wxcca46bafxxxxxx'
        ];
        $res = OutTools::success( $str ,  '請(qǐng)求成功!');
        OutTools::outJsonP($res);
    }

四呕童、問(wèn)題及總結(jié)

經(jīng)過(guò)上述步驟可以知道夺饲,首先需要接收前端傳來(lái)的url,這個(gè)url最好在前端進(jìn)行encodeURIComponent(url)擂找,然后在后端再進(jìn)行解碼urldecode($url)浩销。接著根據(jù)appid和appsecret獲取access_token,再用access_token來(lái)獲取ticket,接著用ticket和其他一些參數(shù)生成簽名signature塘雳,最后將這些參數(shù)一并傳回給前端普筹。

那么問(wèn)題來(lái)了斑芜,我們?cè)倏次恼聞傞_始我放的那個(gè)圖,如果是同一個(gè)公眾號(hào),也就是只有一個(gè)appid和密鑰的話醇王,這里生成的一些參數(shù)還可以配置成功嗎崭添?
那個(gè)圖中文檔上說(shuō)如果url變化的話需要在每次變化的時(shí)候調(diào)用。什么叫每次變化的時(shí)候調(diào)用棘伴,我不同直播h5頁(yè)面路徑本來(lái)就是不同啊屁置。網(wǎng)上說(shuō)的是在前端vue的路由中進(jìn)行配置注入蓝角。


image.png

vue我不太懂,如果是不同項(xiàng)目下的呢揪阶?那我就用個(gè)蠢蠢的方法鲁僚,直接在前端調(diào)用接口,這個(gè)接口劝评,我在后端復(fù)制完全一樣的來(lái)倦淀,命名為2,3姻成,4....愿棋,這樣是不是也可以說(shuō)在url變化的時(shí)候調(diào)用糠雨?我調(diào)用不同接口。琅攘。松邪。靠剧辐,一開始我也不知道能不能行荧关,神奇的是居然還真可以褂傀。。
我之前還試了一下不同access_token調(diào)用ticket檀轨,由于這兩個(gè)參數(shù)都有有效期,結(jié)果獲取到的ticket居然一樣卫枝,然后配置失敗讹挎。
接著我重新獲取一個(gè)ticket筒溃,配置還是失敗怜奖。
所以我就直接復(fù)制不同的接口,前端不同項(xiàng)目調(diào)用不同接口就行了迁央。


image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜂科,隨后出現(xiàn)的幾起案子导匣,更是在濱河造成了極大的恐慌慌烧,老刑警劉巖屹蚊,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汹粤,死亡現(xiàn)場(chǎng)離奇詭異田晚,居然都是意外死亡贤徒,警方通過(guò)查閱死者的電腦和手機(jī)汇四,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門通孽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)背苦,“玉大人潘明,你說(shuō)我怎么就攤上這事『裨祝” “怎么了遂填?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵城菊,是天一觀的道長(zhǎng)凌唬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)况褪,這世上最難降的妖魔是什么测垛? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任食侮,我火速辦了婚禮目胡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘眉尸。我一直安慰自己噪猾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著戒劫,像睡著了一般迅细。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上湘换,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天彩倚,我揣著相機(jī)與錄音扶平,去河邊找鬼帆离。 笑死,一個(gè)胖子當(dāng)著我的面吹牛结澄,可吹牛的內(nèi)容都是我干的哥谷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼麻献,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼们妥!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起勉吻,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤监婶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后齿桃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡短纵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年集惋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踩娘。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出养渴,到底是詐尸還是另有隱情雷绢,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布理卑,位于F島的核電站翘紊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏藐唠。R本人自食惡果不足惜帆疟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宇立。 院中可真熱鬧踪宠,春花似錦、人聲如沸妈嘹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)润脸。三九已至柬脸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毙驯,已是汗流浹背倒堕。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爆价,地道東北人垦巴。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像允坚,于是被迫代替她去往敵國(guó)和親魂那。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容