当前位置:   article > 正文

实现【企业微信自建应用使用uni-app H5 开发】,并解决【uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题】_企业微信嵌入h5页面可以用uniapp开发吗

企业微信嵌入h5页面可以用uniapp开发吗

目录

企业微信的开发与调试

企业微信应用主体逻辑

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

企业微信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文件

    1. <script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    2. <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

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

demo案例

如实现 打开会话

  1. onLoad() {
  2. this.eWechatSdk = this.$store.state.app.eWechatSdk
  3. },
  4. onReady() {
  5. this.getWxConfigOnReady()
  6. },
  7. methods: {
  8. // 设置企业微信SDK配置
  9. getWxConfigOnReady() {
  10. setWxConfigOnReady(3, '', ['openEnterpriseChat']).then(() => {
  11. this.wxConfigOnReady = true
  12. })
  13. },
  14. // 看看是谁
  15. seeWhoItIs(row) {
  16. this.currentRow = row
  17. this.openEnterpriseChat(this.eWechatSdk)
  18. },
  19. // 获取企业微信 agentConfig 然后 去打开会话
  20. openEnterpriseChat(eWechatSdk) {
  21. const that = this
  22. getWeChatAgentConfig({ url: window.location.href, eWechatAgentTypeCode: 3 }).then(({ flag, data }) => {
  23. if (flag) {
  24. const wxAgentConfig = data
  25. // 设置企业微信 agentConfig
  26. window?.[eWechatSdk].agentConfig({
  27. corpid: wxAgentConfig.appId, // 必填,企业微信的corpID
  28. agentid: wxAgentConfig.agentId, // 必填,企业微信的应用id (e.g. 1000247)
  29. timestamp: wxAgentConfig.timestamp, // 必填,生成签名的时间戳
  30. nonceStr: wxAgentConfig.nonceStr, // 必填,生成签名的随机串
  31. signature: wxAgentConfig.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  32. jsApiList: that.$store.state?.eWechat?.defaultJsApiList, // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  33. success: () => {
  34. window?.[eWechatSdk].openEnterpriseChat({
  35. // 注意:userIds和externalUserIds至少选填一个。内部群最多2000人;外部群最多500人;如果有微信联系人,最多40人
  36. userIds: '', // 参与会话的企业成员列表,格式为userid1;userid2;...,用分号隔开。
  37. externalUserIds: that.currentRow.eWechatExternalUserid, // 参与会话的外部联系人列表,格式为userId1;userId2;…,用分号隔开。
  38. groupName: '', // 会话名称。单聊时该参数传入空字符串""即可。
  39. chatId: '', // 若要打开已有会话,需指定此参数。如果是新建会话,chatId必须为空串
  40. success: function(res) {
  41. that.retrieveShow = false
  42. console.log('openEnterpriseChat', res)
  43. if (res.errMsg !== 'openEnterpriseChat:ok') {
  44. that.$refs.uToast.show({
  45. title: '跳转聊天界面失败',
  46. type: 'error'
  47. })
  48. }
  49. console.log('chatId', res.chatId) // 返回当前群聊ID,仅当使用agentConfig注入该接口权限时才返回chatId
  50. // 回调
  51. },
  52. fail: function(res) {
  53. if (res.errMsg.indexOf('function not exist') > -1) {
  54. alert('版本过低请升级')
  55. }
  56. }
  57. })
  58. },
  59. fail: function(res) {
  60. if (res.errMsg.indexOf('function not exist') > -1) {
  61. that.$refs.uToast.show({
  62. title: '版本过低请升级',
  63. type: 'error'
  64. })
  65. }
  66. }
  67. })
  68. }
  69. })
  70. }
  71. }

重要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 变量名
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/66666
推荐阅读
相关标签
  

闽ICP备14008679号