微信小程序群功能開發(fā)-前端篇

微信小程序群功能開發(fā)-后端篇
微信小程序群功能開發(fā)-前端篇

我們?cè)谝恍┪⑿湃褐锌吹竭^(guò)這樣的小程序分享卡片:當(dāng)你點(diǎn)進(jìn)去后雕什,會(huì)看到一個(gè)列表扁位,里面有其他群成員的頭像和相關(guān)信息王悍。比如《王者榮耀群排行》,但是段位信息是騰訊私有的接口闻坚,我們只能拿到頭像和昵稱等基礎(chǔ)信息。

下面我將實(shí)現(xiàn)小程序端的從轉(zhuǎn)發(fā)到用戶點(diǎn)擊卡片后獲取信息的這個(gè)過(guò)程逝她。

基本思路

開啟

首先我們要調(diào)用wx.showShareMenu進(jìn)行設(shè)置浇坐,來(lái)開啟是否使用帶shareTicket的轉(zhuǎn)發(fā),這個(gè)shareTicket是開發(fā)群功能的關(guān)鍵:

wx.showShareMenu({
    withShareTicket: true,
})

我一般將其放在頁(yè)面onShow中黔宛。

觸發(fā)轉(zhuǎn)發(fā)事件

如果要自定義轉(zhuǎn)發(fā)按鈕而不是有默認(rèn)右上角的轉(zhuǎn)發(fā)按鈕近刘,需要在頁(yè)面中放置一個(gè)open-type="share"button組件:

<button open-type="share">share</button>

接下來(lái)在頁(yè)面中設(shè)置分享函數(shù)onShareAppMessage:

onShareAppMessage: function (res) {
    if (res.from === 'button') {
        // 來(lái)自頁(yè)面內(nèi)轉(zhuǎn)發(fā)按鈕
        console.log(res.target)
    }
    return {
        title: '自定義轉(zhuǎn)發(fā)標(biāo)題',
        path: '/pages/test/test?id=123',
        success: function (res) {
            // 轉(zhuǎn)發(fā)成功
            console.log(res)
            // 只有轉(zhuǎn)發(fā)到群聊中打開才可以獲取到 shareTickets 返回值,單聊沒(méi)有 shareTickets
            if (res.shareTickets && res.shareTickets.length>0) {
                app.getShareInfo(res.shareTickets[0])
            }
        },
        fail: function (res) {
            // 轉(zhuǎn)發(fā)失敗
            console.log(res)
        }
    }
}

現(xiàn)在就可以進(jìn)行轉(zhuǎn)發(fā)了臀晃,在群聊中將會(huì)看到此次分享的小程序消息卡片觉渴。每個(gè)shareTicket對(duì)應(yīng)每個(gè)群并且單聊不會(huì)有該值。這里只選擇一個(gè)轉(zhuǎn)發(fā)徽惋,所以直接取第一個(gè)案淋。至于app.getShareInfo是用來(lái)獲取群id(openGId)的函數(shù),我們放到后面介紹险绘。

群成員點(diǎn)消息卡片

當(dāng)群成員點(diǎn)消息卡片進(jìn)入小程序后踢京,在app.jsonShow/onLaunchoptions中可以獲取到shareTicketshareTicket每次都是不一樣的隆圆,比分你分享的時(shí)候獲取到的跟這里獲取到的不是同一個(gè)漱挚,但是會(huì)對(duì)應(yīng)同一個(gè)openGId

app.js:

// 在onShow中獲取轉(zhuǎn)發(fā)信息shareTicket
onShow: function (options) {
    console.log(options)
    let scene = options.scene

    // 場(chǎng)景值是1044渺氧,帶 shareTicket 的小程序消息卡片
    if(scene == 1044) {
        let shareTicket = options.shareTicket
        // 這里的id根據(jù)自己的具體需求進(jìn)行操作旨涝,也可以設(shè)置其他的
        let id = options.query.id
        this.getShareInfo(shareTicket)
    }
},

