# 入站 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 默认地址: ```text http:///xlyInterface/swagger-ui.html ``` 等价的 JSON 描述位于 `http:///xlyInterface/v2/api-docs`。 > **注意:** 项目拉取了 SpringFox jar,但没有注册 `Docket` bean(`xly-src` 中没有 `@EnableSwagger2`,也没有 `@Bean Docket api()`)。`swagger-ui.html` shell 会从 jar 的静态资源中被服务出来,但 `/v2/api-docs` 返回的描述基本为空。这里的 UI 是“依赖自带页面”,不是“已填充的 try-it-out 控制台”。如果维护人员希望列出真实 API,需要补一个 `Docket` bean。 ## 数据驱动接收器:`/interfaceDefine/*` 它和[外部 API 的 `/api/invoke`](external.md) 模式对应,但用于入站调用: | 端点 | 方法 | 用途 | |---|---|---| | `/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](external.md) 有重叠:两个服务共享 API 定义数据,只是暴露在不同 URL 上。 ## 这个服务不是什么 - **不是用 xly 的 session cookie 认证。** 第三方调用方没有用户 session。认证是每个处理器自己的事情,不是框架级统一机制。 - **不是出站调用通道。** 出站分发(xly 调用伙伴)走 `xlyApi` 的 `/interfaceDefine/callthirdparty/*` 或 `/thirdparty/*` 控制器。这里有重复是有意为之:入站和出站有完全不同的安全姿态。