Vue項(xiàng)目引入js-sdk藐鹤,實(shí)現(xiàn)微信自定義分享

H5微信分享瓤檐,就是在微信瀏覽器頁面,點(diǎn)擊右上角的三個(gè)小點(diǎn)點(diǎn)娱节,底部彈窗選擇分享方式挠蛉。
默認(rèn)的分享 標(biāo)題是當(dāng)前頁面的標(biāo)題,圖標(biāo)是默認(rèn)圖標(biāo)肄满,描述信息是當(dāng)前頁的鏈接地址

10101.png

0101.png

功能立項(xiàng)

假期結(jié)束之后谴古,把功能實(shí)現(xiàn)跟產(chǎn)品詳細(xì)解釋了一番..嗯质涛,挺復(fù)雜,那就暫時(shí)擱置吧掰担,等有時(shí)間再弄...
7月份汇陆,炎炎三伏天悄悄來臨,大家手頭上的工作带饱,似乎都有了那么一些輕松毡代,時(shí)間多了一絲空空,自定義分享勺疼,安排起來教寂。
官方文檔,瞄起來执庐,頭疼頭疼疼
微信JS-SDK是微信公眾平臺(tái) 面向網(wǎng)頁開發(fā)者提供的基于微信內(nèi)的網(wǎng)頁開發(fā)工具包酪耕。

通過使用微信JS-SDK,網(wǎng)頁開發(fā)者可借助微信高效地使用拍照耕肩、選圖因妇、語音问潭、位置等手機(jī)系統(tǒng)的能力猿诸,同時(shí)可以直接使用微信分享、掃一掃狡忙、卡券梳虽、支付等微信特有的能力,為微信用戶提供更優(yōu)質(zhì)的網(wǎng)頁體驗(yàn)灾茁。

使用基本就是下面幾個(gè)步驟


1111.png

前期準(zhǔn)備

運(yùn)維操作公眾號(hào)后臺(tái)窜觉,綁定安全域名

先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫“JS接口安全域名”。
項(xiàng)目背景:創(chuàng)建兩個(gè)項(xiàng)目北专,發(fā)布3個(gè)網(wǎng)站禀挫,
A是統(tǒng)一登錄入口,單獨(dú)的項(xiàng)目拓颓,單獨(dú)的站點(diǎn) xxx.aaa.com语婴。
B和C是通用商城,共用同一個(gè)項(xiàng)目驶睦,根據(jù)不同的商城地址砰左,動(dòng)態(tài)配置商城的api請(qǐng)求地址等。
B是榮榮商城 场航,發(fā)布單獨(dú)站點(diǎn) xxx.bbb.com缠导,C是愛愛商城,發(fā)布單獨(dú)站點(diǎn) xxx.ccc.com溉痢。
A登錄 通過后臺(tái)對(duì)賬號(hào)的匹配僻造,返回相應(yīng)的網(wǎng)站地址 xxx.bbb.com 或者 xxx.ccc.com憋他,拼接登錄返回的token,然后通過window.href鏈接到新網(wǎng)站地址髓削,在通用商城項(xiàng)目中举瑰,區(qū)分商城,獲取商城匹配蔬螟,截取token拿到用戶信息此迅。
重點(diǎn)0:配置安全域名時(shí) 三個(gè)網(wǎng)站的域名都需要配置 : xxx.aaa.com,xxx.bbb.com旧巾,xxx.ccc.com
重點(diǎn)1:公眾號(hào)后臺(tái)大概需要有兩個(gè)地方配置域名耸序,運(yùn)維自己看著辦

vue項(xiàng)目編碼接入js-sdk,接口聯(lián)調(diào)

引入js-sdk鲁猩,有三種方式

在需要調(diào)用JS接口的頁面引入如下JS文件坎怪,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js
如需進(jìn)一步提升服務(wù)穩(wěn)定性,當(dāng)上述資源不可訪問時(shí)廓握,可改訪問:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)搅窿。
備注:支持使用 AMD/CMD 標(biāo)準(zhǔn)模塊加載方法加載
前兩個(gè)方式引入 在index.html文件中通過script標(biāo)簽引入
方式1:直接通過script 引用官網(wǎng)提供的鏈接地址

 <script
      type="text/javascript"
      src="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"
    ></script>

方式2:把js-sdk下載,保存到本地 static目錄中隙券,然后引用本地js
保存js文件的步驟:打開js-sdk 提供的js鏈接地址男应,把內(nèi)容copy到本地新建的js文件中,weixin-1.6.0.js

 <script type="text/javascript" src="./static/js/weixin-1.6.0.js"></script>

