diff --git a/发版/2025/20250423-电商订单对接发布.md b/发版/2025/20250423-电商订单对接发布.md index 7b0e549..b340164 100644 --- a/发版/2025/20250423-电商订单对接发布.md +++ b/发版/2025/20250423-电商订单对接发布.md @@ -25,13 +25,26 @@ ## 发布说明 +### RocketMQ配置 + +#### RocketMQ Topic 创建 + +- EG_ORDER_SPI_TOPIC +- EG_WEWORK_EVENT_WEBHOOK_TOPIC + +#### RocketMQ ConsumerGroup 创建 + +- egOrderSpiConsumerGroup +- egWeworkEventWebhookConsumerGroup + ### 涉及项目 -| 项目 | 分支 | 发布顺序 | 数据库变更 | 配置变更 | 负责人 | 备注 | -|-----------------|---------------------------|------|-----------------------|-------------------------|-----|----------------------------| -| yuanmeng-engine | feat/20250429-web-satrter | 1 | | | 刘晓华 | 升级 1.0.14 | -| yuanmeng-parent | feat/20250429-web-satrter | 2 | | | 刘晓华 | 升级 1.0.14 | -| qifu-saas-eg | feat/20250304-e-commerce | 3 | [数据库脚本DDL](#数据库脚本DDL) | [Nacos配置文件](#Nacos配置文件) | 刘晓华 | 注意配置文件中需要修改的部分需要修改为对应环境的数据 | +| 项目 | 分支 | 发布顺序 | 数据库变更 | 配置变更 | 负责人 | 备注 | +|-----------------|-----------------------------|------|-----------------------|-------------------------|-----|----------------------------| +| yuanmeng-engine | feat/20250429-web-satrter | 1 | | | 刘晓华 | 升级 1.1.0 | +| yuanmeng-parent | feat/20250429-web-satrter | 2 | | | 刘晓华 | 升级 1.1.0 | +| qifu-saas-eg | feat/20250304-e-commerce | 3 | [数据库脚本DDL](#数据库脚本DDL) | [Nacos配置文件](#Nacos配置文件) | 刘晓华 | 注意配置文件中需要修改的部分需要修改为对应环境的数据 | +| pm | feature/20250428-wework-tzk | 4 | [数据库脚本DDL](#数据库脚本DDL) | [Nacos配置文件](#Nacos配置文件) | 刘晓华 | 注意配置文件中需要修改的部分需要修改为对应环境的数据 | ### 附件 @@ -67,6 +80,7 @@ CREATE TABLE `eg_order_app` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `channel` int(4) NOT NULL COMMENT '渠道:1=eBay', + `app_name` varchar(50) NOT NULL DEFAULT '' COMMENT '渠道:1=eBay', `client_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户端id', `client_secret` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户端secret', `dev_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '开发者id', @@ -254,6 +268,142 @@ CREATE TABLE `eg_spi` COLLATE = utf8mb4_general_ci COMMENT = 'SPI服务信息表' ROW_FORMAT = DYNAMIC; +-- ---------------------------- +-- Table structure for eg_wework_event_member +-- ---------------------------- +DROP TABLE IF EXISTS `eg_wework_event_member`; +CREATE TABLE `eg_wework_event_member` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `suite_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '第三方应用ID', + `auth_corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '授权企业的CorpID', + `info_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'change_contact' COMMENT '固定为change_contact', + `timestamp` bigint(20) NOT NULL COMMENT '时间戳', + `change_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'create_user' COMMENT '固定为create_user', + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '成员UserID', + `open_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '全局唯一,对于同一个服务商,不同应用获取到企业内同一个成员的OpenUserID是相同的', + `new_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '新的UserID,变更时推送(userid由系统生成时可更改一次)', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '成员名称', + `department` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '成员所在部门列表(逗号分隔)', + `main_department` int(11) NOT NULL DEFAULT 1 COMMENT '主部门', + `is_leader_in_dept` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表示所在部门是否为上级(逗号分隔),0-否,1-是', + `direct_leader` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '直属上级UserID(逗号分隔)', + `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号码', + `position` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职位信息', + `gender` tinyint(4) NOT NULL DEFAULT 0 COMMENT '性别。0表示未定义,1表示男性,2表示女性。', + `email` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `biz_mail` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业邮箱', + `status` tinyint(4) NOT NULL DEFAULT 4 COMMENT '激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业。', + `avatar` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像url', + `alias` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '成员别名', + `telephone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '座机', + `mem_change_cnt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '成员变更消息', + `create_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建人ID', + `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人名称', + `create_time` bigint(20) NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新人id', + `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人名称', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新时间', + `deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,id=是', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_user_id` (`user_id`) USING BTREE, + INDEX `idx_auth_corp_id` (`auth_corp_id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 23105705 + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci COMMENT = '成员事件表' + ROW_FORMAT = DYNAMIC; + + +-- ---------------------------- +-- Table structure for eg_wework_member +-- ---------------------------- +DROP TABLE IF EXISTS `eg_wework_member`; +CREATE TABLE `eg_wework_member` +( + `id` bigint(20) NOT NULL COMMENT '自增id', + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户唯一标识', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户姓名', + `alias` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户别名', + `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号码(带国际区号)', + `position` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职务信息', + `gender` tinyint(4) NULL DEFAULT NULL COMMENT '性别(1-男,2-女)', + `email` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业邮箱', + `biz_mail` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '腾讯企业邮箱', + `telephone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '座机号码', + `direct_leader` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '直属上级UserID', + `enable` tinyint(1) NULL DEFAULT 1 COMMENT '启用状态(1-启用,0-禁用)', + `avatar_mediaid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像媒体ID', + `address` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '办公地址', + `main_department` bigint(20) NULL DEFAULT NULL COMMENT '主部门ID', + `to_invite` tinyint(1) NULL DEFAULT 1 COMMENT '是否发送邀请', + `external_position` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '对外职务', + `create_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建人ID', + `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人名称', + `create_time` bigint(20) NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新人id', + `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人名称', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新时间', + `deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,id=是', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_user_id` (`user_id`) USING BTREE +) ENGINE = InnoDB + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci COMMENT = '企业微信成员表' + ROW_FORMAT = DYNAMIC; + + +-- ---------------------------- +-- Table structure for eg_wework_member_dept +-- ---------------------------- +DROP TABLE IF EXISTS `eg_wework_member_dept`; +CREATE TABLE `eg_wework_member_dept` +( + `id` bigint(20) NOT NULL COMMENT '自增id', + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户唯一标识', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户姓名', + `dept_id` bigint(20) NOT NULL COMMENT '部门id', + `create_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建人ID', + `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人名称', + `create_time` bigint(20) NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新人id', + `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人名称', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新时间', + `deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,id=是', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_user_dept` (`user_id`, `dept_id`) USING BTREE +) ENGINE = InnoDB + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci COMMENT = '成员部门关联表' + ROW_FORMAT = DYNAMIC; + + +-- ---------------------------- +-- Table structure for eg_wework_department +-- ---------------------------- +DROP TABLE IF EXISTS `eg_wework_department`; +CREATE TABLE `eg_wework_department` +( + `id` bigint(20) NOT NULL COMMENT '自增id', + `dept_id` bigint(20) NOT NULL COMMENT '部门id', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门名称', + `name_en` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '英文部门名称', + `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父部门id', + `create_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建人ID', + `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人名称', + `create_time` bigint(20) NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新人id', + `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人名称', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '更新时间', + `deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否删除:0=否,id=是', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_dept_id` (`dept_id`) USING BTREE, + INDEX `idx_dept_parent_id` (`dept_id`, `parent_id`) USING BTREE +) ENGINE = InnoDB + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci COMMENT = '企业微信部门表' + ROW_FORMAT = DYNAMIC; + SET FOREIGN_KEY_CHECKS = 1; ``` @@ -302,9 +452,13 @@ rocketmq: producer: group: qifu-saas-eg namespace: dev + # 发送消息超时时间,默认3000 + sendMessageTimeout: 10000 consumer: group: qifu-saas-eg namespace: dev + # 一次拉取消息最大值,注意是拉取消息的最大值而非消费最大值 + pull-batch-size: 10 qifu: eg: @@ -315,7 +469,19 @@ qifu: shipping-fulfillment-url: https://api.sandbox.ebay.com/sell/fulfillment/v1/order/{orderId}/shipping_fulfillment challenge-verification-token: 'dfcDlKJ35c693cFi90Mc3CCiu776fsfgs' notification-endpoint: 'https://wxwork.texous.cn/open/order/callback/1' - spi-consumer-group: qifuEgSpiConsumerGroup + consumer-group: + order-spi: egOrderSpiConsumerGroup + wework-event-webhook: egWeworkEventWebhookConsumerGroup + wework-map: + keyfil: + webhooks: + #- 生产 + #- - url: http://172.17.229.30:18088/api/pssystem/event/changeContact + #- 测试 + - url: http://172.17.229.30:18080/api/pssystem/event/changeContact + timeout: 6000 + events: + - change_contact yuanmeng: redis: diff --git a/发版/2025/20250513-电商应用发布材料.md b/发版/2025/20250513-电商应用发布材料.md index c1eab2b..f06896b 100644 --- a/发版/2025/20250513-电商应用发布材料.md +++ b/发版/2025/20250513-电商应用发布材料.md @@ -22,6 +22,16 @@ # 电商应用发布材料 +- 授权回调链接URL:https://#{host}/qifu-saas-eg/open/order/oauth/callback/#{channel}/#{appName} +- Webhook链接URL:https://#{host}/qifu-saas-eg/open/order/callback/#{channel}/#{appName} +- #{host}: 对应环境的域名 +- #{channel}:电商渠道 + - 1: eBay + - 2: TikTok + - 3: Amazon + - 4: Lazada + - 5: Shopee +- #{appName}: 应用名称,需要是英文,因为单个渠道可能会有多个应用,所以这边做兼容 ## 材料准备 ### eBay @@ -32,10 +42,21 @@ - 配置 endpoint: 例如 `https://xxxxx.keyfil.com/qifu-saas-eg/open/order/callback/1` 将 `xxx.keyfil.com` 改为对应的环境 - 保存即可 -### Lazada - ### Tiktok +- 需要先注册账号:https://partner-sso.tiktok.com/account/login?from=ttspc_no_login&redirectURL=%2F%2Fpartner.tiktokshop.com%2Fapproval%2Fprofile&lang=zh-CN&local_id=localID_Portal_50688815_1742884012545&userID=46044724&is_through_login=1 +- 操作界面:https://partner.tiktokshop.com/approval/profile +- 成为合作者文档:https://partner.tiktokshop.com/doc/page/63fd7443715d622a338c507f +- 创建和发布服务文档:https://partner.tiktokshop.com/doc/page/63fd7445715d622a338c509d#%E5%9B%9E%E5%88%B0%E9%A1%B6%E9%83%A8 + + +### Shopee + +### Lazada +- 发布教程:https://www.yuque.com/lazadasellerservicemarket/hoafmn/qyldgaxgtfsm5om6?singleDoc#%20%E3%80%8A%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0%E5%95%86%E7%94%A8APPKEY%E5%8F%91%E5%B8%83%E8%87%B3%E6%9C%8D%E5%8A%A1%E5%B8%82%E5%9C%BA%E6%95%99%E7%A8%8B%E3%80%8B +- 如果需要解密敏感信息需要做如下操作 + - 解密信息申请:https://eco.lazada.com/service/project?id=7377 + - 第一步需要产品介入 + - 第三步需要开发介入 ### Amazon -### Shopee diff --git a/教程/电商/20250515-电商订单对接指南.md b/教程/电商/20250515-电商订单对接指南.md new file mode 100644 index 0000000..fac3b11 --- /dev/null +++ b/教程/电商/20250515-电商订单对接指南.md @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + +# 电商订单对接指南 + +- eBay 接入指南可以查看:http://confluence.qifu.com/pages/viewpage.action?pageId=38511846 +- TikTok 接入指南可以查看:http://confluence.qifu.com/pages/viewpage.action?pageId=38512736 +- Amazon 接入指南可以查看:http://confluence.qifu.com/pages/viewpage.action?pageId=38512738 +- Lazada 接入指南可以查看:http://confluence.qifu.com/pages/viewpage.action?pageId=38512740 + +## 使用南北流量网关对接电商平台 + +### 接口交互流程 + +#### 电商用户授权流程 + +![](https://picture.texous.cn/blog/20250310161855028.png) + +#### 接口交互流程 + +![](https://picture.texous.cn/blog/20250310164117594.png) + +### 添加依赖 + +```xml + + + + + com.yuanmeng.qifu + qifu-saas-eg-client + 1.0.13 + + + + + com.yuanmeng.qifu + qifu-saas-eg-spi + 1.0.13 + + + +``` + +### 注册SPI服务(注册之后才会有 webhook 请求) + +#### spi包中包含的自动注册 + +- qifu-saas-eg-spi 已经整合了自动注册功能。 +- 默认以 spring.application.name 作为服务名在程序启动时发起注册 +- 可以做特殊配置: +- ```yaml + qifu: + eg: + spi: + enable: true + enable-spi-register: true + spi-infos: + - type: 1 + server-code: ${spring.application.name} + server-name: ${spring.application.name} + server-description: '测试服务' + ``` + - type:1=订单同步SPI + - server-code:唯一标识,卖家授权的时候使用 + - server-name:服务名称,SPI feign调用服务名 + +#### 手动注册 + +- 使用 `RemoteSpiService.addSpi` 来进行注册 +- 可以关闭自动注册 +- ```yaml + qifu: + eg: + spi: + enable-spi-register: false + ``` + +### 卖家授权(必须) + +#### 第一步:关联卖家授权应用(必须) + +- `RemoteOrderService.linkApp(channel, sellerId, region, orderAppId, spiServerCodes)` +- channel`(required)`: 渠道,参考 `OrderChannelEnum` code字段 +- sellerId`(required)`:卖家id,卖家唯一标识,业务自定义 +- region`(required)`:所属区域,请看 `RemoteOrderService.linkApp()` 接口文档注释 +- orderAppId`(optional)`:关联的授权应用,没传由系统负载获取 +- spiServerCodes`(optional)`:spi回调应用编码,多个用, 分割,没有时不会做 webhook +- **示例:** +- ```shell + curl -X POST --location "http://localhost:8933/order/app/link?channel=4&sellerId=keyfil001®ion=Vietnam" \ + -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE3MzEzODIxNzksInRlbmFudElkIjo3LCJuaWNrbmFtZSI6IuWImOaZk-WNjiIsImV4cCI6MTczMTQyNTM3OSwiaWF0IjoxNzMxMzgyMTc5LCJ1c2VySWQiOjEzODM3MjksImp0aSI6ImYyMzQ1NDgxNWQ0NTRkNzk4MGQ2ZjQwMGQ2NWFlMzBkIn0.QjFcqlGACbR9VZXEyQhmuP-JTJTT7ILmP8FeNdGJcJI" + ``` + +#### 获取授权链接(必须) + +- `RemoteOrderService.authAuthorizeUrl(Integer channel, String sellerId)` +- **示例:** +- ```shell + curl -X GET --location "http://localhost:8933/order/oauth/authorize?channel=4&sellerId=keyfil001" \ + -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE3MzEzODIxNzksInRlbmFudElkIjo3LCJuaWNrbmFtZSI6IuWImOaZk-WNjiIsImV4cCI6MTczMTQyNTM3OSwiaWF0IjoxNzMxMzgyMTc5LCJ1c2VySWQiOjEzODM3MjksImp0aSI6ImYyMzQ1NDgxNWQ0NTRkNzk4MGQ2ZjQwMGQ2NWFlMzBkIn0.QjFcqlGACbR9VZXEyQhmuP-JTJTT7ILmP8FeNdGJcJI" + ``` + +#### 获取accessToken(回调链接为业务链接时必须) + +- +`RemoteOrderService.authAccessToken(Integer channel, String appName, String code, String spapiOauthCode, String shopId, String mainAccountId, String state)` +- **示例:** +- ```shell + curl -X GET --location "http://localhost:8933/open/order/oauth/callback/4?code=0_132783_8fmfr7mGBVhjyFt7aycC8R784464&state=1922598474703364098" + ``` + +#### 授权状态(必须)(快过期时提醒用户重新授权) + +- **在授权后需要查询授权状态,授权状态快过期时需要提醒用户重新授权** +- `RemoteOrderService.oauthStatus(Integer channel, String sellerId)` +- **示例:** +- ```shell + curl -X GET --location "http://localhost:8933/order/oauth/status?channel=4&sellerId=keyfil001" + ``` + +#### 手动同步(可选) + +- 手动触发订单同步操作 +- `RemoteOrderService.syncOrder(OrderSyncReq req)` +- **示例:** +- ```shell + curl -X POST --location "http://localhost:8933/order/sync" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE3MzEzODIxNzksInRlbmFudElkIjo3LCJuaWNrbmFtZSI6IuWImOaZk-WNjiIsImV4cCI6MTczMTQyNTM3OSwiaWF0IjoxNzMxMzgyMTc5LCJ1c2VySWQiOjEzODM3MjksImp0aSI6ImYyMzQ1NDgxNWQ0NTRkNzk4MGQ2ZjQwMGQ2NWFlMzBkIn0.QjFcqlGACbR9VZXEyQhmuP-JTJTT7ILmP8FeNdGJcJI" \ + -d '{ + "channel": 4, + "sellerId": "keyfil001", + "startTimeMillis": 1742529814000 + }' + ``` + +#### 自动同步 + +- 每一个小时会进行一次订单同步。cron:`0 0 0/1 * * ?` + +### 编写SPI处理逻辑 + +#### 开放接口 + +- SPI通过自动注册接口 `/sync/order/change` 来实现 webhook 请求接收 +- 需要程序开放 `/sync/order/change` 接口供 `qifu-saas-eg` 回调使用 + +#### 编写回调信息处理逻辑 + +- 实现 `OrderSyncHandler` +- **示例:** +- ```java + @Slf4j + @Component + public class OrderSyncHandlerImpl implements OrderSyncHandler { + + @Override + public Boolean handle(SpiOrderReq req) { + log.info("channel: {}", req.getChannel()); + log.info("sellerId: {}", req.getSellerId()); + log.info("orders: {}", req.getSpiOrders()); + + for (SpiOrderReq.SpiOrder spiOrder : req.getSpiOrders()) { + if (spiOrder.getOldOrder() == null) { + // TODO 新订单处理逻辑 + log.info("new order handler: order info: {}", spiOrder.getNewOrder()); + + } else { + // TODO 更新订单逻辑 + log.info("update order handler: old order info: {}", spiOrder.getOldOrder()); + log.info("update order handler: new order info: {}", spiOrder.getNewOrder()); + } + } + return Boolean.TRUE; + } + + } + ``` \ No newline at end of file diff --git a/材料/01-IDEA优化配置.md b/材料/01-IDEA优化配置.md new file mode 100644 index 0000000..7ede419 --- /dev/null +++ b/材料/01-IDEA优化配置.md @@ -0,0 +1,34 @@ +# IDEA优化配置 + +## Terminal修改为GitBash + +- 配置路径:`Settings > Tools > Terminal` + - ![](https://picture.texous.cn/blog/20250514173518633.png) +- 支持中文显示 + - 修改 git bash 配置:`Git安装目录 > etc > bash.bashrc` + - ![](https://picture.texous.cn/blog/20250514173728719.png) + +## 通用注释模板配置 +- 配置路径 `Settings > File and Code Templates > includes > File Header` + - ![](https://picture.texous.cn/blog/20250514174200628.png) + - ```java + /** + * insert description here + * + * @author liuxiaohua + * @since ${DATE} + */ + ``` + +## 常用插件列表 +![](https://picture.texous.cn/blog/20250514174512217.png) + +## 自定义快捷键配置 +### Git Merge +- 配置路径 `Settings > Keymap` + - ![](https://picture.texous.cn/blog/20250514174814281.png) + - `Ctrl + ,` +### 界面配置 +- 配置路径 `右上角空白处 > 右键 > Customize Toolbar...` + - ![](https://picture.texous.cn/blog/20250514175118678.png) + - ![](https://picture.texous.cn/blog/20250514175230706.png) \ No newline at end of file diff --git a/草稿/00-本地快捷指令.md b/草稿/00-本地快捷指令.md index 19d1775..6f861df 100644 --- a/草稿/00-本地快捷指令.md +++ b/草稿/00-本地快捷指令.md @@ -3,23 +3,23 @@ #### 查看集群信息 ```shell #- 查看集群信息 -C:\Programs\Developer\ktctl_0.3.7\kubectl.exe cluster-info +C:/Programs/Developer/ktctl_0.3.7/kubectl.exe cluster-info ``` #### 启动Connect ```shell -C:\Programs\Developer\ktctl_0.3.7\ktctl.exe connect --namespace qifu-develop --kubeconfig C:\Documents\Workspace\Env\.kube\kubeconfig.yaml +C:/Programs/Developer/ktctl_0.3.7/ktctl.exe connect --namespace qifu-develop --kubeconfig C:/Documents/Workspace/Env/.kube/kubeconfig.yaml ``` #### 启动mesh服务 ```shell #- 启动mesh -C:\Programs\Developer\ktctl_0.3.7\ktctl.exe mesh qifu-saas-eg --namespace qifu-develop --expose 8933:8933 --versionMark ym-version:liuxiaohua --kubeconfig C:\Documents\Workspace\Env\.kube\kubeconfig.yaml +C:/Programs/Developer/ktctl_0.3.7/ktctl.exe mesh qifu-saas-eg --namespace qifu-develop --expose 8933:8933 --versionMark ym-version:liuxiaohua --kubeconfig C:/Documents/Workspace/Env/.kube/kubeconfig.yaml ``` #### 资源清理 ```shell -C:\Programs\Developer\ktctl_0.3.7\ktctl.exe clean --namespace qifu-develop --kubeconfig C:\Documents\Workspace\Env\.kube\kubeconfig.yaml +C:/Programs/Developer/ktctl_0.3.7/ktctl.exe clean --namespace qifu-develop --kubeconfig C:/Documents/Workspace/Env/.kube/kubeconfig.yaml #- --dryRun 只打印要删除的Kubernetes资源名称,不删除资源 #- --thresholdInMinus value 清理至少已失联超过多长时间的Kubernetes资源 (单位:分钟,默认值:15)