微信自定義分享 前端填坑

需求都是大同小異的手蝎,要做微信分享厂捞,當(dāng)然了授舟,微信內(nèi)部瀏覽器右上角 ‘...’ 點擊就可以分享穗椅,但是往往分享的信息是不盡人意的岩睁,因為自動獲取title凛俱,不能顯示description获雕,還很有可能拿不到圖片世分,這樣的信息分享給我的話聋丝,我就默認(rèn)是小廣告了(手動攤手~~~)索烹。所以自定義分享勢在必行。

1.配置微信JS接口安全域名(參考微信官方文檔 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 JSSDK使用步驟

微信公眾號配置JS接口安全域名弱睦,并且把ip地址加入白名單百姓。我在測試環(huán)境中,如果不添加白名單况木,獲取的appid直接報錯為非法appid垒拢,導(dǎo)致接下來的步驟根本沒法進行。

2.依次獲取 access_token火惊,jsapi_ticket求类,signature
獲取這些神奇的東西的步驟實際上是這樣的:

appid & appsecret ====> access_token ====> jsapi_ticket ====> signature

①首先用appid和appsecret獲取access_token屹耐,這里的appid和appsecret是公眾號里可以拿到的尸疆。

②根據(jù)獲取的access_token,請求路徑 https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi 獲取 jsapi_ticket 。返回值為一段JSON寿弱,參考官方文檔 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 附錄1-JS-SDK使用權(quán)限簽名算法

③進行簽名算法犯眠,signature=sha1(string1)。

簽名 signature = sha1(string1)症革。這里的 string1 是由4部分組成筐咧,分別是

  • jsapi_ticket:獲取到的
  • timestamp:隨機時間戳
  • noncestr:隨機字符串
  • url:要分享頁面的路徑,這里需要強調(diào)一下噪矛,這個url的域名量蕊,需要跟公眾號JS接口安全域名一致。

string1 = jsapi_ticket=jsapi_ticket的值&noncestr=noncestr的值&timestamp=timestamp的值&url=url的值艇挨。

后臺算法 sha1() 加密字符串 string1 生成簽名 signature 危融。

①②③這些步驟是后臺完成,前端只需要接收后臺傳過來的值即可雷袋。

需要注意的是吉殃,我的業(yè)務(wù)需求是前端獲取本頁面路徑,向后臺發(fā)送頁面路徑楷怒,也就是組成簽名算法中的 url 的值蛋勺,所以看各自需求,寫法不固定鸠删,但是這個值是必需的抱完。由于后臺要求,不可以全局緩存 access_token 刃泡,所以這個功能并沒有做巧娱,也就是說一天請求的 access_token 的次數(shù)上限就是2000。(還真是對自己的產(chǎn)品沒信心哦~~~)烘贴。至于路徑的轉(zhuǎn)義字符禁添,路徑加多個參數(shù),參數(shù)與參數(shù)之間需要用 '&' 來連接桨踪,但是在我的項目中老翘,直接傳遞 '&' ,到后臺的時候會直接轉(zhuǎn)義為 '&' 導(dǎo)致 url 與當(dāng)前路徑不一致,進而導(dǎo)致 signature 簽名錯誤锻离,所以我直接在前端轉(zhuǎn)義成 '&'铺峭, 其他的任務(wù)交給后臺處理,當(dāng)然這只是一個現(xiàn)象汽纠,這個還是要根據(jù)后臺的情況而定的卫键,我的后臺是 php,不同的后臺會遇到的問題也許不大相同虱朵,慢慢來嘍~~

<!--------微信自定義分享-------->
//先調(diào)用微信js
<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
//微信分享
//只能調(diào)用微信內(nèi)部瀏覽器右上角'...' 喚起微信分享莉炉,無法做到自定義按鈕調(diào)用分享接口
var urlstr = window.location.href;
var urlPath = urlstr.replace(/&/g,'%26'); 
$.ajax({
    url: k_host + "/WxGetSignature", //k_host 為本地路徑啤呼,忽略就好,這個實際上就是把需要分享頁面的 url 傳給后臺
    data:{
        url: urlPath,
    },
    async: true,
    type: 'POST',
    cache: false,
    dataType: 'json',
    success:function(data){
            var res = data.data;
            wx.config({
                debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來呢袱,若要查看傳入的參數(shù)官扣,可以在pc端打開,參數(shù)信息會通過log打出羞福,僅在pc端時才會打印惕蹄。
                appId: res.appid,
                timestamp: res.timestamp, // 必填,生成簽名的時間戳
                nonceStr: res.noncestr, // 必填治专,生成簽名的隨機串
                signature: res.signature,// 必填卖陵,簽名
                jsApiList: [ // 必填,需要使用的JS接口列表
                    'onMenuShareTimeline',
                    'onMenuShareAppMessage',
                    'onMenuShareQQ',
                    'onMenuShareWeibo',
                    'onMenuShareQZone'
                ]
            });
            wx.ready(function () {
                wx.onMenuShareAppMessage({
                    title: '測試用 title',
                    desc: '測試用 description',
                    imgUrl: '分享圖標(biāo)的路徑', // 分享圖標(biāo)
                    type: '', // 分享類型,music张峰、video或link泪蔫,不填默認(rèn)為link
                    dataUrl: '', // 如果type是music或video,則要提供數(shù)據(jù)鏈接喘批,默認(rèn)為空
                    link: urlstr, // 分享鏈接撩荣,該鏈接域名或路徑必須與當(dāng)前頁面對應(yīng)的公眾號JS安全域名一致
                    success : function () {
                        //分享成功需要執(zhí)行的函數(shù)
                    },
                    cancel: function (err) {
                        // console.log(err);
                        // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
                    }
                });
                wx.onMenuShareTimeline({
                    title: '測試用 title',
                    desc: '測試用 description',
                    imgUrl: '分享圖標(biāo)的路徑', // 分享圖標(biāo)
                    type: '', // 分享類型,music、video或link饶深,不填默認(rèn)為link
                    dataUrl: '', // 如果type是music或video餐曹,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
                    link: urlstr, // 分享鏈接敌厘,該鏈接域名或路徑必須與當(dāng)前頁面對應(yīng)的公眾號JS安全域名一致
                    success : function () {
                        //分享成功需要執(zhí)行的函數(shù)
                    },
                    cancel: function (err) {
                        console.log(err);
                        // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
                    }
                });
            });
            wx.error(function(res){
            });
    },
    error:function(request){
        alert("連接失敗台猴,請檢查網(wǎng)絡(luò),稍后再試");
    }
});
<!--------微信自定義分享-------->

以上是前端代碼俱两,遇到的問題基本就是 JS 接口安全域名饱狂,添加 IP 到白名單,簽名算法宪彩,其他很順利休讳。本來打算一開始去做成點擊自定義按鈕調(diào)起微信分享,結(jié)果去官方社區(qū)查了以后發(fā)現(xiàn)毯焕,是不可行的衍腥,沒有方法和接口提供給開發(fā)者, 雖然微信自己的 demo 中有這種點擊按鈕纳猫,調(diào)用分享,可是在真機測試中竹捉,并沒有什么毛用芜辕,打debugger發(fā)現(xiàn)代碼根本沒進分享,后來就放棄块差,如果哪位大神有辦法的話侵续,請指點一二倔丈。

所有的調(diào)試都是在微信開發(fā)工具中完成的,不然微信的 debugger 模式是無法開啟的(吐槽一下開發(fā)者工具状蜗,不是那么好用哦~~~)需五。

希望能幫到在微信分享坑中無法自拔的小伙伴們(哭笑不得.gif)~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市轧坎,隨后出現(xiàn)的幾起案子宏邮,更是在濱河造成了極大的恐慌,老刑警劉巖缸血,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜜氨,死亡現(xiàn)場離奇詭異,居然都是意外死亡捎泻,警方通過查閱死者的電腦和手機飒炎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笆豁,“玉大人郎汪,你說我怎么就攤上這事〈秤” “怎么了怒竿?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扩氢。 經(jīng)常有香客問我耕驰,道長,這世上最難降的妖魔是什么录豺? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任朦肘,我火速辦了婚禮,結(jié)果婚禮上双饥,老公的妹妹穿的比我還像新娘媒抠。我一直安慰自己,他們只是感情好咏花,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布趴生。 她就那樣靜靜地躺著,像睡著了一般昏翰。 火紅的嫁衣襯著肌膚如雪苍匆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天棚菊,我揣著相機與錄音浸踩,去河邊找鬼。 笑死统求,一個胖子當(dāng)著我的面吹牛检碗,可吹牛的內(nèi)容都是我干的据块。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼折剃,長吁一口氣:“原來是場噩夢啊……” “哼另假!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怕犁,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤边篮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后因苹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苟耻,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年扶檐,在試婚紗的時候發(fā)現(xiàn)自己被綠了凶杖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡款筑,死狀恐怖智蝠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奈梳,我是刑警寧澤杈湾,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站攘须,受9級特大地震影響漆撞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜于宙,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一浮驳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捞魁,春花似錦至会、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昆著,卻和暖如春县貌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宣吱。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工窃这, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人征候。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓杭攻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疤坝。 傳聞我的和親對象是個殘疾皇子兆解,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

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