You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mollie Webhook未触发问题排查求助

排查Mollie Webhook未触发的思路

我来帮你梳理几个关键的排查方向,毕竟手动访问正常但Mollie不触发的情况,大多和Mollie的请求规则、服务器拦截或代码处理逻辑有关:

  • 先查Mollie后台的Webhook日志
    登录Mollie仪表盘,找到对应的测试支付记录,查看它的Webhook调用详情——Mollie会完整记录每一次调用的尝试、返回状态码和失败原因。这是最直接的排查入口,比如有没有返回4xx/5xx错误,或者请求被拒绝的提示,都能在这里找到线索。

  • 确认Webhook URL的SSL和可达性
    Mollie要求Webhook必须用HTTPS,且证书是受信任的(不能用自签证书,测试环境可以用Let's Encrypt免费证书)。另外,你可以用curl模拟Mollie的POST请求,测试服务器是否正常响应:

    curl -X POST -H "Content-Type: application/json" https://[mysite]/webhook.php
    

    同时检查服务器的访问日志(不是错误日志),看看有没有Mollie的IP发起的请求被拦截。很多服务器的防火墙、ModSecurity规则会拦截非浏览器的POST请求,你可以把Mollie官方公布的IP段加入白名单试试。

  • 核心问题:处理Mollie的JSON请求体
    你的代码里直接用$_POST["id"]获取支付ID,但Mollie的Webhook请求是JSON格式的POST请求,不是传统的表单键值对!手动访问是GET请求,所以插入数据库的代码能跑,但Mollie发请求时$_POST["id"]是空的,会导致后续代码报错,服务器返回500错误,Mollie就会停止重试。
    正确的处理方式应该是先读取JSON请求体:

    // 先获取Mollie发送的JSON数据
    $input = file_get_contents('php://input');
    $webhookData = json_decode($input, true);
    // 拿到支付ID
    $paymentId = $webhookData['id'];
    $payment = $mollie->payments->get($paymentId);
    

    这大概率是导致Webhook不触发的主要原因。

  • 检查Webhook的响应要求
    Mollie要求Webhook必须快速返回200 OK的响应(最好5秒内),如果代码执行超时、抛出错误导致返回非200状态,Mollie会判定调用失败。你可以先简化代码,只返回200,测试Mollie是否能触发:

    http_response_code(200);
    echo "OK";
    exit;
    

    如果这样能触发,再逐步加回业务逻辑,排查哪一步出问题。

  • 确认测试支付的状态是否真的触发了Webhook
    测试环境下,部分支付方式(比如iDEAL)需要手动模拟支付完成——你得在Mollie的测试界面点击“完成支付”,确保支付状态变为“已支付”,Mollie才会调用Webhook。不要只跳转到redirect页面就认为流程结束了。

内容的提问来源于stack exchange,提问作者GottaLovePizzas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:33:15