知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當(dāng)前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
微信小程序不同分享效果的實現(xiàn)
發(fā)表時間:2021-1-5
發(fā)布人:葵宇科技
瀏覽次數(shù):69
在我們做微信小程序開發(fā)的過程中,分享功能是十分重要的一個功能點(diǎn),分享大概主要有三類:
- 普通分享(默認(rèn)分享)
- 區(qū)分好友和群的分享
- 區(qū)分不同群的分享
普通分享
普通分享即默認(rèn)分享,普通的分享功能很容易實現(xiàn),我們可以直接在JS文件中實現(xiàn)分享的方法即可,如下:
/**
* 用戶點(diǎn)擊右上角分享
*/
onShareAppMessage: function () {
return {
title: '測試小程序',//分享內(nèi)容
path: '/pages/index/index',//分享地址
imageUrl: '/images/img_share.png',//分享圖片
}
}
通過上述代碼(return中參數(shù)也可不填,默認(rèn)分享當(dāng)前頁),即可實現(xiàn)簡單的分享功能。
但是在正式的項目中,這種分享往往不能滿足我們的需求,比如我們需要根據(jù)分享的不同方式,給予不同形式的獎勵,分享到好友加10個獎勵,分享到群加30個獎勵等。如何區(qū)分用戶是分享到好友還是分享到群呢,這就涉及到了我們所說的第二種分享:區(qū)分好友和群的分享。
區(qū)分好友和群的分享
關(guān)于區(qū)分好友和群分享,我們先看下官方的文檔
根據(jù)官方文檔中的說明,我們知道可以通過調(diào)用 wx.showShareMenu和 wx.getShareInfo() 接口獲取到相應(yīng)的轉(zhuǎn)發(fā)信息。
根據(jù)此文檔,修改我們的小程序JS文件中的分享方法:
/**
* 用戶點(diǎn)擊右上角分享
*/
onShareAppMessage: function () {
wx.showShareMenu({
withShareTicket:true
})
return {
title: '測試小程序',//分享內(nèi)容
path: '/pages/index/index',//分享地址
imageUrl: '/images/img_share.png',//分享圖片
success:function(res) {
if (res.errMsg =='shareAppMessage:ok') {//判斷分享是否成功
if (res.shareTickets == undefined) {//判斷分享結(jié)果是否有群信息
//分享到好友操作...
} else {
//分享到群操作...
var shareTicket = res.shareTickets[0];
wx.getShareInfo({
shareTicket: shareTicket,
success:function(e) {
//當(dāng)前群相關(guān)信息
var encryptedData = http://www.wxapp-union.com/e.encryptedData;
var iv = e.iv;
}
}
}
}
}
}
}
在這里我們通過在分享的方法中,設(shè)置
wx.showShareMenu({
withShareTicket:true
})
添加該方法后,即可在分享成功的回調(diào)中獲取到分享群信息,通過wx.getShareInfo方法,即可獲取到當(dāng)前群的encryptedData和iv信息。到這里,分享到好友和群的區(qū)分就實現(xiàn)了。
到這里我們通過wx.getShareInfo方法獲取到了一些群信息,能否通過這些信息區(qū)分不同的群呢,答案是不能的,接下來,我們開始介紹分享到不同群如何實現(xiàn)。
區(qū)分不同群的分享
上文中已經(jīng)說明了,通過wx.getShareInfo方法可以獲取轉(zhuǎn)發(fā)詳細(xì)信息,我們還是先來看一下該方法在官方文檔中的說明:
通過官方文檔的說明,我們可以知道,上文中我們通過wx.getShareInfo()方法返回的encryptedData就包含完整的轉(zhuǎn)發(fā)信息,只不過它是加密的,我們解密后才可以獲取當(dāng)前群唯一ID:openGId。既然找到了問題,那我們就看下如何解密該數(shù)據(jù)。
這里微信官方為我們提供了幾種解密方法,下載示例代碼后,發(fā)現(xiàn)竟然沒有JS實現(xiàn)的,這里我們先打開其中一個用例,看下請求方法和參數(shù)構(gòu)成,打開Node示例代碼中的demo.js
var WXBizDataCrypt = require('./WXBizDataCrypt')
var appId = 'wx4f4bc4dec97d474b'
var sessionKey = 'tiihtNczf5v6AKRyjwEUhQ=='
var encryptedData =
'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM'+
'QmRzooG2xrDcvSnxIMXFufNstNGTyaGS'+
'9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+'+
'3hVbJSRgv+4lGOETKUQz6OYStslQ142d'+
'NCuabNPGBzlooOmB231qMM85d2/fV6Ch'+
'evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6'+
'/1Xx1COxFvrc2d7UL/lmHInNlxuacJXw'+
'u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn'+
'/Hz7saL8xz+W//FRAUid1OksQaQx4CMs'+
'8LOddcQhULW4ucetDf96JcR3g0gfRK4P'+
'C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB'+
'6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns'+
'/8wR2SiRS7MNACwTyrGvt9ts8p12PKFd'+
'lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV'+
'oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG'+
'20f0a04COwfneQAGGwd5oa+T8yO5hzuy'+
'Db/XcxxmK01EpqOyuxINew=='
var iv = 'r7BXXKkLb8qrSNn05n0qiA=='
var pc = new WXBizDataCrypt(appId, sessionKey)
var data = pc.decryptData(encryptedData , iv)
console.log('解密后 data: ', data)
可以看出,我們想要解密,需要傳遞如下參數(shù):appId、sessionKey、encryptedData和iv,其中appId就是我們當(dāng)前小程序的appId,encryptedData和iv是我們通過wx.getShareInfo()方法獲取到的,還有一個參數(shù)sessionKey是未知的,那么這個參數(shù)要如何獲取呢?
我們接著看加密數(shù)據(jù)解密算法的文檔:
通過該文檔,我們知道sessionKey是通過wx.login()獲取的,進(jìn)入登錄憑證校驗接口,我們可以發(fā)現(xiàn)該方法的調(diào)用流程:
通過該圖,我們知道我們想要獲取sessionKey,需要首先調(diào)用wx.login()方法,將返回的code作為參數(shù)傳遞給服務(wù)器的一個接口,用以獲取sessionKey,服務(wù)器接口如何封裝呢,這里也給出了說明:
注:如果沒有封裝服務(wù)器獲取sessionKey,可以先使用這個官方地址做測試,需要注意的是這里我們獲取的code值只能使用一次。
到這里,sessionKey就可以成功獲取了。
介紹完這些,內(nèi)容有點(diǎn)多,我們再重新梳理一遍:
- 我們在界面初始化的時候,調(diào)用wx.login()方法,將該方法返回的code作為參數(shù)傳遞給服務(wù)器即可(沒有封裝服務(wù)器接口,可暫時使用微信提供的接口做測試,不推薦),用來獲取sessionKey,并將獲取到的sessionKey的值保存到data中。
- 在微信的分享方法onShareAppMessage中,我們依次調(diào)用wx.showShareMenu()和wx.getShareInfo()方法,獲取分享到群返回的encryptedData和iv。
- 從data中取出sessionKey,將其和encryptedData、iv、appId作為參數(shù)傳遞給解密方法var pc = new WXBizDataCrypt(appId, sessionKey)和var data = http://www.wxapp-union.com/pc.decryptData(encryptedData , iv),進(jìn)而通過data獲取相應(yīng)解密信息。
到這里,微信中涉及到的三種不同方式的分享方法就介紹完了,如有問題,歡迎留言。
相關(guān)案例查看更多
相關(guān)閱讀
- 汽車回收管理
- 云南網(wǎng)站建設(shè)哪家好
- 生成海報
- APP
- 汽車報廢回收管理軟件
- 開發(fā)框架
- 昆明做網(wǎng)站建設(shè)的公司排名
- 云南軟件定制
- 網(wǎng)站建設(shè)費(fèi)用
- 出入小程序
- 云南小程序開發(fā)制作
- 云南建設(shè)廳官方網(wǎng)站
- 網(wǎng)站建設(shè)方法
- 網(wǎng)絡(luò)公司報價
- 網(wǎng)站建設(shè)價格
- SEO
- 云南小程序被騙蔣軍
- 汽車報廢回收
- 云南網(wǎng)站建設(shè)招商
- 云南網(wǎng)站建設(shè)公司排名
- 網(wǎng)站建設(shè)高手
- 云南小程序開發(fā)費(fèi)用
- 網(wǎng)站建設(shè)制作
- 云南網(wǎng)站建設(shè)公司
- 制作一個小程序
- 曲靖小程序開發(fā)
- 小程序開發(fā)
- 云南網(wǎng)站建設(shè)哪家公司好
- 排名
- 云南網(wǎng)站建設(shè)電話