# 小程序私密消息
# 功能介紹
小程序私密消息功能是這樣一種能力:當(dāng)分享者分享小程序卡片給其他用戶(hù)或者微信群后,其他用戶(hù)點(diǎn)擊此小程序卡片時(shí),開(kāi)發(fā)者可以鑒別出點(diǎn)擊卡片的用戶(hù)是否被分享者分享過(guò)小程序卡片。
# 使用說(shuō)明
# 1. 分享
創(chuàng)建業(yè)務(wù)活動(dòng)后、分享小程序消息前,需要通過(guò)后臺(tái)接口 createActivityId 創(chuàng)建activityId,建立一個(gè)activityId與一個(gè)業(yè)務(wù)活動(dòng)id唯一關(guān)聯(lián)。
然后通過(guò) wx.updateShareMenu 接口聲明本次分享的消息為私密消息,私密消息具有不可二次轉(zhuǎn)發(fā)性。
聲明完成后,可以通過(guò)右上角菜單、分享按鈕組件、wx.shareAppMessage(僅小游戲)分享私密消息給個(gè)人、群聊。
# 場(chǎng)景一: 個(gè)人分享給個(gè)人
A --> B
# 場(chǎng)景二: 個(gè)人分享給群
A --> [B, C, D, E]
示例代碼
wx.updateShareMenu({
withShareTicket: true,
isPrivateMessage: true,
activityId: 'xxx',
})
# 2. 驗(yàn)證
從群聊、單聊消息卡片進(jìn)入小程序時(shí),通過(guò) wx.authPrivateMessage 接口可以驗(yàn)證當(dāng)前用戶(hù)是否是私密消息的接收者,即驗(yàn)證這條消息是否是A直接轉(zhuǎn)發(fā)給B或者A轉(zhuǎn)發(fā)給B所在的群。
該接口使用前,需要通過(guò) wx.login() 接口登錄小程序。
# 接口參數(shù)
| 參數(shù) | 類(lèi)型 | 說(shuō)明 |
|---|---|---|
| shareTicket | string | shareTicket |
# success回調(diào)
| 參數(shù) | 類(lèi)型 | 說(shuō)明 |
|---|---|---|
| valid | Boolean | 驗(yàn)證是否通過(guò) |
| iv | String | 加密算法的初始向量,詳細(xì)見(jiàn)加密數(shù)據(jù)解密算法 |
| encryptedData | String | 經(jīng)過(guò)加密的activityId,解密后可得到原始的activityId。若解密后得到的activityId可以與開(kāi)發(fā)者后臺(tái)的活動(dòng)id對(duì)應(yīng)上則驗(yàn)證通過(guò),否則表明valid字段不可靠(被篡改) 詳細(xì)見(jiàn)加密數(shù)據(jù)解密算法 |
# 注意事項(xiàng)
- 若返回的
valid字段為false,表示此次驗(yàn)證不通過(guò)。 - 若返回的
valid字段為true,表示驗(yàn)證通過(guò)。但是為了安全起見(jiàn),預(yù)防valid字段被篡改的可能,可以把encryptedData和iv傳到開(kāi)發(fā)者后臺(tái)去解密。若解密后得到的activityId就是當(dāng)前活動(dòng)所對(duì)應(yīng)的activityId則驗(yàn)證通過(guò),否則表示驗(yàn)證不通過(guò)。 - 當(dāng)私密消息分享給群時(shí),是按鑒別時(shí)刻用戶(hù)是否在群里作為判斷。
activityId創(chuàng)建后7天內(nèi)分享有效,120天內(nèi)驗(yàn)證有效。
# 示例代碼
wx.authPrivateMessage({
shareTicket: 'xxxxxx',
success(res) {
console.log('authPrivateMessage success', res)
// res
// {
// errMsg: 'authPrivateMessage:ok'
// valid: true
// iv: 'xxxx',
// encryptedData: 'xxxxxx'
// }
},
fail(res) {
console.log('authPrivateMessage fail', res)
}
})