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

概述

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

实践

WPS WebOffice 开放平台进行认证

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

开发和接入

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

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

1.配置路由:WPS WebOffice

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

php 复制代码
/** 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个接口,返回格式要和文档上的一致,不然会产生权限不足的错误,查找起来也是很困难,在这里也说一下接口说明:

shell 复制代码
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一次,我们使用的这个版本用的是三阶段提交,具体阐述如下:

shell 复制代码
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的指定接口。

JavaScript 复制代码
{
    "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

php 复制代码
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.其他

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

相关推荐
阳光是sunny7 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
灯澜忆梦7 小时前
GO_并发编程---定时器
开发语言·后端·golang
阳光是sunny7 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
皮皮林5518 小时前
开源实力派,给本地 AI 装上深度调研能力,一张 3090 跑到 95.7 分!
后端
努力的小雨8 小时前
把 Windows 桌面图标做成一个会自己运转的小世界
后端
武子康9 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
IT_陈寒11 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
段一凡-华北理工大学11 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
码事漫谈12 小时前
1999年的电商前夜和2026年的AI前夜 历史押韵但从不重复
后端