vue2.0 Hash模式下實現微信分享

1,經過後臺,獲取accessToken 和 簽名jsApiTicket,並寫入瀏覽器緩存(能夠寫在app.vue中)vue

<script type="text/ecmascript-6">
import Store from 'common/js/store.js';
const CODE_SUC = 1;
const CODE_ERR = 0;
export default {
  name: 'app',
  data () {
    return {
      wxToken: {
        accessToken: ""
      },
      wxJsApiTicket: {
        jsApiTicket: ""
      }
    };
  },
  created () {
    setInterval(this.getAccessToken(), 7000);
    // 接口入住權限驗證配置
  },
  components: {
    vFooter
  },
  methods: {
  // 獲取accessToken 和 簽名jsApiTicket,並寫入瀏覽器緩存 getAccessToken () { this.axios.post("/api/user/getAccessToken", { "token": null, "uid": 0, "devType": "wx" }).then((res) => { res = res.data; if (res.code === CODE_SUC) { // console.log(res.accessToken); this.wxToken.accessToken = res.accessToken; this.wxJsApiTicket.jsApiTicket = res.jsApiTicket; Store.saveAccessToken(this.wxToken); Store.saveJsApiTicket(this.wxJsApiTicket); // console.log(res.accessToken); } else if (res.code === CODE_ERR) { console.log("獲取accessToken失敗"); } }).catch((res) => { window.alert('網絡異常,登陸請求失敗'); }); } } }; </script>

 

2,上面的store.js(寫入瀏覽器緩存的文件)以下ios

const STORAGE_KEY1 = 'memberInfo';
const STORAGE_KEY2 = 'token';
const STORAGE_KEY3 = 'accessToken';
const STORAGE_KEY4 = 'jsApiTicket';

export default {
  fetchFromLocal () {
    return JSON.parse(window.localStorage.getItem(STORAGE_KEY1) || "{}");
  },

  saveToLocal (obj) {
    window.localStorage.setItem(STORAGE_KEY1, JSON.stringify(obj));
  },

  saveAccessToken (obj) {
    window.localStorage.setItem(STORAGE_KEY3, JSON.stringify(obj));
  },

  saveJsApiTicket (obj) {
    window.localStorage.setItem(STORAGE_KEY4, JSON.stringify(obj));
  }
};

  

3,mian.js中,註冊分享全局函數,並暴露出接口axios

import wx from 'weixin-js-sdk';   // 導入微信sdk
import Store from 'common/js/store.js';   // 導入store.js

// 全局註冊分享函數
Vue.prototype.wxShare = function (title, desc, link, imgUrl) {
  // 獲取簽名
  this.axios.post("/api/user/getSignature", {
    "token": null,
    "uid": 0,
    "devType": "wx",
    "ticket": Store.fetchjsApiTicket().jsApiTicket,  // 獲取瀏覽器緩存的簽名
    "url": encodeURIComponent(window.location.href.split('#')[0]) // 此處進行一次編碼
  }).then((res) => {
    res = res.data;
    if (res.code === CODE_SUC) {
      wx.config({
        debug: false,
        appId: '', // 填寫本身的appID
        timestamp: res.timestamp,
        nonceStr: res.noncestr,
        signature: res.signature,
        jsApiList: [
            'onMenuShareTimeline',
            'onMenuShareAppMessage'
        ]
      });
    } else if (res.code === CODE_ERR) {
      console.log("獲取accessToken失敗");
    }
  }).catch((res) => {
    window.alert('網絡異常,登陸請求失敗');
  });
  wx.ready(function () {
    // 分享給朋友
    wx.onMenuShareAppMessage({
      title: title, // 分享標題
      desc: desc, // 分享描述
      link: link, // 分享連接
      imgUrl: imgUrl, // 分享圖標
      type: '', // 分享類型,music、video或link,不填默認爲link
      dataUrl: '', // 若是type是music或video,則要提供數據連接,默認爲空
      success: function () {
        window.alert('已分享給朋友');
        this.axios.post("/api/product/shareStatistics", {
          "token": null,
          "uid": 0,
          "devType": "wx"
        }).then((res) => {
          res = res.data;
          if (res.code === CODE_SUC) {
            window.alert("分享返回數據成功");
          } else if (res.code === CODE_ERR) {
            console.log("獲取失敗");
          }
        }).catch((res) => {
          window.alert('網絡異常,登陸請求失敗');
        });
      },
      cancel: function () {
          // 用戶取消分享後執行的回調函數
      },
      fail: function (res) {
          window.alert(JSON.stringify(res));
      }
    });

    // 分享到朋友圈
    wx.onMenuShareTimeline({
        title: title, // 分享標題
        link: link,
        imgUrl: imgUrl, // 分享圖標
        success: function () {
            window.alert('已分享到朋友圈');
        },
        cancel: function () {
          // 用戶取消分享後執行的回調函數
          this.axios.post("/api/product/shareStatistics", {
            "token": null,
            "uid": 0,
            "devType": "wx"
          }).then((res) => {
            res = res.data;
            if (res.code === CODE_SUC) {
              window.aleryt("分享返回數據成功");
            } else if (res.code === CODE_ERR) {
              console.log("獲取失敗");
            }
          }).catch((res) => {
            window.alert('網絡異常,登陸請求失敗');
          });
        },
        fail: function (res) {
            window.alert(JSON.stringify(res));
        }
    });
  });
};

4,在相應的位置調用註冊好的wxShare (title, desc, link, imgUrl)函數,並傳入所需的值:api

   例:如下爲分享商品詳情頁面,link 爲本身拼接路徑的變量瀏覽器

this.wxShare('商品詳情' + ' ' + this.good.goodsInfo.goodsName, this.good.goodsInfo.goodsName, link, this.IMG_BASE_URL + this.good.goodsInfo.goodsImage);

 

5,特別注意:在Hash模式下,安卓中會遇到分享到朋友圈以後,點擊跳轉會首頁的狀況,此時分享的路徑與商品的真實路徑是不一致的。須要在服務器端稍微處理一下。即把index文件,從新建一個文件夾,例如static,放進去。此時分享以後的路徑,與真實路徑纔是一致的,也不會發生跳回首頁的狀況。蘋果手機則不會有這個問題。緩存

相關文章
相關標籤/搜索