微信自定義分享的簽名版實(shí)現(xiàn)

如果你沒有微信公眾號韩肝,那文章就不需要看了诈悍。此文介紹的是微信新版本的分享功能祸轮,2015年1月,微信已經(jīng)拋棄了舊版本的分享侥钳。

微信的自定義分享功能适袜,是病毒式傳播的一把利劍。

demo

demo 請?jiān)谖⑿胖写蜷_
demo2 請?jiān)谖⑿胖写蜷_

分享接口應(yīng)用舷夺,最常見的莫過于公眾號文章分享苦酱。通過分享按鈕,用戶可以將自己喜歡的文章分享給微信好友给猾,也可分享到微信朋友圈疫萤。
可以在用戶分享時(shí),為其設(shè)置個(gè)性化的分享圖片敢伸、標(biāo)題扯饶、描述等,從而使分享的內(nèi)容更生動(dòng)有趣,以獲得更好的傳播效果帝际。

有時(shí)候蔓同,你可能只需要做一個(gè)H5頁面,沒有相關(guān)的后臺(tái)蹲诀。但是微信的簽名功能斑粱,又必須使用。所以脯爪,獨(dú)立的后臺(tái)是很有必要的则北,這個(gè)后臺(tái),能為任意公眾號生成簽名信息痕慢,微信的簽名只有2個(gè)小時(shí)尚揣,所有緩存簽名信息也是必須要實(shí)現(xiàn)的。

簽名 signature

然而在使用這些牛逼的功能之前掖举,有一座大山困在了開發(fā)者前面--signature快骗。

分享的 web 頁面需要先配置好微信的 js 才能正常使用分享等的功能。且看代碼塔次,

wx.config({
    appId: '', // 必填方篮,公眾號的唯一標(biāo)識(shí)
    timestamp: , // 必填,生成簽名的時(shí)間戳
    nonceStr: '', // 必填励负,生成簽名的隨機(jī)串
    signature: '',// 必填藕溅,簽名,見附錄1
    jsApiList: [] // 必填继榆,需要使用的JS接口列表巾表,所有JS接口列表見附錄2
});

參數(shù) timestampnonceStr略吨、signature 集币,都由后臺(tái)傳遞過來。不能硬編碼到頁面翠忠,因?yàn)?signature 的有效期為 2個(gè)小時(shí)惠猿。所以一個(gè)再簡單的頁面,都需要使用一個(gè)后臺(tái)前面生成來支持负间。

再看 signature 的生成方法,

  1. 配置微信公眾號
  2. 獲取access_token
  3. 獲取jsapi_ticket
  4. 簽名算法
    復(fù)雜度可以嚇尿你姜凄,算法參考微信JS-SDK官網(wǎng)政溃。簡單點(diǎn)描述
    noncestrjsapi_ticket态秧、url 等參數(shù)連接 進(jìn)行 sha1 加密董虱。微信也給出了部分語言的實(shí)現(xiàn)源碼) .

完整的實(shí)現(xiàn)

然后,生成這些東西都簡單,可怎么和頁面整合呢愤诱。 微信組件需要在頁面加載后云头,初始化 wx的配置。

1. 引入微信 JS

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
  1. 獲取簽名等參數(shù)
var sign;
  function jsonpCallback(data) {
    sign = data.sign;
    wx.config({
      debug: false,
      appId: 'wxd98888751036c960',
      timestamp: sign.timestamp,
      nonceStr: sign.nonceStr,
      signature: sign.signature,
      jsApiList: [
        // 所有要調(diào)用的 API 都要加到這個(gè)列表中
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ'
      ]
    });
  }
  // 根據(jù)當(dāng)前頁面路徑動(dòng)態(tài)獲取token淫半。 類似 url?timeline=user
  var str = "http://test.weixin.bigertech.com/api/sign?appId=wxd98888751036c960&callback=jsonpCallback&url="
  var href = encodeURIComponent(window.location.href);
  var script_elem = document.createElement("script");
  script_elem.src = str + href;
  document.body.appendChild(script_elem);