方式3:通過npm 安裝js-sdk

npm install weixin-js-sdk
在需要分享的頁面中引入
import wx from 'weixin-js-sdk'

在每個(gè)需要使用JS-SDK的頁面通過config注入權(quán)限驗(yàn)證配置

注意:是每個(gè)頁面都要配置config娱仔。因?yàn)関ue單頁面SPA應(yīng)用沐飘,當(dāng)每次url變化的時(shí)候,也需要進(jìn)行調(diào)用配置config

具體實(shí)現(xiàn)代碼

后端定義接口牲迫,前端傳遞當(dāng)前路徑的URL地址耐朴,給后端進(jìn)行加密,后端返回初始化配置需要的相關(guān)參數(shù)
tips:因?yàn)関ue-router默認(rèn)使用的hash模式盹憎,所以鏈接地址中包含#筛峭,在傳遞給后端進(jìn)行加密的url路徑地址,需要對(duì)# 進(jìn)行截取
url: location.href.split('#')[0]

項(xiàng)目入口js文件中陪每,導(dǎo)入WeiXinUtils影晓,初始化微信js-sdk配置
const Vue = require('vue')
import App from './App'
import store from './store'
import router from './router'
const Vuex = require('vuex')
import VueLazyLoad from 'vue-lazyload'
import wxutil from './utils/WeiXinUtils'


//注冊(cè)到vue原型上
Vue.use(VueLazyLoad)


// 微信分享配置初始化
wxutil.init();

Vue.use(Vuex)

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})
WeiXinUtils.js 封裝微信分享,利用router全局后置鉤子函數(shù)afterEach奶稠,保證每個(gè)URL切換時(shí)都能執(zhí)行接口調(diào)用 俯艰,配置config 注入配置,在回調(diào)函數(shù)wx.ready中 配置分享參數(shù)
import userApi from "../js/api/users"
import router from '../router'


//判斷是否是 微信瀏覽器
function isWxBrowser() {
  var ua = navigator.userAgent.toLowerCase();
  let isWx = ua.match(/MicroMessenger/i) == "micromessenger";
  if (!isWx) {
    return false;
  } else {
    let isWxWork = ua.match(/WxWork/i) == "wxwork";
    if (isWxWork) {
      return false;
    } else {
      return true;
    }
  }
}


const wxutil = { 
  init(){
    router.afterEach((to, from) => {//router全局后置鉤子函數(shù)
      if (isWxBrowser()) {//是微信瀏覽器
        userApi.getWechatShare({ //調(diào)用后端接口
          url: location.href.split('#')[0]
        }).then(res => {
  
          if (res.resCode == 0) {
            let data = res.resData;
            wx.config({
              debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來锌订,若要查看傳入的參數(shù)竹握,可以在pc端打開,參數(shù)信息會(huì)通過log打出辆飘,僅在pc端時(shí)才會(huì)打印啦辐。
              appId: data.appId, // 必填谓传,公眾號(hào)的唯一標(biāo)識(shí)
              timestamp: data.timestamp, // 必填,生成簽名的時(shí)間戳
              nonceStr: data.nonceStr, // 必填芹关,生成簽名的隨機(jī)串
              signature: data.signature,// 必填续挟,簽名
              jsApiList: ['checkJsApi','updateAppMessageShareData','updateTimelineShareData'] // 必填,需要使用的JS接口列表侥衬,目前只用到分享
            });
  
            wx.ready(function () {   //需在用戶可能點(diǎn)擊分享按鈕前就先調(diào)用  
              // config信息驗(yàn)證后會(huì)執(zhí)行ready方法诗祸,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個(gè)客戶端的異步操作轴总,所以如果需要在頁面加載時(shí)就調(diào)用相關(guān)接口直颅,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來確保正確執(zhí)行。對(duì)于用戶觸發(fā)時(shí)才調(diào)用的接口怀樟,則可以直接調(diào)用功偿,不需要放在ready函數(shù)中。
              wx.updateAppMessageShareData({ 
                title: data.titile, // 分享標(biāo)題
                desc: data.description, // 分享描述
                link: data.shareUrl, // 分享鏈接往堡,該鏈接域名或路徑必須與當(dāng)前頁面對(duì)應(yīng)的公眾號(hào)JS安全域名一致    http://test-logon.51czt.com
                imgUrl: data.logoPath, // 分享圖標(biāo)
                success: function () {
  
                }
              });
  
              wx.updateTimelineShareData({ 
                title: data.titile, // 分享標(biāo)題
                link: data.shareUrl, // 分享鏈接械荷,該鏈接域名或路徑必須與當(dāng)前頁面對(duì)應(yīng)的公眾號(hào)JS安全域名一致
                imgUrl: data.logoPath, // 分享圖標(biāo)
                success: function () {
                  
                }
              });
              
            });
  
            wx.error(function(res){
              // config信息驗(yàn)證失敗會(huì)執(zhí)行error函數(shù),如簽名過期導(dǎo)致驗(yàn)證失敗虑灰,具體錯(cuò)誤信息可以打開config的debug模式查看吨瞎,也可以在返回的res參數(shù)中查看,對(duì)于SPA可以在這里更新簽名瘩缆。
              console.log("錯(cuò)誤:" + res);
            });
  
          }
  
        }).catch(e => {
  
        });

      }
    })

  },
}; 
export default wxutil;

