那么,如何正確地在小程序里,加入這個能力呢?在使用開發(fā)者工具的時候,如何進行調試呢?
今天,「知曉程序」就來告訴你,如何正確地在小程序里讀取微信群 ID。
關注「知曉程序」公眾號,在微信后臺回復「ID」,查看小程序獲取群 ID Demo 的源碼。
根據官方文檔,我們可以通過以下兩個方式,讀取到微信群 ID 的信息:
首先,我們來聊聊用戶成功地將小程序頁面分享到微信群的情況下,如何讀取目標微信群的 ID。
此次接口更新,控制小程序頁面右上角菜單中的「分享」按鈕顯示與消失,不再完全依賴頁面邏輯文件中是否擁有onShareAppMessage
現在有兩個新的接口,可以決定小程序是否顯示分享菜單:wx.showShareMenu
(顯示分享菜單)和 wx.hideShareMenu
(隱藏分享菜單)。在 接口中,shareTickets
原本這個接口的return
只能接受path
等控制分享卡片內容的參數。在此次更新后,return
可以在分享成功、失敗、完成(成功和失?。┫?,執(zhí)行特定的回調函數。在回調函數中,我們可以插入參數,以便小程序將微信群信息傳入。小程序在檢測到用戶分享動作之后,會將shareTicket
帶入到這個參數中,并執(zhí)行相應回調函數。來看代碼:
Page({ onLoad { wx.showShareMenu({ withShareTicket: true //要求小程序返回分享目標信息 }) }, // 其他的頁面函數、生命周期函數等 onShareAppMessage { return { title: '頁面分享標題', path: '/pages/path/to/target', success(res){ console.log(res.shareTickets[0]) // 奇怪為什么 shareTickets 是個數組?這個數組永遠只有一個值。 } } } }
接下來,是通過微信群進入小程序情景下的微信群 ID 獲取。
用戶進入小程序時,onLaunch
生命周期函數中,獲取到進入小程序的渠道(情景值)的微信群分享卡片進入小程序,小程序就可以額外獲取到 。App({ onLaunch: function (ops) { if(ops.scene == 1044){ console.log(ops.shareTicket) } } })
有了shareTicket
通過調用wx.getShareInfo
函數,獲取到目標微信群(加密過后的)ID 了需要注意的是,如果當前用戶未登錄(從未調用wx.login
或session
過期),這些接口都會出現調用失敗的情況另外,當分享失敗或數據獲取失敗,這些函數只會調用fail
「知曉程序」complete
回調,并通過數據包中的錯誤碼,判斷接口是否成功調用,以免出現調用失敗時小程序無相應反應的情況。為了便于開發(fā),微信很貼心地在開發(fā)者工具中加入了分享接口調試功能。下面,「知曉程序」就來告訴你,調試分享接口的具體方法。
首先是用戶的分享動作調試。
在目標頁面中,點擊右上角的「更多」按鈕,再點擊「轉發(fā)」。這時候,頁面會變成「發(fā)送給好友」,里面有開發(fā)者工具提供的 9 個模擬群,任君選擇。
隨意點擊一個群,進行模擬分享動作,小程序就可以獲取到模擬群的加密數據。
接下來,是獲取進入小程序的微信群信息的調試方法。
點擊左側「編譯」按鈕下方的「自定義編譯」按鈕,在「設置應用的進入場景」,選擇「1044:微信群會話中的小程序消息卡片(帶 shareTicket)」。
選擇場景之后,對話框下方會多出「選擇進入的群」。隨便選擇一個測試群,再點擊確定,你就可以開始調試了。
如果你利用wx.getShareInfo
接口,調試出的結果是這樣,那么恭喜你,你的代碼沒毛病,可以直接進入下一個步驟——數據解碼。
為了保證用戶隱私安全,微信特意將微信群 ID 進行了非常復雜的加密。當加密數據直接發(fā)到服務器后,服務器還需要再進行一步解碼,才能正常使用微信群信息。
如果你之前做過小程序中用戶數據的解碼,那么你可以將同樣的代碼套用到解碼微信群數據上,因為二者的加密算法是一模一樣的。
如果你沒有做過類似的解碼工作,也不用擔心,微信提供了包括 PHP、Node.js 等環(huán)境下的解碼 demo 代碼。我們只需從小程序開發(fā)文檔中下載 demo 代碼,再將其引入,也能輕松進行解碼。
我們以 Node.js 為例,演示如何使用官方的解碼 Demo:
Node
這個文件夾。npm init
命令,將它變?yōu)?Node.js 應用。demo.js
,將示例代碼替換成實際信息,包括小程序 App ID、登錄用戶的 Session Key、加密數據等等。node demo.js
命令 。執(zhí)行后的結果如下:
比較有意思的是,在宣布這個消息當天進行調試,分享接口仍可以獲取到微信群名稱,但現在已無法正常獲取。不知道是有意為之還是 bug 使然。
但是,微信群的唯一 ID(openGId
)仍然可以正常獲取。開發(fā)者依然可以通過這個 ID 識別不同的微信群,進而判斷用戶通過哪一個微信群進入小程序。
聯系客服