独立站API集成:REST API、Webhook、第三方系统的对接方式
一、WordPress REST API:先搞懂默认能力
WordPress 从 4.7 版本开始原生内置 REST API,不需要装插件就能用。端点格式是 https://你的域名/wp-json/wp/v2/posts,浏览器直接访问就能看到 JSON 格式的文章列表。这个 API 默认是公开的,任何人都能读你的文章、页面、媒体库。这既是好事(方便对接),也是风险(暴露内部数据)。
写操作(新建文章、改订单、加用户)需要认证。WordPress 支持两种认证方式:应用密码(Application Passwords,简单,在用户资料页生成,适合自己服务器调用)和 OAuth 2.0(复杂,适合第三方应用授权)。独立站对接自己的 CRM 用应用密码就够了,不要为了简单把 admin 账号密码硬编码在代码里。
决策框架:你需要从 WordPress 读数据还是写数据?只读(拉文章列表、订单记录),用 GET 请求加应用密码即可。写(创建订单、更新用户、发 Webhook),需要 POST/PUT 请求,权限范围要最小化——比如只给”编辑订单”权限,不要给”管理所有设置”权限。技术栈怎么搭,见环形山技术栈。
| 端点 | 方法 | 用途 | 认证要求 |
|---|---|---|---|
| /wp-json/wp/v2/posts | GET | 读文章列表 | 公开(已发布) |
| /wp-json/wp/v2/posts | POST | 新建文章 | 应用密码 |
| /wp-json/wc/v3/orders | GET | 读 WooCommerce 订单 | Consumer Key |
| /wp-json/wc/v3/orders | POST | 新建订单 | Consumer Key |
| /wp-json/wp/v2/users | GET | 读用户列表 | 管理员密码 |
| /wp-json/wp/v2/media | POST | 上传图片 | 编辑以上密码 |
二、Webhook:事件驱动的实时通知
Webhook 和 REST API 的区别是方向反过来的。REST 是你主动去对方服务器拿数据,Webhook 是对方服务器在事件发生时主动往你这推数据。比如 WooCommerce 收到新订单,它会往你在 Webhook 配置里填的 URL 发一个 POST 请求,body 里是订单详情 JSON。你不用每分钟去轮询”有没有新订单”,订单一来就自动推过来。
WooCommerce 原生支持 Webhook,在 WooCommerce → 设置 → 高级 → Webhooks 里添加。你需要填:触发事件(订单创建、订单更新、订单取消)、接收 URL(你自己服务器上的一个端点,比如 https://你的域名/wp-json/custom/v1/new-order)、签名方式(HMAC-SHA256,用一个密钥验证请求确实来自 WooCommerce,不是别人伪造的)。
反直觉判断:Webhook 推送失败时,你这边大概率不知道。WooCommerce 推 Webhook 时如果你的服务器返回 500,它会重试几次(默认最多 5 次,间隔递增),但如果 5 次都失败,它就放弃了,你这边既没收到数据,也没有任何告警。这就是为什么关键数据不能只靠 Webhook——必须有定时拉取做兜底。CRM 怎么对接,见独立站CRM集成。
| 事件 | WooCommerce Hook | 推送到哪里 | 优先级 |
|---|---|---|---|
| 新订单创建 | woocommerce_order_created | CRM + Slack 通知 | 最高 |
| 订单状态变更 | woocommerce_order_status_changed | 客户邮件 + CRM 更新 | 高 |
| 支付成功 | woocommerce_payment_complete | 会员系统升级 | 高 |
| 退款发起 | woocommerce_order_refunded | CRM 标记 + 财务通知 | 中 |
| 新用户注册 | user_register | 邮件营销列表 | 中 |
| 产品上架/下架 | woocommerce_product_set_visibility | 库存系统同步 | 低 |
三、REST 定时拉取:对账兜底机制
Webhook 负责秒级实时通知,但你必须再加一层定时拉取做对账。做法很简单:写一个 WP-Cron 脚本,每小时跑一次,调 WooCommerce REST API 拉过去一小时内创建或更新的订单,和你数据库里已有的订单做对比。如果发现 Webhook 漏了某条订单(比如 Webhook 推的时候你服务器正好 502),定时拉取会把它补上。
定时拉取的查询参数要带时间戳。比如 GET /wp-json/wc/v3/orders?after=2026-09-21T10:00:00&per_page=100,这会返回 10 点之后的所有订单,每页 100 条。如果返回 100 条,说明可能还有更多,继续翻页拉。拉完后按订单 ID 去重,已经在库里的跳过,不在的插入。这就是最简单的对账逻辑。
场景示例:周三下午 3 点服务器 SSL 证书过期返回 525,持续 40 分钟。这期间 3 个新订单的 Webhook 全部失败。只有 Webhook 的话这 3 单就丢了。但设了每小时定时拉取,4 点跑的时候把漏的 3 单补上,客户收到确认邮件。监控怎么配,见站点监控与告警。
| 同步方式 | 频率 | 延迟 | 失败处理 |
|---|---|---|---|
| Webhook 推送 | 事件触发 | 秒级 | 对方重试 5 次后放弃 |
| 每小时定时拉取 | 每小时整点 | 分钟级 | 失败了下次自动重试 |
| 每日全量对账 | 每天凌晨 3 点 | 天级 | 生成差异报告人工查 |
| 实时 WebSocket | 实时 | 毫秒级 | 连接断了需重连 |
四、认证与安全:Key 放后端,签名验请求
API 集成最常犯的安全错误是把 API Key 写在前端 JavaScript 里。任何人打开浏览器 F12 → Network 标签,就能看到你的 Key,然后拿着它随便调你的 API。正确做法是:前端只调你自己服务器的接口,由服务器在后端加上 API Key 再转发到第三方。这个后端代理可以是一个 WordPress 自定义 REST 端点,也可以是一个简单的 Node.js/Python 服务。
接收 Webhook 时必须验签。WooCommerce 推 Webhook 时会在 HTTP Header 里加一个 X-WC-Webhook-Signature,这是用你的 Webhook Secret 对 body 做的 HMAC-SHA256 签名。你在接收端点里算一遍同样的签名,和 Header 里的对比,一致才处理。不一致说明是有人伪造的请求,直接返回 403。不验签的后果是:任何人都能往你的端点 POST 假订单,你 CRM 里就会冒出一堆垃圾线索。
场景示例:你接 HubSpot Webhook,有人知道了你的接收 URL,构造了一个假的”新线索”POST 请求。如果你不验签,这个假线索就进了 HubSpot,销售跟进了半天发现是假的。加了 HMAC 验签后,HubSpot 的请求带正确签名,假请求签名不对,直接被 403 挡掉。CRM 对接细节见独立站CRM集成。
| 安全项 | 错误做法 | 正确做法 |
|---|---|---|
| API Key 位置 | 写在前端 JS | 存服务器环境变量 |
| 请求代理 | 前端直接调第三方 API | 前端调自己服务器,后端转发 |
| Webhook 验签 | 不验签,收到就处理 | HMAC-SHA256 对比 Header |
| HTTPS | 用 HTTP 接收 Webhook | 必须 HTTPS,TLS 1.2 以上 |
| IP 白名单 | 不限制来源 IP | 按第三方官方 IP 段白名单 |
| 错误日志 | 失败了不记录 | 所有非 2xx 响应记日志 |
五、常见第三方集成清单
独立站常见的第三方集成有五类:CRM(HubSpot、Salesforce、Zoho)、邮件营销(Mailchimp、ConvertKit、Klaviyo)、支付网关(Stripe、PayPal)、分析工具(Google Analytics 4、Hotjar)、客服系统(Intercom、Zendesk)。每类对接方式不同,但都遵循同一个原则:能 Webhook 就 Webhook(实时),关键数据加定时拉取(兜底)。
不要一上来就自己写代码对接。先看 WordPress 插件库有没有现成插件:HubSpot 有官方插件、Mailchimp 有官方插件、Stripe 有 WooCommerce 官方扩展。现成插件覆盖 80% 的场景,剩下 20%(比如自定义字段映射)再用 Webhook 或自定义代码补。自己写代码对接两个系统,调试时间通常超过 20 小时,而装现成插件 1 小时就搞定。CRM 插件怎么选,见官网线索到 CRM。
| 系统类型 | 推荐方案 | 对接方式 | 预计工时 |
|---|---|---|---|
| CRM(HubSpot) | 官方插件 + Webhook | 插件自动同步 | 2 至 4 小时 |
| 邮件营销(Mailchimp) | 官方插件 | 用户注册自动加列表 | 1 至 2 小时 |
| 支付(Stripe) | WooCommerce 官方扩展 | Webhook 同步订单状态 | 1 至 2 小时 |
| 分析(GA4) | Site Kit by Google 插件 | 前端自动埋点 | 30 分钟 |
| 客服(Intercom) | 官方聊天插件 | 前端代码片段 | 30 分钟 |
| 自定义 ERP | 自己写 REST 对接 | 定时拉取 + Webhook | 20 小时以上 |
FAQ 常见问题
REST API 和 Webhook 有什么区别,哪个更好?
WordPress REST API 需要装插件吗?
API Key 应该放在哪里,前端能用吗?
Webhook 接收端怎么验证请求是真的?
Webhook 推送失败了怎么办?
对接第三方系统是用现成插件还是自己写?
写在最后
API 集成不是越复杂越好,而是越可靠越好。目标只有一个:数据不丢、状态不错、出问题能查。Webhook 快但不可靠,REST 慢但可控,两层叠起来才是生产级方案。单独用任何一种,都会在某个时刻丢数据。
落地三步:关键集成用 Webhook 做实时通知,接收端加 HMAC 验签;加每小时定时 REST 拉取做对账,Webhook 漏的自动补上;所有 API Key 放后端环境变量,前端只调自己服务器的代理接口。
一句可以记住的话:Webhook 是”即时通知”,REST 是”定期对账”——只靠通知不做对账,等于只听门铃不查快递柜。
