入站 Webhook(xlyInterface)
xlyInterface 是三个 Spring Boot WAR 中最小的一个。它的职责是接收第三方系统推送进来的 HTTP 请求,例如微信、伙伴工厂、供应商门户,并把它们路由到 xly 处理器。入口类为 xlyInterface/src/main/java/com/xly/InterfaceApplicationBoot.java,context-path 为 /xlyInterface。
这是三个服务里唯一内置 Swagger UI 的服务,因为面向伙伴的受众最适合使用可交互的试调文档。构建依赖 io.springfox:springfox-swagger-ui:2.9.2 和 io.springfox:springfox-swagger2:2.9.2。服务运行后,UI 使用 SpringFox 默认地址:
http://<host>/xlyInterface/swagger-ui.html
等价的 JSON 描述位于 http://<host>/xlyInterface/v2/api-docs。
注意: 项目拉取了 SpringFox jar,但没有注册
Docketbean(xly-src中没有@EnableSwagger2,也没有@Bean Docket api())。swagger-ui.htmlshell 会从 jar 的静态资源中被服务出来,但/v2/api-docs返回的描述基本为空。这里的 UI 是“依赖自带页面”,不是“已填充的 try-it-out 控制台”。如果维护人员希望列出真实 API,需要补一个Docketbean。
数据驱动接收器:/interfaceDefine/*
它和外部 API 的 /api/invoke 模式对应,但用于入站调用:
| 端点 | 方法 | 用途 |
|---|---|---|
/interfaceDefine/invoke/{interfaceInvoke} |
POST | 将入站载荷分发给 {interfaceInvoke} 命名的处理器。 |
/interfaceDefine/callthirdparty/{interfaceInvoke} |
POST | 转发到已配置的出站端点。同一个 URL 在 xlyApi 的 InterfaceController 上也存在;这种重复是有意的,两个服务共享数据驱动分发器模式。 |
处理器:xlyInterface/src/main/java/com/xly/web/InterfaceController.java。
{interfaceInvoke} 路径变量会查找一条元数据行,该行声明要运行的 SQL 或存储过程、参数映射和响应形状。它和 xly 其他部分一样遵循数据驱动思路:新增入站端点靠插入数据行,而不是写 Java。
硬编码的供应商接收器
少量接收器不会经过 /interfaceDefine,因为它们必须匹配合作方固定的 URL 规格。
| 端点 | 方法 | 用途 |
|---|---|---|
/Push |
POST | 供应商(微信 / 类似系统)推送接收器。 |
/Pull |
POST | 供应商拉取模式接收器。 |
/getKey/{key} |
GET | 按伙伴命名的 key 获取公钥。 |
/getKeyTest |
GET |
/getKey 的测试模式变体。 |
/send/sendQw |
POST | 企业微信出站消息。当前分支是空实现:SendQwController 中方法体只是 return "ok";;已搭好 token 获取脚手架,但未完成。 |
处理器:xlyInterface/src/main/java/com/xly/web/WX_VendorWeb.java 和 xlyInterface/src/main/java/com/xly/wechat/test/SendQwController.java。
认证
Webhook 认证方式按伙伴而异。这里没有统一的 token 签发端点(不同于 xlyApi)。每个处理器选择自己的方案:签名 header、查询参数 secret,或基于 sysapibrand 的预共享 key 校验。接入前需要阅读对应控制器。
元数据放在哪里
/interfaceDefine/* 分发器会查询命名入站处理器的元数据行。可检查 sysapi 表族(sysapi、sysapibrand、sysapithirdparty)以及当前 schema 自动目录中的任何 interface* 表。账本信息和外部 API 有重叠:两个服务共享 API 定义数据,只是暴露在不同 URL 上。
这个服务不是什么
- 不是用 xly 的 session cookie 认证。 第三方调用方没有用户 session。认证是每个处理器自己的事情,不是框架级统一机制。
-
不是出站调用通道。 出站分发(xly 调用伙伴)走
xlyApi的/interfaceDefine/callthirdparty/*或/thirdparty/*控制器。这里有重复是有意为之:入站和出站有完全不同的安全姿态。