实现【企业微信自建应用使用uni-app H5 开发】,并解决【uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题】

2023-11-09

目录

企业微信的开发与调试

企业微信应用主体逻辑

登录(构造网页授权链接)

企业微信SDK配置

demo案例

重要bug修复方法

总结


企业微信的开发与调试

  • 在本地开发基础代码和UI
  • 发布到测试环境进行测试,无法本地调试接口,因为web浏览器微信开发者工具不具备企业微信环境
  • 可以使用 vConsole 解决【H5端无调试面板】问题
  • Windows 按快捷键 ctrl + alt + shift + D,进入调试模式;
  • Mac 按下command + shift + control + D进入调试模式
  • 企业微信客户端开启开发者模式

企业微信应用主体逻辑

登录(构造网页授权链接)

  • 在企业微信后台配置页面入口,点击进入页面
  • 进入页面后,后端判断是否登录,未登录则定向到如此一个连接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE&callBackUrl=wechat_redirect_url

解释下上面连接

  • 定向到企业微信,获取response_type: code(userid)
response_type=code
  • 获取code后,根据redirect_uri,企业微信自动重定向到redirect_uri指定的页面
redirect_uri=REDIRECT_URI
  • 进入登录页面后,获取页面URL参数code,callBackUrl
callBackUrl=wechat_redirect_url
  • 调用登录接口进行登录,登陆成功后回跳到 callBackUrl,即回跳到原本要进入的应用

企业微信SDK配置

  1. 引入JS和JSSDK文件

    <script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
    
  2. 通过config接口注入权限验证配置,通过ready接口处理成功验证,通过error接口处理失败验证

  3. 这里我封装了一下,因为我们一个项目有多个自建应用,并且处理了uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题

  4. getEWechatSdk.js

    // uniapp集成微信JSSDK(wx、jWeixin)变量会冲突
    // 根据os(systemInfo.platform)获取企业微信SDK 变量名
    export default (platform) => {
      let eWechatSdk = ''
      switch (platform) {
        case 'ios':
          eWechatSdk = 'wx'
          break
        case 'android':
          eWechatSdk = 'jWeixin'
          break
        default: // other
          eWechatSdk = 'jWeixin'
          break
      }
      return eWechatSdk
    }
  5. setWxConfigOnReady.js
    
    import { getWeChatConfig } from '@/api/eWechat'
    import store from '@/store'
    export default (eWechatAgentTypeCode, eWechatSdkName, jsApiList = []) => {
      return new Promise((resolve, reject) => {
        getWeChatConfig({ url: window.location.href, eWechatAgentTypeCode }).then(({ flag, data }) => {
          if (flag) {
            const wxConfig = data
            !window?.[eWechatSdkName]?.config && store.dispatch('eWechat/setWxConfigError', true)
            window?.[eWechatSdkName]?.config({
              beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
              debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
              appId: wxConfig.appId, // 必填,企业微信的corpID
              timestamp: wxConfig.timestamp, // 必填,生成签名的时间戳
              nonceStr: wxConfig.nonceStr, // 必填,生成签名的随机串
              signature: wxConfig.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
              jsApiList: [...store.state?.eWechat?.defaultJsApiList, ...jsApiList] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
            })
            window?.[eWechatSdkName]?.ready(() => {
              resolve()
            })
            window?.[eWechatSdkName]?.error(function(error) {
              uni.showToast({
                title: 'config信息验证失败',
                icon: 'none'
              })
              reject(error)
            })
          } else {
            reject()
          }
        })
      })
    }
    

demo案例

