H5接入企微JS-SDK,使用wx.previewFile进行文件预览

最近上项目,需求是做一个附件预览并且可以进行保存到手机、用其他应用打开的需求,用企微的JS-SDK的wx.previewFile就可以满足我目前的需求

详细的可以参考:企业微信官方文档

前端

1、在项目的index.html中添加:jweixin-1.2.0.js 文件

2、在想要使用JS-SDK的组件进行config接口注入权限验证配置,因为我这里只是目前这个组件使用,我都写到同一个vue文件中了,也可以设置成一个公共方法

javascript 复制代码
  mounted() {
    // 在页面加载的时候进行调取一下
    this.handleWxConfig();
  },
  methods: {
    handleWxConfig() {
      let url = window.location.href;
      // 为了避免url带参数的时候后端接收和前端不一致,所以我这里做了一下编码,然后让后端解码一下
      getSdkSign(encodeURIComponent(url)).then((res) => {
        let { code, data, msg } = res;
        if (code === 800) {
          /**
           * 这里的wx和jWeixin是一致的,但是控制台打印出来jWeixin的方法比较全,我就用这个了
           * 因为appId/timestamp/nonceStr/signature都需要和后端保持一致,所以都让后端传回来给前端
           */

          window.jWeixin.config({
            beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
            debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: data.appId, // 必填,企业微信的corpID,必须是本企业的corpID,不允许跨企业使用
            timestamp: data.timestamp, // 必填,生成签名的时间戳
            nonceStr: data.nonceStr, // 必填,生成签名的随机串
            signature: data.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
            jsApiList: ["previewFile"], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
          });
          window.jWeixin.ready(() => {
          	// 可以用checkJsApi来判断api是否可以用了
            window.jWeixin.checkJsApi({
              jsApiList: ["previewFile"],
              success: function (res) {
                // 以键值对的形式返回,可用的api值true,不可用为false
                // 如:{"checkResult":{"previewFile":true},"errMsg":"checkJsApi:ok"}
              },
            });
          });
          window.jWeixin.error(res => {
            console.log('------链接失败', res);
          })
        }
      });
    },
    handlePreviewUrl(fileInfo) {
        /**
         * 发现用wx.previewFile是不行的,使用以下方法就Ok了,并且你会发现在打开jweixin-1.2.0.js
         * 是没有previewFile这个方法的,但是并不影响使用
         */
        window.jWeixin.invoke('previewFile', {
          url: fileInfo.filePath,  // 是必填的
          name: fileInfo.fileName, // 是必填的
          size: fileInfo.fileSize, // 是必填的
        })
    }
}

对接遇到的问题

Q:config:signatur is not same

A:可以检查一下我们config注入还是agentConfig,两个获取权限是不一样的

相关推荐
布局呆星13 小时前
Vue Router :基础使用与嵌套路由实战
前端·javascript·vue.js
Gofarlic_oms118 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上19 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble19 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin19 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy19 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
AI人工智能+电脑小能手20 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
谁呛我名字20 小时前
JavaScript 类型转换与运算规则
javascript
郑州光合科技余经理20 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
冰暮流星21 小时前
javascript事件案例-全选框案例
服务器·前端·javascript