// 獲取加密信息encryptedData, iv
getShareInfo: function (shareTicket) {
    const z = this
    wx.getShareInfo({
        shareTicket: shareTicket,
        success: function (res) {
            console.log(res)
            let {encryptedData, iv} = res

            if(encryptedData && iv) {
                z.getDecodeEncryptedData(encryptedData, iv)
            }
        },
        fail: function (res) {
            console.log(res)
        }
    })
},

// 獲取解密后的信息
getDecodeEncryptedData: function (encryptedData, iv) {
    // 發(fā)送到后臺(tái)解析
    wx.login({
        success: function(res) {
            let code = res.code

            // 下面只是演示代碼
            // post({
            //     url:'https://www.example.com/controller/getDecodeEncryptedData'
            //     data:{
            //         code,
            //         encryptedData,
            //         iv,
            //     }
            // })
        }
    })
},

首先,我們通過(guò)wx.getShareInfo獲取encryptedDataiv侣背,然后將其傳給后臺(tái)進(jìn)行解析白华。

getDecodeEncryptedData中,當(dāng)后臺(tái)解析成功后贩耐,就會(huì)返回一個(gè)openGId弧腥。

此時(shí)就可以將群openGId與用戶openid進(jìn)行綁定了,這個(gè)綁定信息也是要保存到后臺(tái)的潮太。如果后臺(tái)沒(méi)有保存過(guò)頭像昵稱信息管搪,此時(shí)也可以將用戶頭像和昵稱一起保存到后臺(tái)。

類似于下面這樣的一個(gè)接口:

// 下面只是演示代碼
post({
    url:'https://www.example.com/controller/bindGroupAndUser'
    data:{
        code,
        openGId
    }
})

其中的code調(diào)用wx.login獲得铡买,后臺(tái)根據(jù)這個(gè)code能獲取到openid更鲁。然后進(jìn)行綁定。

然后根據(jù)自己的需求奇钞,可能還要一個(gè)保存用戶基礎(chǔ)信息和拉取群成員信息列表的接口澡为。

基本思路就是這樣,我將在另一篇文章中描述后端的相關(guān)處理景埃。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末媒至,一起剝皮案震驚了整個(gè)濱河市顶别,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拒啰,老刑警劉巖驯绎,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谋旦,居然都是意外死亡条篷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蛤织,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鸿染,你說(shuō)我怎么就攤上這事指蚜。” “怎么了涨椒?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵摊鸡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蚕冬,道長(zhǎng)免猾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任囤热,我火速辦了婚禮猎提,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘旁蔼。我一直安慰自己锨苏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布棺聊。 她就那樣靜靜地躺著伞租,像睡著了一般。 火紅的嫁衣襯著肌膚如雪限佩。 梳的紋絲不亂的頭發(fā)上葵诈,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音祟同,去河邊找鬼作喘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耐亏,可吹牛的內(nèi)容都是我干的徊都。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼广辰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暇矫!你這毒婦竟也來(lái)了主之?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤李根,失蹤者是張志新(化名)和其女友劉穎槽奕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體房轿,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粤攒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了囱持。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夯接。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纷妆,靈堂內(nèi)的尸體忽然破棺而出盔几,到底是詐尸還是另有隱情,我是刑警寧澤掩幢,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布逊拍,位于F島的核電站,受9級(jí)特大地震影響际邻,放射性物質(zhì)發(fā)生泄漏芯丧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一世曾、第九天 我趴在偏房一處隱蔽的房頂上張望缨恒。 院中可真熱鬧,春花似錦轮听、人聲如沸肿轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椒袍。三九已至,卻和暖如春藻茂,著一層夾襖步出監(jiān)牢的瞬間驹暑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工辨赐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留优俘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓掀序,卻偏偏與公主長(zhǎng)得像帆焕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子不恭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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