如实现 打开会话

  onLoad() {
    this.eWechatSdk = this.$store.state.app.eWechatSdk
  },
  onReady() {
    this.getWxConfigOnReady()
  },
  methods: {
    // 设置企业微信SDK配置
    getWxConfigOnReady() {
      setWxConfigOnReady(3, '', ['openEnterpriseChat']).then(() => {
        this.wxConfigOnReady = true
      })
    },

    // 看看是谁
    seeWhoItIs(row) {
      this.currentRow = row
      this.openEnterpriseChat(this.eWechatSdk)
    },

    // 获取企业微信 agentConfig 然后 去打开会话
    openEnterpriseChat(eWechatSdk) {
      const that = this
      getWeChatAgentConfig({ url: window.location.href, eWechatAgentTypeCode: 3 }).then(({ flag, data }) => {
        if (flag) {
          const wxAgentConfig = data
          // 设置企业微信 agentConfig
          window?.[eWechatSdk].agentConfig({
            corpid: wxAgentConfig.appId, // 必填,企业微信的corpID
            agentid: wxAgentConfig.agentId, // 必填,企业微信的应用id (e.g. 1000247)
            timestamp: wxAgentConfig.timestamp, // 必填,生成签名的时间戳
            nonceStr: wxAgentConfig.nonceStr, // 必填,生成签名的随机串
            signature: wxAgentConfig.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
            jsApiList: that.$store.state?.eWechat?.defaultJsApiList, // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
            success: () => {
              window?.[eWechatSdk].openEnterpriseChat({
                // 注意:userIds和externalUserIds至少选填一个。内部群最多2000人;外部群最多500人;如果有微信联系人,最多40人
                userIds: '', // 参与会话的企业成员列表,格式为userid1;userid2;...,用分号隔开。
                externalUserIds: that.currentRow.eWechatExternalUserid, // 参与会话的外部联系人列表,格式为userId1;userId2;…,用分号隔开。
                groupName: '', // 会话名称。单聊时该参数传入空字符串""即可。
                chatId: '', // 若要打开已有会话,需指定此参数。如果是新建会话,chatId必须为空串
                success: function(res) {
                  that.retrieveShow = false
                  console.log('openEnterpriseChat', res)
                  if (res.errMsg !== 'openEnterpriseChat:ok') {
                    that.$refs.uToast.show({
                      title: '跳转聊天界面失败',
                      type: 'error'
                    })
                  }
                  console.log('chatId', res.chatId) // 返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
                  // 回调
                },
                fail: function(res) {
                  if (res.errMsg.indexOf('function not exist') > -1) {
                    alert('版本过低请升级')
                  }
                }
              })
            },
            fail: function(res) {
              if (res.errMsg.indexOf('function not exist') > -1) {
                that.$refs.uToast.show({
                  title: '版本过低请升级',
                  type: 'error'
                })
              }
            }
          })
        }
      })
    }
  }

重要bug修复方法

  

总结

  •  所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url【仅需调用一次】,对于变化url的SPA(single-page application)的web app可在每次url变化时进行调用)。
  • 封装注入配置信息 wx.config 经过统一方法封装setWxConfigOnReady,抛出Promise。

  • 在调用setWxConfigOnReady之后做你要做的事情

  • uni-app集成微信JSSDK(wx、jWeixin)变量会冲突,根据os(systemInfo.platform)获取企业微信SDK 变量名
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现【企业微信自建应用使用uni-app H5 开发】,并解决【uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题】 的相关文章