最終實(shí)現(xiàn)效果

可以自定義分享標(biāo)題关拒,分享描述信息,分享圖標(biāo)庸娱。圖標(biāo)的大小有限制,似乎是最大32k

2222.png

感悟

遇到問題不要怕谐算,先保證安全域名配置正確熟尉,然后保證后臺(tái)簽名加密正確
前后端調(diào)不通,一般都是參數(shù)的問題洲脂,盡量從后臺(tái)找問題斤儿,簽名 加密等
簽名的時(shí)效是有限制的,一段時(shí)間會(huì)過期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恐锦,一起剝皮案震驚了整個(gè)濱河市往果,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌一铅,老刑警劉巖陕贮,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異潘飘,居然都是意外死亡肮之,警方通過查閱死者的電腦和手機(jī)掉缺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戈擒,“玉大人眶明,你說我怎么就攤上這事】鸶撸” “怎么了搜囱?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柑土。 經(jīng)常有香客問我犬辰,道長,這世上最難降的妖魔是什么冰单? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任幌缝,我火速辦了婚禮,結(jié)果婚禮上诫欠,老公的妹妹穿的比我還像新娘涵卵。我一直安慰自己,他們只是感情好荒叼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布轿偎。 她就那樣靜靜地躺著,像睡著了一般被廓。 火紅的嫁衣襯著肌膚如雪坏晦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天嫁乘,我揣著相機(jī)與錄音昆婿,去河邊找鬼。 笑死蜓斧,一個(gè)胖子當(dāng)著我的面吹牛仓蛆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挎春,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼看疙,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了直奋?” 一聲冷哼從身側(cè)響起能庆,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脚线,沒想到半個(gè)月后搁胆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年丰涉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拓巧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡一死,死狀恐怖肛度,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情投慈,我是刑警寧澤承耿,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站伪煤,受9級(jí)特大地震影響加袋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抱既,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一职烧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧防泵,春花似錦蚀之、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锁右,卻和暖如春失受,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咏瑟。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工拂到, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人响蕴。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓谆焊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浦夷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • 起源: 最近公司在做一個(gè)活動(dòng)的h5頁面辜王,在微信內(nèi)打開時(shí)需要進(jìn)行微信授權(quán)劈狐,然后后端會(huì)重定向到這個(gè)頁面并且攜帶了一些參...
    joe2355閱讀 1,538評(píng)論 0 0
  • 微信公眾號(hào)項(xiàng)目介紹 當(dāng)前只對(duì)實(shí)現(xiàn)思路進(jìn)行說明,不作基礎(chǔ)介紹呐馆!詳細(xì)信息查看微信官方文檔及git地址肥缔! 實(shí)現(xiàn)功能 新關(guān)...
    快樂小碼仔閱讀 4,048評(píng)論 0 41
  • 前言 最近一直在用企業(yè)微信 JS-SDK 來開發(fā)企業(yè)微信的側(cè)邊欄,用得特別不爽汹来。主要原因是在官方文檔的客戶端那一塊...
    寫代碼的海怪閱讀 7,750評(píng)論 3 3
  • 最近接受了一個(gè)新的需求续膳,希望制作一個(gè)基于微信的英語語音評(píng)價(jià)頁面改艇。即點(diǎn)擊錄音按鈕,用戶錄音說出預(yù)設(shè)的英文坟岔,根據(jù)用戶的...
    ReeCode閱讀 9,094評(píng)論 7 15
  • 表情是什么谒兄,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息社付。高興了當(dāng)然就笑了承疲,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,435評(píng)論 2 7