微信jssdk進(jìn)行分享功能

前端的工作

  1. 步驟一:綁定域名
    先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫(xiě)“JS接口安全域名”纤怒。

  2. 步驟二:引入JS文件
    http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)效拭。

  3. 步驟三:通過(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)用)

  • timestamp,nonceStr留夜,signature這三個(gè)值必須后端返回來(lái)
wx.config({
  debug: true, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái)包警,若要查看傳入的參數(shù),可以在pc端打開(kāi)诞挨,參數(shù)信息會(huì)通過(guò)log打出莉撇,僅在pc端時(shí)才會(huì)打印。
  appId: '', // 必填惶傻,公眾號(hào)的唯一標(biāo)識(shí)
  timestamp: '', // 必填棍郎,生成簽名的時(shí)間戳
  nonceStr: '', // 必填,生成簽名的隨機(jī)串
  signature: '',// 必填银室,簽名
  jsApiList: [] // 必填涂佃,需要使用的JS接口列表
});
  1. 步驟四:通過(guò)ready接口處理成功驗(yàn)證
wx.ready(function(){
  // config信息驗(yàn)證后會(huì)執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后蜈敢,config是一個(gè)客戶端的異步操作辜荠,所以如果需要在頁(yè)面加載時(shí)就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來(lái)確保正確執(zhí)行扶认。對(duì)于用戶觸發(fā)時(shí)才調(diào)用的接口侨拦,則可以直接調(diào)用,不需要放在ready函數(shù)中辐宾。
});
  1. 步驟五:通過(guò)error接口處理失敗驗(yàn)證
wx.error(function(res){
  // config信息驗(yàn)證失敗會(huì)執(zhí)行error函數(shù)狱从,如簽名過(guò)期導(dǎo)致驗(yàn)證失敗,具體錯(cuò)誤信息可以打開(kāi)config的debug模式查看叠纹,也可以在返回的res參數(shù)中查看季研,對(duì)于SPA可以在這里更新簽名。
});

