如何在测试环境中测试Stripe Payout Webhook及用户通知逻辑?
解决Stripe Connect提现Webhook测试及到账通知问题
一、用Stripe CLI测试payout事件触发流程
1. 基础配置
- 安装Stripe CLI后,执行登录命令绑定你的测试账户:
stripe login - 启动本地事件监听器,指定要监听的payout事件,并转发到你的webhook端点(替换成实际的本地接口地址):
启动后会生成一个stripe listen --events payout.paid,payout.failed --forward-to http://localhost:3000/stripe-webhookwebhook secret,务必确保后端用这个密钥做签名验证,避免事件被篡改。
2. 手动触发测试事件
- 触发通用的
payout.paid测试事件:stripe trigger payout.paid - 若要针对你创建的特定payout(ID:
po_1Sh5U4E0BzCx7du2iwEU9KUL)触发事件,执行:
执行后,Stripe CLI会模拟Stripe服务器将事件发送到你的本地webhook端点,可通过后端日志验证是否成功接收。stripe trigger payout.paid --payout po_1Sh5U4E0BzCx7du2iwEU9KUL
二、基于arrival_date实现到账通知
解析arrival_date时间戳
接口返回的arrival_date是Unix时间戳(示例中为1766361600),先转换成可读时间,以JavaScript为例:const arrivalDate = new Date(1766361600 * 1000);定时任务+状态校验
不能仅依赖webhook(测试环境可能延迟,生产环境也可能出现异常),建议结合定时任务实现:- 将每个payout的ID和
arrival_date记录到数据库 - 使用定时任务框架(如Node.js的
node-schedule、Python的APScheduler),在arrival_date时间点调用Stripe的Payout查询接口:const stripe = require('stripe')('你的测试密钥'); const payout = await stripe.payouts.retrieve('po_1Sh5U4E0BzCx7du2iwEU9KUL'); - 若payout的
status为paid,立即给用户发送到账通知(邮件、短信、站内信等)
- 将每个payout的ID和
webhook兜底
生产环境中,同时监听payout.paidwebhook事件作为补充:如果webhook先触发,标记该payout为已通知;如果定时任务先执行,同样做标记,避免重复发送通知。
三、排查未收到webhook的原因
如果沙箱显示资金已到账但未收到webhook,优先检查:
- 登录Stripe测试仪表盘,进入【Webhooks】→【Events】,查看对应
payout.paid事件的状态:若为failed,查看失败原因(如端点不可达、签名验证错误) - 本地开发时,确保用Stripe CLI转发事件,或用内网穿透工具暴露本地端口到公网
- 验证后端的webhook签名逻辑是否正确,Stripe会在请求头中携带
Stripe-Signature,需用对应的webhook secret完成验证
内容的提问来源于stack exchange,提问作者Faraz Ahmed
相关产品推荐
相关产品推荐

