【公众号/小程序】微信H5跳转小程序踩过的坑!!!

打印 上一主题 下一主题

主题 1877|帖子 1877|积分 5631

功能需求

   H5 页面点击按钮后跳转到对应小程序
  开端实现方案 - 1

   使用微信 sdk 的 API navigateToMiniProgram
  代码

@/utils/wxApi.js 封装 - 微信初始化代码
  1. import wx from 'weixin-js-sdk'
  2. import { wechat_config_init_get } from '@/api/cancel.js'
  3. import { isAndroid } from '@/utils/utils'
  4. import { Toast } from 'vant'
  5. export function wxConfig() {
  6.   return new Promise((resolve, reject) => {
  7.     const url = isAndroid() ? window.location.href : window.location.href.replace(location.hash, '')
  8.     const that = this
  9.     wechat_config_init_get({ url: url })
  10.       .then(result => {
  11.         if (result.code === 200) {
  12.           const config = result.data
  13.           // that.appid = config.appid
  14.           wx.config({
  15.             debug: false,
  16.             beta: true,
  17.             appId: config.appid,
  18.             timestamp: config.timestamp,
  19.             nonceStr: config.nonceStr,
  20.             signature: config.signature,
  21.             jsApiList: [
  22.               'requestWxFacePictureVerify',
  23.               'checkIsSupportFaceDetect',
  24.               'navigateToMiniProgram'
  25.               // 所有要调用的 API 都要加到这个列表中
  26.             ]
  27.           })
  28.           wx.error(function (res) {
  29.             reject(res)
  30.             console.log(res)
  31.             // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
  32.             Toast.fail('微信配置初始化失败')
  33.           })
  34.           wx.ready(function (data) {
  35.             resolve(data)
  36.             console.log(data)
  37.           })
  38.         } else {
  39.           Toast.fail(result.code + '----' + result)
  40.         }
  41.       })
  42.       .catch(error => {
  43.         reject(error)
  44.         Toast.clear()
  45.         const msg = '获取微信配置失败!'
  46.         Toast.fail(error + msg)
  47.       })
  48.   })
  49. }
复制代码
PoliceAssistant.vue 点击按钮举行小程序跳转 代码
  1. <!-- 交警助手 -->
  2. <template>
  3.   <div class="PoliceAssistant" @click="toAI">
  4.     <img src="@/assets/images/police-assistant@2x.png" />
  5.     <span>交警助手</span>
  6.   </div>
  7. </template>
  8. <script>
  9. import wx from 'weixin-js-sdk'
  10. import { wxConfig } from '@/utils/wxApi'
  11. import { Toast } from 'vant'
  12. export default {
  13.   name: 'PoliceAssistant',
  14.   components: {},
  15.   data() {
  16.     return {}
  17.   },
  18.   computed: {},
  19.   watch: {},
  20.   created() {},
  21.   mounted() {
  22.     if (!this.$isZLbOrWxZlb()) {
  23.       wxConfig()
  24.     }
  25.   },
  26.   methods: {
  27.     toAI() {
  28.       wx.navigateToMiniProgram({
  29.         appId: '小程序的AppID',
  30.         path: 'pages/index/index', // 要跳转的小程序的页面
  31.         success(res) {
  32.           console.log('success', res)
  33.         },
  34.         fail(res) {
  35.           Toast.fail('跳转失败!')
  36.         }
  37.       })
  38.     }
  39.   }
  40. }
  41. </script>
  42. <style lang='scss' scoped>
  43. .PoliceAssistant {
  44.   position: absolute;
  45.   bottom: 10%;
  46.   right: 0;
  47.   img {
  48.     width: 85px;
  49.     height: 80px;
  50.   }
  51.   span {
  52.     position: absolute;
  53.     bottom: 15px;
  54.     left: 20px;
  55.     font-size: 10px;
  56.   }
  57. }
  58. </style>
复制代码
题目


   由图中 绿色 框框住的内容可看出,navigateToMiniProgram 并未初始化成功,找了半天题目缘故原由,试着排查权限题目
  

  • 找公众号负责人排查当前公众号是否开放当前API权限,也找不到在哪里开权限。
  • 无奈,只能使用下一个办法↓↓↓
  开端实现方案 - 2

   使用开放标签 wx-open-launch-weapp 举行H5跳转小程序
  代码

index.html
  1. <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
复制代码
vue.config.js
  1. module.exports = {
  2.   chainWebpack: config => {
  3.     config.module
  4.       .rule('vue')
  5.       .use('vue-loader')
  6.       .tap(options => {
  7.         options.compilerOptions = {
  8.           ...options.compilerOptions,
  9.           isCustomElement: tag => tag.startsWith('wx-')
  10.         }
  11.         return options
  12.       })
  13.   }
  14. }
