企业微信消息模板通过中转页面(h5)判断跳转pc还是跳小程序

news2024/10/7 0:27:47

需求:甲方要根据不同的端跳转不同端的详情页面,为什么要这样,是应为每次在PC端点击消息,都要扫码登录进入小程序,不想进入小程序,要打开PC端

1、在pc端的微信中点击消息,则打开PC后台管理系统
2、如果是在手机微信上打开,则进入到小程序内部对应的页面

分析

1、触发这个跳转的地方在哪?
2、微信的消息模板是否有这个点击跳转的事件进行判断是PC还是手机
3、如果是PC需要做单点登录,否则即使是跳转了也每次都要登录
4、当前模板如果不支持是否需要换模板进行

首先看模板 【这是企业微信消息模板】

刚开始就是用的这个模板,你会发现这个消息模板不支持监测点击事件,就无法进行判断是 判断是PC还是手机端,所以之前的假设就无效了
看参数说明有个page字段,但是你会发现有这么一段字【仅限本小程序内的页面】,说明该消息模板所配置的页面地址,必须是小程序内部的,
否则就无法跳转到对应的页面(别问为什么,问就是我试了,直接说页面不存在)

在这里插入图片描述
在这里插入图片描述

好了当前模板消息不能用了,那就看看换一个模板是否可以,然后就找到了这个【模板卡片消息】

找到之后你会发现,它有两个点击的地方,模板中显示的是企业微信官网,一个是跳转小程序,而且还有跳转的url
欸嘿那是不是就不需要前端啥事了,那我不就可以一个放pc端的地址,一个放小程序的地址

在这里插入图片描述

想得美,资本家的嘴脸怎么可以让你如此轻松就解决了,资本家:不行就要一个地址,点击根据操作系统来进行判断是手机还是pc,其他的不需要,好吧你是资本家你说的算

只要一个连接进行跳转,分析一下:

  • 1、那就只能用官网的跳转,小程序的跳转地址只能是小程序内部的不行
  • 2、官网跳转那么只能是一个外部页面(h5),在这个h5页面中进行操作系统的判断
  • 3、是pc还是手机端可以通过navigator.userAgent进行判断
  • 4、难点就在h5页面中调起小程序