随机推荐

  • pytorch5-各种常用激活函数

    import matplotlib pyplot as plt import torch from torch import nn x torch linspace 6 6 10 sigmoid nn Sigmoid sigmoid激活函数
  • logback--基础--04--配置--appender

    logback 基础 04 配置 appender 代码位置 https gitee com DanShenGuiZu learnDemo tree master logback learn 1 根节点 lt configuration g
  • android Launcher学习总结

    一 Launcher功能介绍 Launcher简称HomeScreen 是android手机加载完毕后第一个启动的应用程序 它负责除应用本身操作外的所有操作 包括有几个桌面 点击应用程序图标启动应用程序 长时间按桌面出现上下文菜单 长按桌面
  • 骑士周游问题

    骑士周游问题 1 马踏棋盘问题 骑士周游问题 实际上是图的深度优先搜索 DFS 的应用 2 如果使用回溯 就是深度优先搜索 来解决 假如马儿踏了53个点 如图 走到了第53个 坐标 1 0 发现已经走到尽头 没办法 那就只能回退了 查看其他
  • python实现按键精灵找色点击功能,使用pywin32和Pillow库

    Python图片处理模块PIL pillow pywin32的主要作用 1 捕获窗口 2 模拟鼠标键盘动作 3 自动获取某路径下文件列表 4 PIL截屏功能 找色点击功能思路 抓取当前屏幕快照 指定一个坐标和颜色 如果坐标的颜色符合 则点击
  • 在Vue2中使用Swiper

    由于兼容性问题 使用的是Swiper4 首先是安装 npm i swiper 4 在组件中引入 import swiper dist js swiper import swiper dist css swiper css import Sw
  • css01

    1 css基础认知 CSS 叫 层叠样式表 用来 给html页面修改样式 可以让页面更美观 css的书写位置 内嵌式
  • C++:替换文本文件中的某些字符

    include
  • linux开机dracut界面_dracut 基本介绍

    dracut 维基 https dracut wiki kernel org index php Main Page http www 360doc com content 13 0428 09 12139495 281449877 sht
  • JVM——垃圾回收器

    JVM 垃圾回收器 按照工作模式分 可以分为并发式垃圾回收器和独占式垃圾回收器 并发式垃圾回收器与应用程序线程交替工作 以尽可能减少应用程序的停顿时间 独占式垃圾回收器 stop the world 一旦运行 就停止应用程序中的所有用 户线
  • Qt 在循环中超时跳出

    常见的一个需求 在一段循环中 给定一个最大运行时间 当循环时间超出时 终止 常用于一些工控场合 对节拍有要求的项目 在此简单的做一个总结记录 主要使用Qt的 QElapsedTimer 类 调用QElapsedTimer中的成员函数elap
  • MySQL技术内幕 InnoDB存储引擎 学习笔记 第八章 备份与恢复

    备份方法 1 热备 在数据库运行中直接备份 对正在运行的数据库没有任何影响 这种方式在MySQL官方手册中称为Online Backup 2 冷备 在数据库停止的情况下备份 这种备份最简单 一般只需拷贝相关的数据库物理文件即可 这种方式在M
  • Vnc配置

    2017 04 15 1 在terminal中输入vncconfig 弹出小窗 勾选对应选项 注意 不要关闭这个小窗 不要关闭这个小窗 不要关闭这个小窗 2 vncconfig nowin 在linux选中文字后 无需其他按键 直接在win
  • 智慧农业物联网系统解决方案

    一 方案背景 随着城市的发展 人们对于生活水准的要求也越来越高 对于食物的品质需求也越来越高 我作为世界农业大国 农业的发展优势慢慢降低 智慧化农业将带来一次新的农业结构改革 农业的根本问题是效率不高 效益不强 效能不够 原因在于各生产要素
  • Python自动操作 GUI 神器——PyAutoGUI

    我们以前讲过怎样使用 Python 在浏览器中实现页面自动化操作 不管用哪种方式实现 都是通过定位页面中的元素来进行相应的操作 今天我们来聊一聊如何在桌面实现自动化操作 与浏览器页面自动化操作类似 桌面自动化操作也是需要定位鼠标在桌面的位置
  • map的常用用法详解

    头文件 include
  • 基于S函数的BP神经网络PID控制器及simulink仿真

    基于S函数的BP神经网络PID控制器及simulink仿真 文章目录 文章来源和摘要 S函数的编写格式和运行步骤 simulink模型结构 S函数模型初始化部分代码理解 S函数模型更新部分 S函数模型输出部分 S函数完整代码附录 文章来源和
  • 第三方网站/系统使用微信扫码登录

    微信扫码登录网站 微信开放平台 在我们做某个平台或者系统时 都需要有一个登录功能 传统的用户名 密码登录模式看起来似乎并没有手机扫码直接登录来的方便 那么在前端实现上 如何实现微信扫码登录呢 授权流程 第三方发起微信授权登录请求 微信用户允
  • 病例对照研究中,如何对年龄、性别、教育程度进行频数匹配?

    病例对照研究中 如何对年龄性别进行频数匹配 案例一 两组被试匹配 案例二 三组被试匹配 背景 使用默认匹配方法 衡量匹配效果 调整参数 其他匹配方法 参考 案例一 两组被试匹配 案例二 三组被试匹配 背景 我经常遇到的数据情形是 有两组被试
  • 实现【企业微信自建应用使用uni-app H5 开发】,并解决【uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题】

    目录 企业微信的开发与调试 企业微信应用主体逻辑 登录 构造网页授权链接 企业微信SDK配置 demo案例 重要bug修复方法 总结 企业微信的开发与调试 在本地开发基础代码和UI 发布到测试环境进行测试 无法本地调试接口 因为web浏览器