vue 微信公眾號網頁開發 跳轉小程序 踩坑


記錄vue3(vue2 也通用)在微信公眾號網頁開發中,跳轉微信小程序的踩坑:

步驟一:使用微信JSSDK

微信JSSDK官方說明,估計找到這篇文章的都看了文檔。
不多說,在這個步驟中,后端和前端都有各自的事情做,我分別講解各自的責任:

前端責任

引入js文件,直接在 index.html 中引用就成:

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

引入過后,你當前的瀏覽器環境會有一個全局變量wx(直接wx訪問,或者window.wxglobalThis.wx都是可以的),但是這個變量不能馬上用,必須你將當前網頁的路徑(不包括#號以及后面的路徑,包括#號前面的那個斜杠 / )傳給后端,后端根據你傳的路徑返回給你 appId、timestamp、nonceStr、signature,然后根據這些參數調用 wx.config,進行wx的初始化:

wx.config({
  debug: true, // 調試的時候打開
  appId: '', // 后端的事情
  timestamp: '', // 后端的事情
  nonceStr: '', // 后端的事情
  signature: '',// 后端的事情
  jsApiList: [] ,// 需要的能力,比如拍照、獲取信息等等,跳轉小程序不需要
  openTagList:[] // 能夠使用的標簽,也就是HTML標簽,只不過是微信自定義的。
});

有哪些標簽,看這里
由於跳轉小程序需要一個微信自定義的標簽wx-open-launch-weapp,所以上面的配置中的 openTagList 我是這樣的:

openTagList:[`wx-open-launch-weapp`]

配置后,就可以在微信中網頁中使用了

后端責任

我簡單講解:
保證微信開發是服務號,而不是訂閱號,因為只有服務號才能小程序跳轉。
首先得后端綁定域名,向微信平台獲取訪問憑證access_token,根據這個憑證再次訪問微信平台得到jsapi_ticket
然后,根據前端傳來的路徑基於jsapi_ticket進行加密,加密請看微信JSSDK官方說明
注意,vue開發的網頁,基本都是單頁面應用,比如 http://aa.baidu.com/#/aa,那么后端需要的路徑就是:http://aa.baidu.com/,注意需要最后的/是需要的,這是我踩的坑,不然前端配置初始化會失敗。所以,單頁面應用寫死路徑也可以。
還有路徑寫死的話,前端就不能在本地開發了,比如以http://localhost:8080/#/home這種,那前端也會失敗。所以可以內網穿透,並代理前端的內網地址,將代理的域名添加白名單,然后以域名的形式訪問進行調試,就可以了。

步驟二、跳轉小程序

wx配置后,就可以使用微信內置的HTML標簽了,官方的示例是這樣的:

<wx-open-launch-weapp
  id="launch-btn"
  username="gh_xxxxxxxx"
  path="pages/home/index?user=123&action=abc"
>
  <script type="text/wxtag-template">
    <style>.btn { padding: 12px }</style>
    <button class="btn">打開小程序</button>
  </script>
</wx-open-launch-weapp>

在vue2中可以用v-html渲染。但是在vue3中會編譯出錯,因為在 vue 的 template 中,不允許 script 和 style 出現。而 wx-open-launch-weapp 會有警告,但是可以渲染。
我們需要vue跳過對內部 script 和 style 的渲染:

<wx-open-launch-weapp
  id="launch-btn"
  username="gh_xxxxxxxx"
  path="pages/home/index?user=123&action=abc"
>
  <div v-is="script" type="text/wxtag-template" style="display: block">
    <div v-is="style" style="display: block">.btn { padding: 12px }</div>
    <button class="btn">打開小程序</button>
  </div>
</wx-open-launch-weapp>

v-is 會將其渲染成指定標簽,但是vue 3.1.0版本已經廢棄,將 v-is 替換成 is 就可以了,比如上面的樣式在高版本的vue3中可以這么寫:

<div is="style">.btn { padding: 12px }</div>

常見問題:

  • 樣式不出現,設定的div或者按鈕不出現,注意上面的設置style="display: block",這個是必須的,不然其渲染生成的會默認display: none
  • 按鈕點擊沒有反應,注意wx.config后會在控制台輸出信息:,注意到只有 jsApiList,而沒有 openTagList ,或者只是一個空數組,沒有["wx-open-launch-weapp"]。注意這個功能只有服務號才有,訂閱號是沒有的。
  • 不能用測試號小程序id,必須已經正式發布的小程序id


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM