实战应用WPS WebOffice开放平台服务

概述

根据公司的业务需要,主要功能是在线编辑文档,前端的小伙伴进行的技术调研,接入的是WPS WebOffice,这里只阐述技术介入的步骤、流程和遇到的坑进行的一些总结。

实践

WPS WebOffice 开放平台进行认证

在开始之前,需要在WPS WebOffice 开放平台进行注册和认证,添加应用,申请成功后如下图所示:

在这里插入图片描述

开发和接入

在开始编写代码之前,有三个关键概念要提前了解 webClient(前端客户端)、 WpsServers(Wps服务)、CrmServers(服务端),请求流程: 前端客户端请求Wps服务,Wps服务请求服务端,进行通知、回调操作。

具体实现,图中左侧是我们具体业务逻辑,右侧是Wps服务请求我们的服务端:

在这里插入图片描述

1.配置路由:WPS WebOffice

开放平台url都是官方定义好的,用路径拼接好的,服务端需要定义一个全局${file_id}来进行通信,强烈推荐在服务端配置自定义路由,这样的实现简单便捷,也可以在Nginx使用重定向进行解决,参数通过截取Url得到。

/** wps 在线文档自定义路由 */
$route['v3/3rd/files/(:any)'] = 'wps/test/files/$1/$2/$3';
$route['v3/3rd/users'] = 'wps/test/users';
$route['v3/3rd/notify'] = 'wps/test/notify';

2.预览

在前端预览的时候,Wps服务文件信息、文件权限、文件下载地址、用户信息4个接口,返回格式要和文档上的一致,不然会产生权限不足的错误,查找起来也是很困难,在这里也说一下接口说明:

120.92.55.139 - - [24/Oct/2024:07:23:57 +0800] "GET /v3/3rd/users?user_ids=45 HTTP/1.1" 200 89 "-" "Go-http-client/1.1"
120.92.55.139 - - [24/Oct/2024:07:23:57 +0800] "GET /v3/3rd/files/HT4319/permission HTTP/1.1" 200 131 "-" "Go-http-client/1.1"
120.92.55.139 - - [24/Oct/2024:07:24:08 +0800] "GET /v3/3rd/files/HT4319 HTTP/1.1" 200 177 "-" "Go-http-client/1.1"
120.92.55.139 - - [24/Oct/2024:07:24:08 +0800] "GET /v3/3rd/files/HT4319/download HTTP/1.1" 200 137 "-" "Go-http-client/1.1"
  • /v3/3rd/users :获取用户信息接口,用于在线文件操作中的显示和记录。
  • /v3/3rd/files/HT4319/permission : 获取当前文件可以操作的权限
  • /v3/3rd/files/HT4319 :获取文件的基本信息、创建文件用户、大小等等
  • /v3/3rd/files/HT4319/download:最容易出错的是这个接口,这个接口中要返回的是文档可以下载的url路径,Wps服务要来这里获取文件数据流。

3.保存

在操作的过程中,每保存一次文件,他就会请求URL一次,我们使用的这个版本用的是三阶段提交,具体阐述如下:

120.92.55.139 - - [24/Oct/2024:07:37:56 +0800] "GET /v3/3rd/files/HT4319/upload/prepare HTTP/1.1" 200 86 "-" "Go-http-client/1.1"
120.92.55.139 - - [24/Oct/2024:07:37:56 +0800] "POST /v3/3rd/files/HT4319/upload/address HTTP/1.1" 200 186 "-" "Go-http-client/1.1"
120.92.55.139 - - [24/Oct/2024:07:37:56 +0800] "GET /v3/3rd/files/HT4319/permission HTTP/1.1" 200 131 "-" "Go-http-client/1.1"
120.92.55.139 - - [24/Oct/2024:07:37:56 +0800] "POST /v3/3rd/files/HT4319/upload/complete HTTP/1.1" 200 179 "-" "Go-http-client/1.1"
  • /v3/3rd/files/HT4319/upload/prepare : 这个接口的作用是Wps服务与本地服务端协商摘要算法,有 md5 sha1 sha256三个选项,多接口的交互需要保持一致。
  • /v3/3rd/files/HT4319/upload/address : 这个接口的作用是在编辑的过程中,告诉Wps服务保存文件的Api,Wps服务以文件流的形式来进行请求
  • /v3/3rd/files/HT4319/upload/complete:Wps服务保存完成后,回调这个接口

以我的/v3/3rd/files/HT4319/upload/address接口为例,返回的完整Json结构,作用是在文件在线编辑的过程中去同步请求url的指定接口。

{"code": 0,"data": {"method": "PUT","url": "https://www.stark.com/api/laborcontract_wps/save_wps","params": {"file_id": "HT4308","name": ""}},"message": ""
}

有两个注意的点,开发过程中,最大的难点就在这里了。
1、save_wps接收的参数是通过upload/address params 传递的,我的$this->posts是参数数组
2、接收到的文件流,重写到指定地址,覆盖之前的文件地址 $savePath

public function save_wps()
{#接收参数$file_id = isset($this->posts['file_id']) ? $this->posts['file_id'] : '';//接收文件流,覆盖文件$stream = file_get_contents('php://input');file_put_contents($savePath, $con);
}

4.其他

文档重命名、水印、用户列表、会话通知其他接口就比较简单,不在这里一一赘述了,如果有需要的可以私信我,给我留言。

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

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

相关文章

【NOIP提高组】加分二叉树

【NOIP提高组】加分二叉树 💐The Begin💐点点关注,收藏不迷路💐 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整…

安全见闻(3)

脚本语言 lua php go(也算吧) python JavaScript nodejs这种主流脚本就很多了,这些编程语言都可以写一些脚本性的病毒,python可以编写木马,js也可以编写木马,比如beefxss,了解本质的人都知道那个就是相当于js写的木马…

TensorFlow面试整理-TensorFlow 结构与组件

TensorFlow 的结构和组件是其功能强大、灵活性高的重要原因。掌握这些结构和组件有助于更好地理解和使用 TensorFlow 构建、训练和部署模型。以下是 TensorFlow 关键的结构与组件介绍: 1. Tensor(张量) 定义:张量是 TensorFlow 中的数据载体,类似于多维数组或矩阵。张量的…

深入了解Vue Router:基本用法、重定向、动态路由与路由守卫的性能优化

文章目录 1. 引言2. Vue Router的基本用法2.1 基本配置 3. 重定向和命名路由的使用3.1 重定向3.2 命名路由 4. 在Vue Router中如何处理动态路由4.1 动态路由的概念4.2 如何处理动态路由4.3 动态路由的懒加载 5. 路由守卫的实现与性能影响5.1 什么是路由守卫?5.2 路由…

Redis 持久化 总结

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 持久化 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 持久化 & 总结》(学习总结/最新最准/持续更新)《Redis & …

通信协议——UART

目录 基础概念串行&并行串行的优缺点 单工&双工 UART基本概念时序图思考:接收方如何确定01和0011 基础概念 串行&并行 串行为8车道,并行为1车道 串行的优缺点 通行速度快浪费资源布线复杂线与线之间存在干扰 单工&双工 单工&#xf…

WPF:Binding数据绑定

WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows客户端应用程序的UI框架。数据绑定是WPF中一个强大的功能,它允许UI元素与数据源之间建立连接,使得UI能够自动显示数据源中的数据,并且当数据源中…

NewStarCTF 2023 公开赛道 Web week1-week2

目录 week1 泄漏的秘密 Begin of Upload Begin of HTTP ErrorFlask ​Begin of PHP R!C!E! EasyLogin ​week2 游戏高手 include 0。0 ez_sql ​Unserialize? Upload again! R!!C!!E!! week1 泄漏的秘密 使用ctf-scan.py(https://gith…

EasyExcel文件导入与导出

1.文件导入 导入校验 public class BoyListener extends AnalysisEventListener {List<String> names new ArrayList<>();/*** 每解析一行&#xff0c;回调该方法**/Overridepublic void invoke(Object data, AnalysisContext analysisContext) {//校验名称Stri…

上传Gitee仓库流程图

推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台&#xff0c;为用户提供强大、易用的作图工具&#xff01;支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…

Qt中使用线程之QConcurrent

QConcurrent可以实现并发&#xff0c;好处是我们可以不用单独写一个类了&#xff0c;直接在类里面定义任务函数&#xff0c;然后使用QtConcurrent::run在单独的线程里执行一个任务 1、定义一个任务函数 2、定义1个QFutureWatcher的对象&#xff0c;使用QFutureWatcher来监测任…

用Python将Office文档(Word、Excel、PowerPoint)批量转换为PDF

在处理不同格式的Office文档&#xff08;如Word、Excel和PowerPoint&#xff09;时&#xff0c;将其转换为PDF格式是常见的需求。这种转换不仅确保了文件在不同设备和操作系统间的一致性显示&#xff0c;而且有助于保护原始内容不被轻易修改&#xff0c;非常适合于正式报告、提…

Redisson(三)应用场景及demo

一、基本的存储与查询 分布式环境下&#xff0c;为了方便多个进程之间的数据共享&#xff0c;可以使用RedissonClient的分布式集合类型&#xff0c;如List、Set、SortedSet等。 1、demo <parent><groupId>org.springframework.boot</groupId><artifact…

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…

多楼层智能穿梭:转运机器人助力制造业转型升级

针对当前喷砂产品人工转运存在的劳动强度大、效率低、安全隐患多等问题&#xff0c;本方案提出设计一套高效、安全、多楼层自动转运系统&#xff0c;采用潜伏式转运机器人结合电梯与升降平台技术&#xff0c;实现平面类、立柱类及小工件类喷砂产品的自动化、智能化转运。 项目需…

Docker 与 Yocto

Yocto项目为什么需要Docker Yocto 项目并不直接依赖 Docker&#xff0c;但在某些情况下使用 Docker 可以为 Yocto 项目提供以下具体且实际的好处&#xff1a; 1. 环境一致性&#xff1a; Yocto 构建需要一个稳定且一致的开发环境。不同的 Linux 发行版可能会有不同的库版本、…

深入探索电能消耗数据:基于机器学习的分析与洞察

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Java | Leetcode Java题解之第504题七进制数

题目&#xff1a; 题解&#xff1a; class Solution {public String convertToBase7(int num) {if (num 0) {return "0";}boolean negative num < 0;num Math.abs(num);StringBuffer digits new StringBuffer();while (num > 0) {digits.append(num % 7);…

【数据结构】包装类简单认识泛型-Java

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都给了一个包装类型 基本数据类型和对应的包装类 基本数据类型包装类ByteByteshortShortint Integer longLongfloatFloatdoubleDoublec…

JSON字符串转换成Map<String, Object>形式

要将给定的JSON字符串data转换成Map<String, Object>形式&#xff0c;可以使用Java中的JSON库来解析这个字符串。常用的JSON处理库有org.json、Gson&#xff08;Google提供的&#xff09;和Jackson。下面是使用这三种库的方法示例。 使用 org.json 如果选择使用org.jso…