复制代码
@/utils/wxApi.js 封装 - 微信初始化代码
  1. import wx from 'weixin-js-sdk'
  2. import { wechat_config_init_get } from '@/api/cancel.js'
  3. import { isAndroid } from '@/utils/utils'
  4. import { Toast } from 'vant'
  5. export function wxConfig() {
  6.   return new Promise((resolve, reject) => {
  7.     const url = isAndroid() ? window.location.href : window.location.href.replace(location.hash, '')
  8.     // const url = 'https://jj.gaj.ningbo.gov.cn/qxksh5/'
  9.     const that = this
  10.     wechat_config_init_get({ url: url })
  11.       .then(result => {
  12.         if (result.code === 200) {
  13.           const config = result.data
  14.           // that.appid = config.appid
  15.           wx.config({
  16.             debug: false,
  17.             beta: true,
  18.             appId: config.appid,
  19.             timestamp: config.timestamp,
  20.             nonceStr: config.nonceStr,
  21.             signature: config.signature,
  22.             jsApiList: [
  23.               'requestWxFacePictureVerify',
  24.               'checkIsSupportFaceDetect',
  25.               'navigateToMiniProgram'
  26.               // 所有要调用的 API 都要加到这个列表中
  27.             ],
  28.             openTagList: ['wx-open-launch-weapp']
  29.           })
  30.           wx.error(function (res) {
  31.             reject(res)
  32.             console.log(res)
  33.             // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
  34.             Toast.fail('微信配置初始化失败')
  35.           })
  36.           wx.ready(function (data) {
  37.             resolve(data)
  38.             console.log(data)
  39.           })
  40.         } else {
  41.           Toast.fail(result.code + '----' + result)
  42.         }
  43.       })
  44.       .catch(error => {
  45.         reject(error)
  46.         Toast.clear()
  47.         const msg = '获取微信配置失败!'
  48.         Toast.fail(error + msg)
  49.       })
  50.   })
  51. }
复制代码
PoliceAssistant.vue 点击按钮举行小程序跳转 代码
  1. <!-- 交警助手 -->
  2. <template>
  3.   <div class="PoliceAssistant" @click="toAI">
  4.     <!-- 【办法一】 -->
  5.     <!-- <wx-open-launch-weapp id="launch-btn" username="gh_开头的原始id" path="pages/index/index">
  6.       <img src="@/assets/images/police-assistant@2x.png" />
  7.       <span>交警助手</span>
  8.     </wx-open-launch-weapp> -->
  9.     <!-- 【办法2】 -->
  10.     <wx-open-launch-weapp id="launch-btn" username="gh_开头的原始id" path="pages/index/index">
  11.       <script type="text/wxtag-template">
  12.         <style>
  13.           img {
  14.             width: 85px;
  15.             height: 80px;
  16.           }
  17.           span {
  18.             position: absolute;
  19.             bottom: 15px;
  20.             left: 20px;
  21.             font-size: 10px;
  22.           }
  23.         </style>
  24.         <img src="../assets/images/police-assistant@2x.png" />
  25.         <span>交警助手</span>
  26.       </script>
  27.     </wx-open-launch-weapp>
  28.   </div>
  29. </template>
  30. <script>
  31. import wx from 'weixin-js-sdk'
  32. import { wxConfig } from '@/utils/wxApi'
  33. import { Toast } from 'vant'
  34. export default {
  35.   name: 'PoliceAssistant',
  36.   components: {},
  37.   data() {
  38.     return {}
  39.   },
  40.   computed: {},
  41.   watch: {},
  42.   created() {},
  43.   mounted() {
  44.     if (!this.$isZLbOrWxZlb()) {
  45.       wxConfig()
  46.         .then(() => {
  47.           this.initWxConfig()
  48.         })
  49.         .catch(err => {
  50.           console.error('wx config failed:', err)
  51.           Toast.fail('微信配置失败')
  52.         })
  53.     }
  54.   },
  55.   methods: {
  56.     initWxConfig() {
  57.       wx.ready(() => {
  58.         console.log('wx-jssdk 初始化成功')
  59.         this.bindWxEvents()
  60.       })
  61.       wx.error(err => {
  62.         console.error('wx-jssdk 初始化失败:', err)
  63.         Toast.fail('微信初始化失败')
  64.       })
  65.     },
  66.     bindWxEvents() {
  67.       const btnElem = document.getElementById('launch-btn')
  68.       if (btnElem) {
  69.         btnElem.addEventListener('launch', e => {
  70.           console.log('跳转小程序成功')
  71.         })
  72.         btnElem.addEventListener('error', e => {
  73.           console.log('跳转小程序失败', e.detail)
  74.           Toast.fail('跳转失败!')
  75.         })
  76.       }
  77.     },
  78.     toAI() {
  79.       // 移除这个方法中的事件绑定逻辑,因为现在在 wx.ready 后就绑定了
  80.     }
  81.   }
  82. }
  83. </script>
  84. <style lang='scss' scoped>
  85. .PoliceAssistant {
  86.   position: absolute;
  87.   bottom: 10%;
  88.   right: 0;
  89.   img {
  90.     width: 85px;
  91.     height: 80px;
  92.   }
  93.   span {
  94.     position: absolute;
  95.     bottom: 15px;
  96.     left: 20px;
  97.     font-size: 10px;
  98.   }
  99. }
  100. </style>