如何在h5中调起小程序 在文档中发现有个方法可以wx.invoke可以调起小程序

  • 在该方法使用前必须得先进行一些配置
  • 1、config 企业的配置
  • 2、agentConfig应用的配置
  • 3、配置完上面这些才能进行调起小程序wx.invoke,否则别谈
  • 4、在进行企业的配置和应用的配置时,得掉接口去获取配置的信息数据
  • 5、config的配置
        wx.config({
            beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: result.corpId, // 必填,企业微信的corpID
            timestamp: result.timestamp, // 必填,生成签名的时间戳
            nonceStr: result.nonceStr, // 必填,生成签名的随机串
            signature: result.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
            jsApiList: ['ready', 'agentConfig', 'launchMiniprogram'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
          });

  • 6、agentConfig的配置
 wx.agentConfig({
              beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
              debug: false,
              corpid: result.corpId, // 必填,企业微信的corpid,必须与当前登录的企业一致
              agentid: result.agentId + '', // 必填,企业微信的应用id (e.g. 1000247)
              timestamp: result.agentTimestamp, // 必填,生成签名的时间戳
              nonceStr: result.agentNonceStr, // 必填,生成签名的随机串
              signature: result.agentSignature,// 必填,签名,见附录-JS-SDK使用权限签名算法
              jsApiList: ['launchMiniprogram'], //必填,传入需要使用的接口名称
              success: function (res2) {
                wx.invoke('launchMiniprogram', {
                      "appid": "XXX", // 需跳转的小程序appid
                      "path": `pages/index/index`, // 所需跳转的小程序内页面路径及参数。非必填
                    }, function (res4) {
                      if (res4.err_msg == "launchMiniprogram:ok") {
                        // 正常
                        wx.closeWindow();
                      } else {
                        // 错误处理
                      }
                    }
                );
              },
              fail: function (res3) {
                if (res3.errMsg.indexOf('function not exist') > -1) {
                  alert('版本过低请升级')
                }
              }
            });

注意事项

  • 1、在进行配置的时候得先引入引用weixin-1.2.0.js,并且必须线上引入,不能npm i XXX进行引入,public->
    index.html中引用 <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

  • 2、跳转小程序必须成功调用agentConfig,但是在待用wx.agentConfig需要引入jwxwork
    sdk <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script

  • 3、上面引用时按照开发文档中进行引用的,结果你会发现有问题,wx.agentConfig这个根本调不通,文档没有更新不能用这个,得用这个<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js" referrerpolicy="orgin"></script>

  • 4、请求签名传的url不能转义、不加参数;

  • 5、常遇错误代码:

    • 40093: jsapi签名错误(检查签名和URL是否正确)
    • 80001 可信域名不正确,或者无ICP备案(登录企微后台检查)
  • 6、在配置完wx.config后必须得用setTimeout异步操作配置wx.agentConfig的配置,否则无法调起小程序

  • 7、wx.config和wx.agentConfig需要获取签名,他们两个获取签名都是要调接口去获取的,签名的接口都不同,这个得注意

完整代码如下

index.html中引入js

<head>
  <script src="https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script>
  <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js" referrerpolicy="orgin"></script> 
</head>

中转页面h5

<!--  -->
<template>
  <div class=''>

  </div>
</template>

<script>
import {getQyWechatConfig} from '@/servicesApi/ceoMailBox'
// import wx from 'weixin-js-sdk';
const wx = window.wx


export default {
  methods: {
    getCode() {
      if (!this.isPC()) {
      this.getLogin()
      } else {
        window.location = 'PC端的地址'
      }
    },
    /**
     * 判断是否是PC端
     * @returns {boolean}
     */
    isPC() {
      let userAgentInfo = navigator.userAgent;
      let Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
      let flag = true;
      for (let v = 0; v < Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) > 0) {
          flag = false;
          break;
        }
      }
      return flag;
    },

    /**
     * 企业微信跳转小程序注意事项
     * 1、引用weixin-1.2.0.js 一定使用线上引用,引用的报agentConfig is not a function;
     * 2、public -> index 中引用 < script pt src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js">后
     * 3、跳转小程序必须先成功调用agentConfig,调用 wx.agentConfig需要引入 jwxwork sdk
     <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js">
     * 上面引用都是有问题的,只能 用这个 https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js
     * 4、请求签名传的url不能转义、不加参数;
     * 5、常遇错误代码:
     * 4.1 40093 jsapi签名错误(检查签名和URL是否正确)
     * 4.2 80001 可信域名不正确,或者无ICP备案(登录企微后台检查)
     * @returns {Promise<void>}
     */
    getLogin() {
      let url = window.location.href.indexOf('#') ? window.location.href.split('#')[0] : ''
      getQyWechatConfig({
        signUrl: url
      }).then(response => {
        const {status, data: {result}} = response
        if (+status === 200) {
          wx.config({
            beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: result.corpId, // 必填,企业微信的corpID
            timestamp: result.timestamp, // 必填,生成签名的时间戳
            nonceStr: result.nonceStr, // 必填,生成签名的随机串
            signature: result.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
            jsApiList: ['ready', 'agentConfig', 'launchMiniprogram'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
          });
          setTimeout(()=>{
            wx.agentConfig({
              beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
              debug: false,
              corpid: result.corpId, // 必填,企业微信的corpid,必须与当前登录的企业一致
              agentid: result.agentId + '', // 必填,企业微信的应用id (e.g. 1000247)
              timestamp: result.agentTimestamp, // 必填,生成签名的时间戳
              nonceStr: result.agentNonceStr, // 必填,生成签名的随机串
              signature: result.agentSignature,// 必填,签名,见附录-JS-SDK使用权限签名算法
              jsApiList: ['launchMiniprogram'], //必填,传入需要使用的接口名称
              success: function (res2) {
                wx.invoke('launchMiniprogram', {
                      "appid": "XXX", // 需跳转的小程序appid
                      "path": `pages/index/index`, // 所需跳转的小程序内页面路径及参数。非必填
                    }, function (res4) {
                      if (res4.err_msg == "launchMiniprogram:ok") {
                        // 正常
                        wx.closeWindow();
                      } else {
                        // 错误处理
                      }
                    }
                );
              },
              fail: function (res3) {
                if (res3.errMsg.indexOf('function not exist') > -1) {
                  alert('版本过低请升级')
                }
              }
            });
          },500)
          wx.error(function (err) {
            alert("显示错误" + JSON.stringify(err))
          })
        }
      });
    }
  },
//生命周期 - 挂载完成(可以访问DOM元素)
  mounted() {
    document.title = '井底的蜗牛'
    this.getCode()
    console.log(this.$route)
  },
}
</script>
<style lang='scss' scoped>
</style>