使用 JSONP的方式溃槐,傳遞參數(shù) appidurl科吭。因?yàn)橐粋€(gè)appid 可能對應(yīng)多個(gè)url昏滴,我有多個(gè)活動(dòng)頁面都需要使用到微信的分享。
因?yàn)閖s都是從上往下執(zhí)行的对人,所以再jsonp回調(diào)之后谣殊,sign 被初始化了。sign中包含著簽名牺弄、時(shí)間戳等信息姻几。

需要注意的地方

url 是變化的。 頁面分享到朋友圈后势告,微信會(huì)自動(dòng)給鏈接加上

原鏈接 http://weixin.res.meizu.com/mx5story/index.html 蛇捌,
分享到朋友圈后 http://weixin.res.meizu.com/mx5story/index.html?from=timeline&isappinstalled=0
分享給群組 http://weixin.res.meizu.com/mx5story/index.html?scene=4&from=groupmessage&isappinstalled=0

不同的url 需要再次申請一個(gè)簽名

<script type="text/javascript">
  wx.config({
    debug: true,
    appId: 'wxd98888751036c960',
    timestamp: sign.timestamp,
    nonceStr: sign.nonceStr,
    signature: sign.signature,
    jsApiList: [
      // 所有要調(diào)用的 API 都要加到這個(gè)列表中
      'onMenuShareTimeline',
      'onMenuShareAppMessage',
      'onMenuShareQQ'
    ]
  });
</script>

后端

微信也給出了實(shí)現(xiàn)邏輯培慌,后端唯一要做的豁陆,就是http請求的實(shí)現(xiàn),和簽名信息的緩存吵护。說了這么多盒音,直接上源碼吧。
微信簽名--源碼實(shí)現(xiàn)

  1. clone 源碼
  2. 安裝nodejs環(huán)境
  3. npm install
  4. config/weixin.js 中配置自己的應(yīng)用馅而,這里需要配置自己的微信公眾號祥诽,appid 和secret key。
  5. node app.js ok 已經(jīng)運(yùn)行了
  6. 實(shí)際上瓮恭,一套這種系統(tǒng)雄坪,能為無數(shù)的 微信公眾號提供簽名信息服務(wù),但是前提是你得把 secret key 給我屯蹦,但是這種做法太不安全维哈,不建議你這做。

完整的源碼

微信簽名--源碼實(shí)現(xiàn)
html 5 源碼例子

前端頁面只能在公眾號信任的域名下面運(yùn)行登澜,所以 html 5 源碼例子 在你的服務(wù)器應(yīng)該是不能運(yùn)行 的阔挠。

附件:
微信朋友圈API分享代碼自定義圖標(biāo)和分享鏈接。

微信JS-SDK 官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脑蠕,一起剝皮案震驚了整個(gè)濱河市购撼,隨后出現(xiàn)的幾起案子跪削,更是在濱河造成了極大的恐慌,老刑警劉巖迂求,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碾盐,死亡現(xiàn)場離奇詭異,居然都是意外死亡揩局,警方通過查閱死者的電腦和手機(jī)毫玖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谐腰,“玉大人孕豹,你說我怎么就攤上這事∈” “怎么了励背?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砸西。 經(jīng)常有香客問我叶眉,道長,這世上最難降的妖魔是什么芹枷? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任衅疙,我火速辦了婚禮,結(jié)果婚禮上鸳慈,老公的妹妹穿的比我還像新娘饱溢。我一直安慰自己,他們只是感情好走芋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布绩郎。 她就那樣靜靜地躺著,像睡著了一般翁逞。 火紅的嫁衣襯著肌膚如雪肋杖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天挖函,我揣著相機(jī)與錄音状植,去河邊找鬼。 笑死怨喘,一個(gè)胖子當(dāng)著我的面吹牛津畸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播必怜,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洼畅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棚赔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靠益,沒想到半個(gè)月后丧肴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胧后,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年芋浮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳快。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纸巷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眶痰,到底是詐尸還是另有隱情瘤旨,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布竖伯,位于F島的核電站存哲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏七婴。R本人自食惡果不足惜祟偷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望打厘。 院中可真熱鬧修肠,春花似錦、人聲如沸户盯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽先舷。三九已至艰管,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒋川,已是汗流浹背牲芋。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捺球,地道東北人缸浦。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像氮兵,于是被迫代替她去往敵國和親裂逐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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