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

.NET集成SagePay遇5006错误:未提供RedirectionURL求助

解决SagePay Server集成的5006重定向错误

我之前在做.NET集成SagePay Server的时候也踩过这个5006错误的坑,结合你的描述,核心问题可能出在NotificationURL的响应逻辑上,给你拆解几个关键修复点:

1. 彻底搞懂NotificationURL的响应逻辑(最关键!)

你现在的代码犯了一个流程理解错误:当SagePay在用户完成支付后,会主动发送POST请求到你的NotificationURL,这时候你需要直接给这个请求返回纯文本格式的响应,而不是再发起一个新的POST请求到SagePay的vspserver-register.vsp!

你当前的代码是在NotificationURL里又向SagePay发了一个请求,这相当于完全忽略了SagePay给你的回调请求,SagePay收不到你的任何响应,自然会报错“无法获取RedirectionURL”。

2. 严格遵循响应格式要求

SagePay对Notification响应的格式要求非常严格:

  • 必须是**text/plain**的Content-Type
  • 每个键值对单独一行,用CrLf(\r\n)分隔,最后一行也要包含CrLf
  • 参数名必须完全匹配:正确的参数是RedirectURL(注意大小写,R大写,URL大写),不是RedirectionURL

修正后的.NET代码示例(以ASP.NET WebForms页面为例):

' 在你的NotificationURL页面(比如sagepay-notify.aspx)的Page_Load事件中处理
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    ' 第一步:验证SagePay请求的合法性(校验签名等逻辑,这一步不能省略!)
    ' ... 此处省略签名验证、订单状态校验等逻辑 ...

    ' 构造响应内容
    Dim sb As New StringBuilder()
    sb.AppendLine("Status=OK")
    sb.AppendLine("StatusDetail=Payment processed successfully")
    sb.AppendLine("RedirectURL=https://mydomain.co.uk/sagepay.aspx") ' 最后一行也要用AppendLine保证换行

    ' 设置并输出响应
    Response.Clear()
    Response.ContentType = "text/plain"
    Response.ContentEncoding = Encoding.UTF8
    Response.Write(sb.ToString())
    Response.End()
End Sub

3. 额外排查点

  • 参数大小写检查:SagePay对参数名大小写敏感,必须严格写为RedirectURL,哪怕是redirectURL或者RedirectUrl都会导致识别失败
  • 清理多余字符:响应内容里不能有任何HTML标签、空行或者多余空格,只能是纯文本的键值对
  • 协议版本确认:你代码里已经设置了SecurityProtocolType.Tls12,这符合SagePay的要求,无需修改

为什么之前的修改没用?

你之前调整了AppendLine、换用WebClient、修改ContentType,但核心逻辑错误——你没有给SagePay的回调请求返回响应,而是发起了一个无关的POST请求,所以SagePay始终收不到你的RedirectURL配置。

按照上面的步骤修正后,应该就能解决5006错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:48