到这里代码部署上去就可以调起小程序了,当然可能会遇到一些什么域名啥的问题,这个就得进行一些配置,这个网上一大堆这里就不多做解释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/859667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Telegram营销,全球跨境电商都在研究的营销策略

Telegram 目前有7 亿月活跃用户。作为一个如此流行和广泛的即时通讯平台&#xff0c; Telegram 已成为企业和客户沟通的重要即时通讯工具。 为了使企业能够快速有效地覆盖目标受众&#xff0c;Telegram 不断改进平台&#xff0c;提供一系列功能&#xff0c;例如可定制的自动化…

内网穿透实战应用-——【如何在树莓派上安装cpolar内网穿透】

如何在树莓派上安装cpolar内网穿透 文章目录 如何在树莓派上安装cpolar内网穿透前言1.在树莓派上安装cpolar2.查询cpolar版本号3.激活本地cpolar客户端4.cpolar记入配置文件 前言 树莓派作为一个超小型的电脑系统&#xff0c;虽然因其自身性能所限&#xff0c;无法如台式机或笔…

Vue Baidu Map--自定义点图标bm-marker

自定义点图标 将准备好的图标放到项目中 使用import引入&#xff0c; 并在data中进行声明 <script> import mapIconRed from ./vue-baidu-map/img/marker_red_sprite.png export default {data() {return {mapIconRed,}}, } </script>在<bm-marker>中加入参…

【C++】map和set

目录 一、容器补充1.序列式容器与关联式容器2.键值对3.树形结构的关联式容器 二、set1.set的介绍2.set的使用3.multset的介绍4.multset的使用 三、map1.map的介绍2.map的使用3.multimap的介绍4.multimap的使用 一、容器补充 1.序列式容器与关联式容器 我们已经接触过STL中的部…

FISCO BCOS V3.0 Air建链体验——对比V2.9建链差别

前提 好久不见&#xff0c;最近因为毕业的手续等问题&#xff0c;一直都没有更新&#xff0c;FISCO BCOS第二季task挑战赛如期展开啦&#xff0c;因为毕业的问题&#xff0c;也是非常遗憾的错过了上一期的task挑战赛&#xff0c;这一期一定双倍挑战&#xff0c;hhhhhh Air版本…

spring源码之--启动入口

前面的文章搭建过spring源码&#xff0c;这里暂时不做展开讲解 spring源码搭建-略 1、那么spring的源码入口从哪查看呢&#xff1f;springboot的源码是如何启动spring的源码呢&#xff1f;追着这个疑问总结了一下如下&#xff1a; 在spring源码中直接添加一个模块&#xff0c…

Jay17 2023.8.10日报

笔记 【python反序列化】 序列化 类对象->字节流&#xff08;字符串&#xff09; 反序列化 字节流->对象 python反序列化没PHP这么灵活&#xff0c;没这么多魔术方法。 import pickle import os class ctfshow(): def init(self): self.username0 self.password0 d…

uniapp-----封装接口

系列文章目录 uniapp-----封装接口 uniapp-----分包 文章目录 系列文章目录 uniapp-----封装接口 uniapp-----分包 文章目录 前言 一、技术 二、封装步骤 1.准备 ​编辑 2.代码填充 request.js&#xff1a; api.js&#xff1a; min.js 页面使用 总结 前言 uni…

数据库优化脚本执行报错

