我第一次设置 Stripe webhook。我发出了数百个测试请求,错误率约为 90%。无法预测失败的原因。
Stripe 仪表板上的失败响应包括:
Timed out connecting to remote host
或者
Failed to connect to remote host
我的 webhook(我已将其简化以便进行测试)。大约 10% 的时间,我会收到 200 响应{received: true}
:
expressRouter.route('/hooks').post( async (req, res) => {
const event = req.body;
console.log("Event:");
console.log(event);
// Handle the event
switch (event.type) {
case 'payment_intent.succeeded':
const paymentIntent = event.data.object;
// Then define and call a method to handle the successful payment intent.
// handlePaymentIntentSucceeded(paymentIntent);
break;
case 'payment_method.attached':
const paymentMethod = event.data.object;
// Then define and call a method to handle the successful attachment of a PaymentMethod.
// handlePaymentMethodAttached(paymentMethod);
break;
// ... handle other event types
default:
console.log(`Unhandled event type ${event.type}`);
}
// Return a response to acknowledge receipt of the event
res.json({received: true});
})
我尝试过以下两种定义钩子的方法,以及使用和不使用异步的方法:
expressRouter.route('/hooks').post( async (req, res) => {
...
})
// and
app.post("/hooks", async (req, res) => {
...
})
我已经联系了 Stripe 支持人员,并尝试了他们提出的所有建议。他们给了我以下几种可能的解决方案:
这可能是由于网络速度较慢或路由存在其他问题。
主机提供商可能也需要允许 Stripe 的交付 IP 地址,请注意,它们可能会在到达你的服务器之前被阻止
我已将 Stripe 的 IP 添加到 iptables 中,例如:
iptables -I INPUT -p tcp -s 3.18.12.63 -j ACCEPT
我在 Ubuntu 18.04 上使用 Caddy 运行我的 Hostinger VPS 服务器。这可能是我的服务器设置问题吗?任何建议都非常感谢。
答案1
我似乎已经让它工作了。
我通过 apt 安装了 ngrok (https://ngrok.com/download)
然后按照以下步骤操作:youtube.com/watch?v=S1uExj7mMgM&ab_channel=Twilio,并设置 ngrok 转发到 localhost:4000:
ngrok http 4000
我刚刚发送了大量请求,它们都成功了。我不太清楚它是如何工作的/为什么我需要它,但我很高兴它能工作。如果有人能解释为什么没有这个它就无法工作,请告诉我!