工作原理与日常使用
桥接完成配对并启用同步后,它就会自行运行。本页解释它实际在做什么,这样当出现异常时,您知道该去哪里查看,而不必凭猜测排查。
用通俗语言讲解同步引擎
1. 变更产生事件
WHMCS 中每一次相关变更都会触发一个 WHMCS 钩子:新增或编辑客户、创建联系人、开具发票、收到付款、下单、开通或暂停服务、创建工单或回复工单。
该钩子不会发起 HTTP 调用。它会把一个小事件写入**发件箱(outbox)**表(mod_perfexbridge_outbox)并立即返回。
如果 WHMCS 钩子直接调用 Perfex,那么响应缓慢或无法访问的 Perfex 服务器会阻塞 WHMCS 后台页面或客户的结账流程。写入本地表只需一毫秒,且绝不会因为别人的网络问题而失败。之后的一切都在后台进行。
2. 计划任务清空队列
每次 WHMCS 系统计划任务触发时,调度器都会从发件箱中取出一批到期事件,并通过 HTTPS 将每个事件 POST 到您的 Perfex 安装。
每个请求除 JSON 正文外还携带两个请求头:一个时间戳,以及基于该时间戳加上完整请求正文、使用您的共享密钥计算出的 HMAC-SHA256 签名。Perfex 会用自己保存的那份密钥重新计算签名,凡是不匹配、或时间戳超过 300 秒的请求一律拒绝。
您随时可以在 WHMCS 模块页面上点击 Run Sync Now 强制立即清空队列。
3. 失败先重试,然后进入死信
发送失败的事件不会丢失,也不会被密集循环重试。它会按指数退避重新排期:首次失败后约 60 秒,然后 2 分钟、4 分钟、8 分钟,依此类推,两次尝试之间的间隔上限为 6 小时。
在 15 次尝试(大约跨越 40 小时)之后,该记录会被标记为死信(dead)。死信记录永远不会自动重试,也永远不会被清理。它们就是您的死信抽屉:WHMCS 模块页面顶部的 Dead events 计数器告诉您有多少条,日志行则告诉您原因。
进入死信状态意味着同一个事件因同一原因失败了将近两天。原因几乎总是以下四种之一:Perfex 中缺少某种货币、密钥不匹配、免费版拦截了 Pro 事件,或者 Perfex 处于离线状态。请修复根本原因,然后重新将该工作入队。请参阅故障排查。
4. 暂停不会丢失任何内容
取消勾选 Enable Sync 只会暂停投递。钩子仍会继续把事件写入发件箱,因此暂停期间不会丢失任何内容。重新启用后,积压内容会在下一次触发时清空,或者点击 Run Sync Now 立即清空。