目录 一、执行数据库优化脚本 报错... 3 解决方法&#xff1a;... 4 1、直接注释掉RECYCLE_POOLS 赋值sql语句块... 4 2、手动修改脚本... 5 附录... 6 一、执行数据库优化脚本 报错 AutoParaAdj3.5_dm8.sql 1&#xff09;manager中报错 -20001: 执行失败, -7065 数据未…

38、IPv6过渡技术

本节内容作为IPv6相关知识的最后一节内容&#xff0c;同时也作为我们本专栏网络层知识的最后一节内容&#xff0c;主要介绍从IPv4地址到IPv6地址过渡的相关技术。在这里我们只学习各类考试中常考的三种技术。 IPv4向IPv6的过渡 在前面的知识中&#xff0c;我们学习到了两种IP地…

R3LIVE项目实战(3) —双目相机与激光雷达 lidar_camera_calib联合标定

目录 3.1 lidar_camera_calib简介 3.2 环境准备 3.3 编译 3.4 运行数据集 (1) 单场景标定 (2) 多场景标定 3.5 使用您自己的传感器设置 3.5.1 采集相机图片和雷达bag数据 3.5.2 使用多场景标定 3.5.3 相机内参获取 3.5.4 运行标定程序 3.5.5 验证结果 源码地址&am…

【LeetCode】买卖股票的最佳时机含冷冻期

买卖股票的最佳时机含冷冻期 题目描述算法分析程序设计 链接: 买卖股票的最佳时机含冷冻期 题目描述 算法分析 程序设计 class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();//天数vector<vector<int>> dp(n,vector&l…

11.Eclipse 注释模板的说明及设置

1.在eclipse中点击Window——>java——>Code Style——>CodeTemplates——>Comments 2.常用Variable 3. 我的注释模板 ①Files 文件 /** * Title: ${file_name}* Description: ${todo}* author Jeremy* date ${currentDate:date(yyyy-MM-dd hh:mm:ss)} */ ②Typ…

Leetcode-每日一题【剑指 Offer 21. 调整数组顺序使奇数位于偶数前面】

题目 输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有奇数在数组的前半部分&#xff0c;所有偶数在数组的后半部分。 示例&#xff1a; 输入&#xff1a;nums [1,2,3,4]输出&#xff1a;[1,3,2,4] 注&#xff1a;[3,1,2,4] 也是正确的…

如何改造antd-vue的table支持虚拟列表功能

对于超大数据量的接口来说&#xff0c;如果前端直接一股脑的渲染出来&#xff0c;必然会导致渲染超时、操作卡顿、内存爆表、网页奔溃等情况&#xff0c;因此一般的对于大数据量的列表处理&#xff0c;无非就以下几种方式 采取分页的方式&#xff0c;减少每页的数量 比如每页1…

文旅行业苦“黄牛”久矣,消失的门票到底去哪儿了?

今年年初以来&#xff0c;文化与旅游行业强势复苏&#xff0c;明星演唱会、热门景区及文博科技馆成为了“黄牛党”肆虐的重灾区&#xff0c;高价倒卖票、代抢服务等层出不穷&#xff0c;严重扰乱了文旅票务市场秩序。 如何解决黄牛“顽疾”&#xff0c;成为了文旅行业共同关注…

福布斯发布2023云计算100强榜单,全球流程挖掘领导者Celonis排名17

近日&#xff0c;全球流程挖掘领导者Celonis入选福布斯2023 年云计算 100 强榜单&#xff0c;估值130亿美元&#xff0c;排名第17&#xff0c;Celonis已经是连续三年跻身榜单前20名。 本次榜单由福布斯与Bessemer Venture Partners和Salesforce Ventures联合发布&#xff0c;旨…

GPU虚拟化理解包含直通,k8s安装,GPU-manager

什么是VGPU? vGPU&#xff0c;即真正意义上的GPU虚拟化方案&#xff0c;就是将一块GPU卡的计算能力进行切片&#xff0c;分成多个逻辑上虚拟的GPU&#xff0c;以vGPU为单位分配GPU的计算能力&#xff0c; 并将单块GPU卡分配给多台虚拟机使用&#xff0c;使得虚拟机能够运行3D…

【C++】开源:gflags命令行参数解析库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍gflags命令行参数解析库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…