后端的工作

  1. 獲取access_token(有效期7200秒誉察,開(kāi)發(fā)者必須在自己的服務(wù)全局緩存access_token):此處需要用到appId和appsecret与涡。

  2. 用第一步拿到的access_token 采用http GET方式請(qǐng)求獲得jsapi_ticket(有效期7200秒,開(kāi)發(fā)者必須在自己的服務(wù)全局緩存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

  3. 生成JS-SDK權(quán)限驗(yàn)證的簽名:參與簽名的字段包括noncestr(隨機(jī)字符串), 有效的jsapi_ticket, timestamp(時(shí)間戳), url(當(dāng)前網(wǎng)頁(yè)的URL,不包含#及其后面部分)

  4. 返回給前端timestamp驼卖,nonceStr氨肌,signature,前端需要傳appId酌畜,url給后端

  5. 出于安全考慮怎囚,開(kāi)發(fā)者必須在服務(wù)器端實(shí)現(xiàn)簽名的邏輯。

最后的樣子

  const appId = 'xxx';
  const url = window.location.href.split('#')[0];
  getWxJssdkSignReq({ appId, url})
    .then((res) => {
      const config = res.result
      wx.config({
        debug: false, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái)桥胞,若要查看傳入的參數(shù)恳守,可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出贩虾,僅在pc端時(shí)才會(huì)打印催烘。
        appId: appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
        timestamp: config.timestamp, // 必填缎罢,生成簽名的時(shí)間戳
        nonceStr: config.nonceStr, // 必填伊群,生成簽名的隨機(jī)串
        signature: config.signature, // 必填,簽名屁使,見(jiàn)附錄1
        jsApiList: [
          'updateAppMessageShareData', 'updateTimelineShareData'
        ] // 必填在岂,需要使用的JS接口列表,所有JS接口列表見(jiàn)附錄2
      })

      wx.ready(() => {
        const shareConfig = shareInfo; // 自己定義的分享信息
        const title = shareConfig.title || '';
        const imgUrl = shareConfig.pic || '';
        const desc = shareConfig.content || '';
        const link = window.location.href;

        // 分享朋友
        wx.updateAppMessageShareData({
          title: title, // 分享標(biāo)題
          desc: desc, // 分享描述
          link: link, // 分享鏈接
          imgUrl: imgUrl, // 分享圖標(biāo)
          success: function () {
            // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
            console.log('分享朋友 success')
          }
        });

        // 分享朋友圈
        wx.updateTimelineShareData({
          title: title,
          link: link, // 分享鏈接
          imgUrl: imgUrl, // 分享圖標(biāo)
          success: function () {
            // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
            console.log('分享朋友圈 success')
          }
        });
      })

      wx.error((err) => {
        console.log('----wx error----: ', err)
      })
    })
    .catch(err => {
      console.log('----wxconfig catch err----: ', err)
    })

遇到的困難

  1. config:require subscribe:由于測(cè)試環(huán)境用的測(cè)試公眾號(hào)蛮寂,所以需要先關(guān)注公眾號(hào)才行蔽午。


    image.png
  2. config:invalid signature:簽名失敗,這個(gè)是很磨人而且經(jīng)常遇到的問(wèn)題
    解決流程:
  • 確認(rèn)簽名算法正確酬蹋,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁(yè)面工具進(jìn)行校驗(yàn)及老。
  • 確認(rèn)url是頁(yè)面完整的url(請(qǐng)?jiān)诋?dāng)前頁(yè)面alert(location.href.split('#')[0])確認(rèn)),包括'http(s)://'部分范抓,以及'?'后面的GET參數(shù)部分,但不包括'#'hash后面的部分骄恶。確保后端解析到用來(lái)簽名的url和前端發(fā)送的一致(此處很坑),如果是get方法請(qǐng)求的匕垫,根據(jù)需要進(jìn)行encodeURIComponent(location.href.split('#')[0])處理僧鲁,后端需要decode(因?yàn)閡rl中有&時(shí)會(huì)被瀏覽器截?cái)鄬?dǎo)致簽名不正確,如果是post請(qǐng)求也要注意后端是否把&轉(zhuǎn)義成&amp了)象泵。
  • 確認(rèn) config 中的 appid 與用來(lái)獲取 jsapi_ticket 的 appid 一致寞秃。
  • 檢查當(dāng)前appId對(duì)應(yīng)的“公眾號(hào)設(shè)置”的“功能設(shè)置”里是否填寫(xiě)“JS接口安全域名”。
  • 確保一定緩存access_token和jsapi_ticket偶惠。
    官方的解決方案:


    image.png
  1. 分享出去的圖片沒(méi)顯示
    項(xiàng)目中設(shè)置為封面的本地圖片較小春寿,在打包過(guò)程中被打包成了base64字符串,因此分享參數(shù)中拿到的也是base64字符串忽孽。所以在配置成imgUrl時(shí)绑改,在PC端可以正常顯示谢床,但是在手機(jī)端顯示的就有問(wèn)題。最后讓UI切了超過(guò)項(xiàng)目打包文件限制的圖片資源作為封面厘线,解決了這個(gè)問(wèn)題识腿。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市皆的,隨后出現(xiàn)的幾起案子庶艾,更是在濱河造成了極大的恐慌囚巴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件部宿,死亡現(xiàn)場(chǎng)離奇詭異栖雾,居然都是意外死亡楞抡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)析藕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)召廷,“玉大人,你說(shuō)我怎么就攤上這事账胧【郝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵治泥,是天一觀的道長(zhǎng)筹煮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)居夹,這世上最難降的妖魔是什么败潦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮准脂,結(jié)果婚禮上劫扒,老公的妹妹穿的比我還像新娘。我一直安慰自己狸膏,他們只是感情好沟饥,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著湾戳,像睡著了一般贤旷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上院塞,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天遮晚,我揣著相機(jī)與錄音,去河邊找鬼拦止。 笑死县遣,一個(gè)胖子當(dāng)著我的面吹牛糜颠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萧求,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼其兴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了夸政?” 一聲冷哼從身側(cè)響起元旬,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎守问,沒(méi)想到半個(gè)月后匀归,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耗帕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年穆端,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仿便。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡体啰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗽仪,到底是詐尸還是另有隱情荒勇,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布闻坚,位于F島的核電站沽翔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鲤氢。R本人自食惡果不足惜搀擂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卷玉。 院中可真熱鬧哨颂,春花似錦、人聲如沸相种。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寝并。三九已至箫措,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衬潦,已是汗流浹背斤蔓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镀岛,地道東北人弦牡。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓友驮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驾锰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卸留,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 1. 準(zhǔn)備工作 1.1 查看公眾號(hào)分享接口權(quán)限 要使用微信SDK必須要有經(jīng)過(guò)微信認(rèn)證的非個(gè)人服務(wù)號(hào) 登陸服務(wù)號(hào)后,...
    sxplus閱讀 6,279評(píng)論 0 2
  • 久違的新文章發(fā)布椭豫。耻瑟。我的鍋這篇文章是在寫(xiě)的太長(zhǎng),可以慢慢看一下赏酥,偽代碼喳整,畢竟簡(jiǎn)書(shū)上面,望大家見(jiàn)諒=窀俊K懔!先看官方文檔...
    wyatt_plus閱讀 1,644評(píng)論 0 2
  • 背景 微信jssdk是微信團(tuán)隊(duì)提供的開(kāi)發(fā)工具姓言,利用它可以調(diào)用分享接口,自定義轉(zhuǎn)發(fā)朋友圈蔗蹋、微信群時(shí)的標(biāo)題何荚、內(nèi)容、圖標(biāo)...
    平淡如水_43f6閱讀 6,243評(píng)論 2 6
  • 今天感恩節(jié)哎猪杭,感謝一直在我身邊的親朋好友餐塘。感恩相遇!感恩不離不棄皂吮。 中午開(kāi)了第一次的黨會(huì)戒傻,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,576評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書(shū)法閱讀 4,232評(píng)論 1 3