成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

微信 jssdk 邏輯在 vue 中的運(yùn)用

anRui / 3052人閱讀

摘要:微信在中的簡(jiǎn)單使用以上是微信官方給出的示例代碼,但是對(duì)于實(shí)際項(xiàng)目使用,還需要進(jìn)一步對(duì)代碼進(jìn)行封裝。

微信 jssdk 在 vue 中的簡(jiǎn)單使用
import wx from "weixin-js-sdk";

wx.config({
  debug: true,
  appId: "",
  timestamp: ,
  nonceStr: "",
  signature: "",
  jsApiList: []
});

wx.ready(() => {
  // do something...
});

wx.error((err) => {
  // do something...
});

以上是微信官方給出的示例代碼,但是對(duì)于實(shí)際項(xiàng)目使用,還需要進(jìn)一步對(duì)代碼進(jìn)行封裝。本文基于 vue 進(jìn)行示范,其余類框架同理。

在微信公眾平臺(tái)的官方文檔中已經(jīng)指出,由于安全性考慮,需要將簽名邏輯放在后端處理,所以簽名原理不在此贅述,主要講講如何使用后端返回后的簽名調(diào)用 jssdk。在邏輯層面,由于 wx.config 方法是調(diào)用任何接口前所必須的,所以我們可以盡可能將其抽離出來多帶帶放置。

# utils/
.
├── common.js            # 通用函數(shù)
└── lib
    └── wechat           # 微信相關(guān)代碼
        ├── auth         # 微信用戶登陸獲取信息相關(guān)代碼
        │?? ├── auth.js
        │?? └── index.js
        ├── config       # jssdk 初始化相關(guān)代碼
        │?? └── index.js
        ├── helper.js    # 微信相關(guān)操作
        └── share        # 分享接口相關(guān)代碼
            └── index.js
import sdk from "weixin-js-sdk";

export function initSdk({ appid, timestamp, noncestr, signature, jsApiList }) { // 從后端獲取
  sdk.config({
    debug: process.env.VUE_APP_ENV !== "production",
    appId: appid,
    timestamp: timestamp,
    nonceStr: noncestr,
    signature: signature,
    jsApiList: jsApiList
  });
}

這樣就可以完成對(duì) jssdk 的初始化,之后可以進(jìn)行分享接口的初始化。最初的時(shí)候我想分享接口既然是可能對(duì)應(yīng)每一個(gè) url 頁(yè)面(SPA 應(yīng)用中的 view),那么就應(yīng)該在 view 中使用 mixin 混入來書寫,所以產(chǎn)生了第一版實(shí)現(xiàn)。

// example.vue
export default {
  name: "example",

  wechatShareConfig() {
    return {
      title: "example",
      desc: "example desc",
      imgUrl: "http://xxx/example.png",
      link: window.location.href.split("#")[0]
    };
  }
}
// wechatMixin.js
import { share } from "@/utils/lib/wechat/share";

// 獲取 wechat 分享接口配置
function getWechatShareConfig(vm) {
  const { wechatShareConfig } = vm.$options;
  if (wechatShareConfig) {
    return typeof wechatShareConfig === "function"
      ? wechatShareConfig.call(vm)
      : wechatShareConfig;
  }
}

const wechatShareMixin = {
  created() {
    const wechatShareConfig = getWechatShareConfig(this);
    if (wechatShareConfig) {
      share({ ...wechatShareConfig });
    }
  }
};

export default wechatShareMixin;
// utils/lib/wechat/share
import { getTicket } from "@/utils/lib/wechat/helper"; // 簽名接口
import { initSdk } from "@/utils/lib/wechat/config";
import sdk from "weixin-js-sdk";

// 接口清單
const JS_API_LIST = ["onMenuShareAppMessage", "onMenuShareTimeline"];

// 消息分享
function onMenuShareAppMessage(config) {
  const { title, desc, link, imgUrl } = config;
  sdk.onMenuShareAppMessage({ title, desc, link, imgUrl });
}

// 朋友圈分享
function onMenuShareTimeline(config) {
  const { title, link, imgUrl } = config;
  sdk.onMenuShareTimeline({ title, link, imgUrl });
}

export function share(wechatShareConfig) {
  if (!wechatShareConfig.link) return false;

  // 簽名驗(yàn)證
  getTicket(wechatShareConfig.link).then(res => {
    // 初始化 `jssdk`
    initSdk({
      appid: res.appid,
      timestamp: res.timestamp,
      noncestr: res.noncestr,
      signature: res.signature,
      jsApiList: JS_API_LIST
    });

    sdk.ready(() => {
      // 初始化目標(biāo)接口
      onMenuShareAppMessage(wechatShareConfig);
      onMenuShareTimeline(wechatShareConfig);
    });
  });
}

寫完之后乍一看似乎沒什么毛病,但是每個(gè) view 文件夾下的 .vue 都有一份微信配置顯得很是臃腫,所以第二版實(shí)現(xiàn)則是將 jssdk 初始化放在 vue-routerbeforeEach 鉤子中進(jìn)行,這樣可以實(shí)現(xiàn)分享配置的統(tǒng)一配置,更加直觀一些。

// router.js

//...
routes: [
  {
    path: "/",
    component: Example,
    meta: {
      wechat: {
        share: {
          title: "example",
          desc: "example desc",
          imgUrl: "https://xxx/example.png"
        }
      }
    }
  }
]
//...

// 初始化分享接口
function initWechatShare (config) {
  if (config) {
    share(config);
  }
}

router.beforeEach((to, from, next) => {
  const { shareConfig } = to.meta && to.meta.wechat;
  const link = window.location.href;

  if (!shareConfig) next();

  initWechatShare({ ...shareConfig, link });
  switchTitle(shareConfig.title); // 切換標(biāo)題
  next();
});

這樣一來,會(huì)顯得 .vue 清爽很多,不會(huì)有太多業(yè)務(wù)邏輯之外的代碼。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99246.html

相關(guān)文章

  • 使用vue開發(fā)微信公眾號(hào)下SPA站點(diǎn)的填坑之旅

    摘要:原文見我的博客,點(diǎn)擊進(jìn)入使用開發(fā)微信公眾號(hào)下站點(diǎn)的填坑之旅本文為我創(chuàng)業(yè)過程中,開發(fā)項(xiàng)目的填坑之旅。作為一個(gè)技術(shù)宅男,我的項(xiàng)目是做一個(gè)微信公眾號(hào),前后端全部自己搞定,不浪費(fèi)國(guó)家一分錢。 原文見我的博客,點(diǎn)擊進(jìn)入使用vue開發(fā)微信公眾號(hào)下SPA站點(diǎn)的填坑之旅 本文為我創(chuàng)業(yè)過程中,開發(fā)項(xiàng)目的填坑之旅。作為一個(gè)技術(shù)宅男,我的項(xiàng)目是做一個(gè)微信公眾號(hào),前后端全部自己搞定,不浪費(fèi)國(guó)家一分錢^_^。 ...

    yeyan1996 評(píng)論0 收藏0
  • IOS微信Vue單頁(yè)面應(yīng)用JSSDK簽名失敗解決方案

    摘要:路由守衛(wèi)內(nèi)觸發(fā)更新簽名獲取真實(shí)有效微信簽名此處需要自行處理在路由守衛(wèi)內(nèi)更新簽名,保證是使用當(dāng)前頁(yè)面,是使用目標(biāo)路由完整地址再加上域名使用簽名調(diào)用在使用的頁(yè)面通過取出緩存的微信簽名,然后進(jìn)行簽名。 背景 手機(jī)型號(hào): 型號(hào):iphone 7 / iphone xs max版本:ios 10.3.1 / ios 12.1微信版本:WeChat 6.7.3 問題還原: Vue應(yīng)用(vue-ro...

    lixiang 評(píng)論0 收藏0
  • vue+微信支付目錄+JSSDK簽名解決方案

    摘要:主要是用,每當(dāng)用戶第一次進(jìn)來時(shí),去獲取一次簽名驗(yàn)證。注意只獲取一次,這樣簽名就解決了。 vue+微信支付目錄+JSSDK簽名解決方案 遇坑如下 注意:此方法僅為個(gè)人總結(jié),并非唯一解決方案 微信JSSDK簽名出錯(cuò) 微信支付 調(diào)起支付缺少API參數(shù) 微信支付目錄配置,只有5個(gè)配置,可能超過5個(gè)地方有配置,路由規(guī)劃 微信授權(quán)回調(diào)處理 我所使用的技術(shù) vue路由模式 history 模...

    Little_XM 評(píng)論0 收藏0
  • vue項(xiàng)目接入微信JSSDK的坑

    摘要:微信說明文檔分享的坑根據(jù)的文檔,很多人都是在初始化的配置的時(shí)候,傳入的當(dāng)前的地址不正確。同樣的,給微信初始化的加入對(duì)應(yīng)的參數(shù)。 date: 2018-12-13 15:23:09 用于記錄接入微信JS-SDK的坑,以后方便查詢第一次接入公眾號(hào)微信支付、分享、定位等等的坑的時(shí)候,心里是迷茫而又恐懼。因?yàn)?,聽說坑特別多,后來發(fā)現(xiàn)自己的親身體驗(yàn)到了這一點(diǎn)。 支付的坑 1、當(dāng)前URL未注冊(cè) ...

    lieeps 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<