设置-1688绑定
1688绑定模块功能解析文档
1. 模块架构概述
1688绑定模块采用前后端分离架构,前端使用Vue 3 Composition API实现用户界面和交互逻辑,后端使用Spring Boot实现API接口和业务逻辑。模块通过OAuth2协议与1688开放平台进行交互,实现账号授权和数据获取。
1.1 系统架构图
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 前端页面 │────>│ 后端API │────>│ 聚石塔服务 │────>│ 1688开放平台│
│ (Vue 3) │<────│ (Spring Boot)│<────│ │<────│ │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
1.2 核心组件
- 前端组件:
wimoor-ui/src/views/erp/purchase/open1688/bind/index.vue- 1688绑定主组件 - API服务:
wimoor-ui/src/api/erp/purchase/open1688/purchasealibabaApi.js- 前端API调用服务 - 后端控制器:
AlibabaController.java- 处理1688相关的HTTP请求 - 服务实现:
PurchaseAlibabaAuthServiceImpl.java- 实现1688授权和业务逻辑 - 数据模型:
PurchaseAlibabaAuth.java- 1688授权数据实体
2. 前端代码结构分析
2.1 主组件结构
前端主组件 index.vue 包含以下核心部分:
-
模板部分:
- 账号列表表格,展示已绑定的1688账号信息
- 绑定账号弹窗,用于添加或编辑账号信息
- 操作按钮,包括绑定、延期授权和删除
-
脚本部分:
- 响应式数据:账号信息、弹窗状态、表单数据等
- 生命周期钩子:组件挂载时获取授权列表并处理授权回调
- 核心方法:
getauthList():获取已绑定账号列表showDialog():打开绑定/编辑弹窗bindAuth():触发授权流程goUrl():获取1688授权链接并跳转removeBind():删除已绑定账号GetRequest():处理1688授权回调
2.2 API调用服务
purchasealibabaApi.js 定义了与后端交互的API方法:
getAuthData():获取授权账号列表get1688Url():获取1688授权链接logicDelete():删除授权账号refreshAuthData():刷新授权数据bindAuthData():绑定授权数据submitname():提交账号信息updateName():更新账号名称
3. 后端代码结构分析
3.1 控制器层
AlibabaController.java 提供以下API端点:
POST /submitname:提交或更新1688账号信息GET /bindAuthData:绑定1688授权数据GET /refreshAuthData:刷新1688授权数据GET /getAuthData:获取已绑定的1688账号列表GET /delete:删除并解绑1688账号GET /get1688Url:获取1688授权链接GET /message:接收1688平台的消息通知
3.2 服务实现层
PurchaseAlibabaAuthServiceImpl.java 实现了以下核心功能:
saveAction():保存或更新1688账号信息bindAuth():处理1688授权流程,获取访问令牌refreshAuthToken():使用refresh_token刷新访问令牌refreshAuthRefreshToken():刷新refresh_token本身getAuthData():获取已绑定的账号列表updateAlibaba():更新账号状态(删除)callApi():调用1688开放平台APIcheckAuthorityToken():检查并刷新授权令牌
3.3 数据模型
PurchaseAlibabaAuth 实体包含以下核心字段:
id:主键IDshopid:店铺IDname:账号名称appkey:1688应用密钥appsecret:1688应用密钥accessToken:访问令牌refreshToken:刷新令牌accessTokenTimeout:访问令牌过期时间refreshTokenTimeout:刷新令牌过期时间aliId:1688用户IDresourceOwner:1688账号名称memberId:1688会员IDisDelete:删除状态
4. 核心功能实现
4.1 授权流程实现
-
前端触发授权:
- 用户点击"绑定账号"按钮
- 填写账号名称和开发者信息(可选)
- 点击"授权"按钮,调用
bindAuth()方法 bindAuth()调用getcode()获取账号IDgetcode()调用后端/submitname接口创建账号记录- 成功后调用
goUrl()获取1688授权链接
-
1688平台授权:
- 前端打开1688授权页面
- 用户登录1688账号并确认授权
- 1688平台重定向回系统,并携带授权码
-
后端处理授权回调:
- 前端
GetRequest()方法解析URL参数,获取授权码 - 调用后端
/bindAuthData接口,传入授权码和状态 - 后端
bindAuth()方法使用授权码获取访问令牌和刷新令牌 - 保存令牌信息到数据库
- 前端
-
前端更新状态:
- 授权成功后,前端显示成功提示
- 刷新账号列表,显示新绑定的账号
4.2 令牌管理实现
-
令牌获取:
- 在
bindAuth()方法中,使用授权码调用1688开放平台的/system.oauth2/getToken接口 - 获取
access_token、refresh_token、expires_in等信息 - 计算令牌过期时间并保存到数据库
- 在
-
令牌刷新:
- 在
refreshAuthToken()方法中,使用refresh_token调用1688开放平台的/system.oauth2/getToken接口 - 获取新的
access_token和过期时间 - 更新数据库中的令牌信息
- 在
-
令牌检查:
- 在
checkAuthorityToken()方法中,检查访问令牌是否过期 - 若过期,自动调用
refreshAuthToken()刷新令牌
- 在
4.3 账号管理实现
-
账号列表:
- 前端调用
getauthList()获取已绑定账号列表 - 后端
getAuthData()方法查询数据库,返回未删除的账号 - 前端表格展示账号信息,包括名称、状态、到期时间等
- 前端调用
-
账号编辑:
- 用户点击编辑图标,打开编辑弹窗
- 修改账号名称或开发者信息
- 点击"保存"按钮,调用后端
/submitname接口更新账号信息
-
账号删除:
- 用户点击"删除"按钮
- 前端调用
removeBind()方法 - 后端
updateAlibaba()方法将账号标记为删除状态
-
延期授权:
- 用户点击"延期授权"按钮
- 前端调用
goUrl()方法重新获取授权链接 - 重复授权流程,获取新的令牌和过期时间
5. API调用流程
5.1 授权链接获取流程
sequenceDiagram
participant 前端
participant 后端
participant 1688平台
前端->>后端: GET /get1688Url?redirectUrl=xxx&id=xxx
后端->>后端: 构建授权URL
后端-->>前端: 返回授权URL
前端->>1688平台: 打开授权页面
1688平台->>前端: 用户授权后重定向,携带code
前端->>后端: GET /bindAuthData?code=xxx&state=xxx
后端->>1688平台: 调用getToken接口获取令牌
1688平台-->>后端: 返回令牌信息
后端->>后端: 保存令牌信息到数据库
后端-->>前端: 返回绑定成功信息
5.2 令牌刷新流程
sequenceDiagram
participant 前端
participant 后端
participant 1688平台
前端->>后端: GET /refreshAuthData?id=xxx
后端->>后端: 检查refresh_token是否过期
后端->>1688平台: 调用getToken接口,使用refresh_token
1688平台-->>后端: 返回新的access_token
后端->>后端: 更新令牌信息和过期时间
后端-->>前端: 返回刷新成功信息
5.3 API调用流程
sequenceDiagram
participant 前端
participant 后端
participant 聚石塔
participant 1688平台
前端->>后端: 调用业务API(如获取物流信息)
后端->>后端: 检查令牌是否有效
后端->>聚石塔: 转发API请求
聚石塔->>1688平台: 调用1688开放平台API
1688平台-->>聚石塔: 返回API响应
聚石塔-->>后端: 转发响应数据
后端-->>前端: 返回处理结果
6. 技术要点和难点
6.1 OAuth2授权实现
- 技术要点:实现完整的OAuth2授权流程,包括授权码获取、令牌交换、令牌刷新
- 实现方案:使用1688开放平台的OAuth2.0协议,通过授权码模式获取令牌
- 难点:处理授权回调和令牌管理,确保授权流程的安全性和可靠性
6.2 令牌生命周期管理
- 技术要点:管理访问令牌和刷新令牌的生命周期,确保API调用的连续性
- 实现方案:
- 记录令牌的过期时间
- 定期检查并自动刷新令牌
- 处理令牌过期的异常情况
- 难点:平衡令牌刷新的频率和系统性能,避免频繁刷新令牌导致的API调用限制
6.3 聚石塔服务集成
- 技术要点:通过聚石塔服务与1688开放平台进行通信
- 实现方案:使用HTTP客户端调用聚石塔的转发接口,处理API请求和响应
- 难点:处理聚石塔服务的异常情况,确保API调用的稳定性
6.4 多账号管理
- 技术要点:支持绑定和管理多个1688账号
- 实现方案:为每个账号创建独立的授权记录,分别管理令牌和状态
- 难点:确保多账号场景下的令牌管理和API调用的正确性
7. 代码优化建议
7.1 前端代码优化
-
错误处理优化:
- 当前代码在API调用失败时缺少统一的错误处理机制
- 建议实现全局错误处理拦截器,统一处理API错误
-
状态管理优化:
- 当前使用本地响应式数据管理状态,对于复杂场景可能不够灵活
- 建议使用Pinia或Vuex进行状态管理,提高代码可维护性
-
代码结构优化:
- 将授权流程相关的逻辑抽取为独立的composable函数
- 提高代码的复用性和可读性
7.2 后端代码优化
-
安全性优化:
- 当前代码中AppKey和AppSecret直接存储在数据库中
- 建议对敏感信息进行加密存储,提高安全性
-
异常处理优化:
- 当前代码中异常处理较为简单,缺少详细的错误信息
- 建议实现统一的异常处理机制,提供更详细的错误信息
-
性能优化:
- 当前代码中存在重复的数据库查询操作
- 建议使用缓存机制减少数据库查询,提高系统性能
-
代码结构优化:
- 将1688 API调用相关的代码抽取为独立的服务
- 提高代码的模块化程度和可维护性
7.3 架构优化
-
微服务架构:
- 考虑将1688相关的功能抽取为独立的微服务
- 提高系统的扩展性和可维护性
-
异步处理:
- 对于耗时的API调用,考虑使用异步处理方式
- 提高系统的响应速度和并发处理能力
-
监控和告警:
- 实现对1688授权状态和API调用的监控
- 当授权过期或API调用失败时及时告警
8. 总结
1688绑定模块是Wimoor系统中实现与1688平台对接的重要功能模块,通过OAuth2协议实现了账号授权和数据获取。模块采用前后端分离架构,前端使用Vue 3实现用户界面,后端使用Spring Boot实现业务逻辑,通过聚石塔服务与1688开放平台进行通信。
模块的核心功能包括账号绑定、授权管理、令牌管理、账号列表展示和账号管理等。通过这些功能,用户可以方便地绑定和管理1688账号,实现与1688平台的无缝对接,为后续的采购操作和物流信息查询提供了基础。
在技术实现上,模块解决了OAuth2授权流程、令牌生命周期管理、多账号管理等技术难点,为系统的稳定运行提供了保障。同时,通过代码优化建议的实施,可以进一步提高模块的性能、安全性和可维护性。