国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微信 jssdk 邏輯在 vue 中的運用

anRui / 3047人閱讀

摘要:微信在中的簡單使用以上是微信官方給出的示例代碼,但是對于實際項目使用,還需要進一步對代碼進行封裝。

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

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

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

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

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

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

# utils/
.
├── common.js            # 通用函數
└── lib
    └── wechat           # 微信相關代碼
        ├── auth         # 微信用戶登陸獲取信息相關代碼
        │?? ├── auth.js
        │?? └── index.js
        ├── config       # jssdk 初始化相關代碼
        │?? └── index.js
        ├── helper.js    # 微信相關操作
        └── share        # 分享接口相關代碼
            └── 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
  });
}

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

// 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;

  // 簽名驗證
  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(() => {
      // 初始化目標接口
      onMenuShareAppMessage(wechatShareConfig);
      onMenuShareTimeline(wechatShareConfig);
    });
  });
}

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

// 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); // 切換標題
  next();
});

這樣一來,會顯得 .vue 清爽很多,不會有太多業務邏輯之外的代碼。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99246.html

相關文章

  • 使用vue開發微信公眾號下SPA站點的填坑之旅

    摘要:原文見我的博客,點擊進入使用開發微信公眾號下站點的填坑之旅本文為我創業過程中,開發項目的填坑之旅。作為一個技術宅男,我的項目是做一個微信公眾號,前后端全部自己搞定,不浪費國家一分錢。 原文見我的博客,點擊進入使用vue開發微信公眾號下SPA站點的填坑之旅 本文為我創業過程中,開發項目的填坑之旅。作為一個技術宅男,我的項目是做一個微信公眾號,前后端全部自己搞定,不浪費國家一分錢^_^。 ...

    yeyan1996 評論0 收藏0
  • IOS微信Vue單頁面應用JSSDK簽名失敗解決方案

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

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

    摘要:主要是用,每當用戶第一次進來時,去獲取一次簽名驗證。注意只獲取一次,這樣簽名就解決了。 vue+微信支付目錄+JSSDK簽名解決方案 遇坑如下 注意:此方法僅為個人總結,并非唯一解決方案 微信JSSDK簽名出錯 微信支付 調起支付缺少API參數 微信支付目錄配置,只有5個配置,可能超過5個地方有配置,路由規劃 微信授權回調處理 我所使用的技術 vue路由模式 history 模...

    Little_XM 評論0 收藏0
  • vue項目接入微信JSSDK的坑

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

    lieeps 評論0 收藏0

發表評論

0條評論

anRui

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<