vue项目跳转微信小程序

379 阅读2分钟

背景

公司移动端项目需要从项目跳转至某小程序,故记录此开发过程。

准备

  1. 微信公众号开发者文档
  2. 微信JS接口签名校验者工具

开始

  1. 首先需有后端配合,拿到wx.config所需的参数
/**
 * nxt - 获取微信相关配置
 */
export const apiGetWechatConfig = (pageUrl) => {
  const url = `xxx?url=${pageUrl}`
  return demoRequest({
    url,
    method: 'GET'
  })
}
  1. cdn引入文件jweixin-1.6.0.js
  <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
  1. 在页面中添加标签,并在main.js中添加相关配置,使 Vue 忽略wx-open-launch-weapp。

如文档中所说,wx-open-launch-weapp是一个用于页面中提供可跳转指定小程序的按钮,使用后点击此标签可跳转小程序。
并且注意文档中开放对象的条件:
1.已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。
2/已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。

属性名描述备注
username跳转小程序的id以gh_开头的id,不要取错
path跳转小程序的路径及参数以.html结尾
Vue.config.ignoredElements = ['wx-open-launch-weapp']
  <wx-open-launch-weapp
    username="gh_xxx"
    path="demo/home.html"
  >
    <script type="text/wxtag-template">
      <div
      style="width: 98px; height: 34px; background: #4685FF; border-radius: 4px; color: #FFF"
      class="demo-btn">
      测试按钮
      </div>
    </script>
  </wx-open-launch-weapp>
</div>
  1. wx.config配置
import wx from 'weixin-jsapi'
created() {
  this.setWechatConfig()
}
setWechatConfig() {
  const url = location.href.split('#')[0]
  apiGetWechatConfig(url).then(res => {
  const data = res.data
  wx.config({
    // eslint-disable-line
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
    appId: data.appId, // 必填,公众号的唯一标识
    timestamp: data.timestamp, // 必填,生成签名的时间戳
    nonceStr: data.nonceStr, // 必填,生成签名的随机串
    signature: data.signature, // 必填,签名
    jsApiList: [
      'wx-open-launch-weapp',
      'onMenuShareAppMessage',
      'onMenuShareTimeline',
      'onMenuShareQQ',
      'onMenuShareWeibo',
      'startRecord',
      'stopRecord',
      'openLocation'
    ],  // 必填,需要使用的JS接口列表
    openTagList: ['wx-open-launch-weapp'] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
  })
}
  1. 完成

当调试模式弹出config:ok的字样,证明配置校验成功,此时将debug: true改为false即可。

常见问题与解决方案

1. [WXTAG] [JSCORE] The slot <template> or <script type="text/wxtag-template"> of <wx-open-launch-weapp> is missing

使用<script type="text/wxtag-template">而不是<template>标签

2. invalid signature

跟后端确认返回的signature正确性

3. 样式无法写在外面中,只能在script标签内内链写或者行内样式

4. 如果开发标签内需要使用图片,不能用本地图片,得用外网可以访问的图片,不然会不显示