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

PayPal IPN回调返回Retrying状态与404错误,请求技术排查

PayPal IPN验证返回404错误排查

我正在尝试搭建支付通知功能,以下是我的实现代码:

def PayPal_IPN():
   
    '''This module processes PayPal Instant Payment Notification messages (IPNs).'''

    # Switch as appropriate
    VERIFY_URL_PROD = 'https://ipnpb.paypal.com/cgi-bin/webscr'
    VERIFY_URL = VERIFY_URL_PROD

    # Read and parse query string
    params = request.form.to_dict()

    # Add '_notify-validate' parameter
    params['cmd'] = '_notify-valudate'

    # Post back to PayPal for validation

    headers = {'content-type': 'application/x-www-form-urlencoded',
               'user-agent': 'Python-IPN-Verification-Script'}
    r = requests.post(VERIFY_URL, params=params, headers=headers, verify=True)
    r.raise_for_status()

    # Check return message and take action as needed
    if r.text == 'VERIFIED':
        print("SUCCESSFULL")
    elif r.text == 'INVALID':
        print("FAILURE")
    else:
        print("NOTHING HAPPENED?")
    return ""

运行时出现错误信息:

requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://ipnpb.paypal.com/cgi-bin/webscr

我已尝试将域名从ipnpb替换为www,但问题仍未解决,希望有人帮我排查问题,比如验证链接是否已变更?


问题排查与修复方案

  • 修正参数拼写错误:代码中params['cmd'] = '_notify-valudate'存在拼写错误,正确值应为_notify-validate(将valudate改为validate)。错误的参数值会导致PayPal无法识别验证请求,直接返回404。

  • 调整POST数据传递方式:requests.post的params参数会把数据附加到URL查询字符串中,但PayPal IPN验证要求所有数据(包含cmd=_notify-validate)放在POST请求体里。需改用data参数传递:

    r = requests.post(VERIFY_URL, data=params, headers=headers, verify=True)
    
  • 确认验证URL有效性:当前PayPal生产环境的IPN验证URL确实是https://ipnpb.paypal.com/cgi-bin/webscr,测试环境为https://ipnpb.sandbox.paypal.com/cgi-bin/webscr,你使用的生产环境URL是正确的,无需更换域名。

修复后的核心代码片段:

# 修正拼写错误
params['cmd'] = '_notify-validate'

# 使用data参数传递POST请求体数据
r = requests.post(VERIFY_URL, data=params, headers=headers, verify=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:05:29