用途:Webhooks 让 Paystack 把实时事件推送到你的服务器,是确认支付状态的推荐方式,比客户端回调或轮询更可靠。依赖 paystack-setup 进行环境配置。
工作流程:客户支付后,Paystack 向你的 webhook URL 发送 POST 事件 JSON;服务器校验签名,立即返回 200 OK,再异步处理事件。webhook URL 是你在服务器上创建的 POST 端点,需在 Paystack 后台 Settings → API Keys & Webhooks 注册。
签名校验:每个请求带 x-paystack-signature 头,内容为用密钥对请求体做的 HMAC SHA512 哈希,处理前必须校验。资料给出 Next.js App Router(app/api/webhooks/paystack/route.ts)与 Express.js 两种示例,均使用 crypto.createHmac("sha512", process.env.PAYSTACK_SECRET_KEY!) 计算并比对。
IP 白名单:可只允许 Paystack 的 IP:52.31.139.75、52.49.173.169、52.214.14.220,测试与正式环境通用;在代理或负载均衡后需处理 x-forwarded-for。
重试策略:未返回 200 OK 时,正式环境前 4 次每 3 分钟重试,之后每小时一次,最长 72 小时;测试环境每小时一次,最长 10 小时。测试模式请求超时 30 秒,应立刻返回 200 OK 并异步处理。
幂等性:事件可能重复发送,处理函数需幂等,例如按 reference 查询是否已处理,再用 upsert 原子标记完成。
支持事件:charge.success、charge.dispute.create/remind/resolve、customeridentification.failed/success、dedicatedaccount.assign.failed/success、invoice.create/payment_failed/update、paymentrequest.pending/success、refund.failed/pending/processed/processing、subscription.create/disable/expiring_cards/not_renew、transfer.success/failed/reversed。
事件结构:包含 event 与 data,data 含 id、domain、status、reference、amount、currency、channel、customer、authorization、metadata 等字段。
上线检查:后台添加 webhook URL;URL 需公网可访问(localhost 收不到事件);使用 .htaccess 时 URL 加尾部 /;每次请求校验签名;先返回 200 OK 再处理耗时任务;处理函数保持幂等;上线前用测试模式验证。
限制:资料未提供收费、价格与平台支持范围等信息。