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

PSD2协议4.0本地测试ThreeDSNotificationURL遇3228格式无效错误

解决PSD2 4.0中ThreeDSNotificationURL使用localhost报错的问题

根据你描述的场景:你正在测试PSD2协议4.0版本的Direct Integration,用Visual Studio运行本地localhost站点,当把ThreeDSNotificationURL设为http://localhost:15536/Payments/ThreeDResponse时收到错误3228 : The ThreeDSNotificationURL field format is invalid.,换成公网域名虽然不报错但没法完成本地测试,而PSD2 3.0版本用localhost是正常的。

问题根源

这大概率是因为PSD2 4.0版本的SagePay支付端点对3DS回调URL的校验规则做了严格升级。在3.0版本中,允许使用localhost这类本地回环地址做测试,但4.0版本要求回调URL必须是支付服务商能够公开访问到的有效端点——毕竟3DS验证流程需要发卡行或验证服务能把结果回调给你的系统,localhost在公网环境下是无法被访问到的,所以被判定为格式无效。

可行的解决方案

这里给你几个实用的解决方向,帮你完成本地测试:

  • 内网穿透工具+本地域名映射
    这是最常用的本地测试方案:

    1. 先修改本地hosts文件(Windows路径C:\Windows\System32\drivers\etc\hosts,Mac/Linux路径/etc/hosts),添加一条映射:127.0.0.1 my-sagepay-test.com
    2. 使用内网穿透工具(比如ngrok、localtunnel)把本地端口15536映射到公开域名,比如运行ngrok http 15536,会得到类似https://abc123.ngrok.io的临时域名
    3. 把ThreeDSNotificationURL设置为https://abc123.ngrok.io/Payments/ThreeDResponse,这样既满足了SagePay的URL校验要求,又能让回调请求转发到你的本地站点
  • 配置SagePay测试环境白名单
    登录SagePay的测试开发者后台,检查是否有回调URL白名单配置项。有些支付服务商的测试环境允许把本地IP或自定义测试域名加入白名单,绕过严格的公网可访问校验。如果有这个选项,把你的内网IP地址(比如http://192.168.1.100:15536/Payments/ThreeDResponse)添加进去尝试。

  • 使用SagePay的3DS模拟测试工具
    去SagePay的开发者文档里找找有没有针对3DS流程的本地模拟工具。部分支付服务商提供了模拟3DS验证结果的工具,不需要依赖真实的公网回调地址,直接把测试回调请求发送到你的localhost站点,这样就能完成整个流程的测试。

额外注意事项

  • 确保你的本地回调接口/Payments/ThreeDResponse能正确接收POST请求,并且处理SagePay返回的3DS响应参数(比如MD、PaRes等)
  • 有些支付服务商要求回调URL必须使用HTTPS,即使是测试环境,所以使用内网穿透工具时尽量选择HTTPS的临时域名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:13:58