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

PayPal IPN Listener返回HTTP 500错误 IONOS托管ASP.NET站点收不到支付通知

PayPal IPN HTTP 500错误修复方案

1. 修复重复传参BUG

你提交给PayPal的请求代码中重复追加了custom参数:

paypalParameterString.Append("custom=" & imgBtnPaypal.CommandArgument.ToString & "&")
paypalParameterString.Append("custom=" & order.orderID.ToString & "&")

HTTP协议中同名重复参数会被拼接或覆盖,PayPal回调返回的custom值会不符合预期,后续代码判断LEN(qscoll("custom")) >=32不通过、或订单匹配失败时会抛出未处理异常,直接返回500。
如果需要同时传递两个值,可合并为单个custom参数:

paypalParameterString.Append("custom=" & imgBtnPaypal.CommandArgument.ToString & "|" & order.orderID.ToString & "&")

回调时按分隔符拆分即可获取两个值。

2. 增加异常捕获和日志

当前IPN监听器无异常处理逻辑,网络请求失败、数据库操作报错、参数解析失败等任意异常都会直接返回500。在外层添加Try Catch块记录异常,同时固定返回200状态码避免PayPal重复回调:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Try
        ' 原有全部逻辑写在这里
    Catch ex As Exception
        ' 将ex.ToString()写入本地文件或数据库日志用于排查
        Response.StatusCode = 200
        Response.End()
    End Try
End Sub

3. 修复编码错误

你用Encoding.ASCII解析PayPal请求内容,当订单包含特殊字符时会触发编码异常,替换为UTF-8即可:

' 原代码
Dim strRequest As String = Encoding.ASCII.GetString(Param)
' 替换后
Dim strRequest As String = Encoding.UTF8.GetString(Param)

4. 排查IONOS环境限制

同版本代码在其他服务商正常运行,可联系IONOS确认:

  • 服务器出站规则是否允许访问PayPal的IPN验证地址
  • 站点.NET信任等级是否允许发起HttpWebRequest外部请求
  • 服务器TLS 1.2协议是否已启用

5. 优化资源释放

当前代码中HttpWebRequest、StreamReader、StreamWriter未主动释放,长时间运行可能引发资源耗尽报错,建议用Using语句包裹需要释放的对象,自动完成资源回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:03