.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
相关产品推荐
相关产品推荐