复制代码
题目

   PoliceAssistant.vue 文件中
  

  • 【办法一】的按钮能出来,但是点击没有任何反应
  • 【办法二】的按钮不表现
  • 再去排查开放标签题目 ↓↓↓
  

   如图所示 红色 框框住的内容,开放标签 'wx-open-launch-weapp' 没有初始化成功,微信初始化 debug 报错 {"errMsg":"configk","verifyJsApiList":["requestWxFacePictureVerify","checkIsSupportFaceDetect"],"verifyOpenTagList":[]} ,

  开启 DeepSeek 之路 ↓

搜刮报错信息

   

    参考 deepseek 给的复兴,办理方法 1-7 中只有 3 大概有题目,就去排查  查抄开放标签权限 ,但是在 接口权限 页面中并没有找到 wx-open-launch-weapp  ,怀疑是不是微信公众号性质 微信订阅号 / 微信服务号 的题目。

  

  • 继续 deepseek ↓↓↓
  微信订阅号 wx-open-launch-weapp 开放标签权限

   

   

  • 通过以上 deepseek 答复,明白大概大概是因为我们的公众号是 订阅号 的题目,
  • 想去小程序后台天生 url 跳转 ,但是找不到 工具 就找不到在哪里天生 url 跳转
  • 继续deepseek ↓↓↓
  小程序后台找不到工具栏

   

   

  • 最后 后端配合天生小程序跳转 url
  最终办理办法

   调用后端接口天生 url 直接跳转 url 所在打开小程序
获取加密URLLink
  @/api/common.js
  1. import request from '@/utils/request'
  2. /** 获取宁波AI小程序地址 **/
  3. export function getUrlLink(params) {
  4.   return request({
  5.     url: '/application/miniProgram/getUrlLink?path=/pages/index/index',
  6.     method: 'get',
  7.     params
  8.   })
  9. }
复制代码
PoliceAssistant.vue 点击按钮举行小程序跳转 代码
  1. <!-- 交警助手 -->
  2. <template>
  3.   <div class="PoliceAssistant" @click="toAI">
  4.     <img src="@/assets/images/police-assistant@2x.png" />
  5.     <span>交警助手</span>
  6.   </div>
  7. </template>
  8. <script>
  9. import { getUrlLink } from '@/api/common'
  10. import { Toast } from 'vant'
  11. export default {
  12.   name: 'PoliceAssistant',
  13.   components: {},
  14.   data() {
  15.     return {}
  16.   },
  17.   computed: {},
  18.   watch: {},
  19.   created() {},
  20.   mounted() {},
  21.   methods: {
  22.     toAI() {
  23.       getUrlLink()
  24.         .then(res => {
  25.           if (res.data) {
  26.             window.location.href = res.data
  27.           } else {
  28.             Toast.fail('跳转小程序失败,请稍后重试!')
  29.           }
  30.         })
  31.         .catch(() => {
  32.           Toast.fail('跳转小程序失败,请稍后重试!')
  33.         })
  34.     }
  35.   }
  36. }
  37. </script>
  38. <style lang='scss' scoped>
  39. .PoliceAssistant {
  40.   position: absolute;
  41.   bottom: 10%;
  42.   right: 0;
  43.   img {
  44.     width: 85px;
  45.     height: 80px;
  46.   }
  47.   span {
  48.     position: absolute;
  49.     bottom: 15px;
  50.     left: 20px;
  51.     font-size: 10px;
  52.   }
  53. }
  54. </style>
复制代码
最终效果


别人类似的题目

https://juejin.cn/post/6932023969759363080

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表