首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在沙盒上Paypal IPN总是返回“payment_status:Pending”?

基础概念

PayPal Instant Payment Notification (IPN) 是一种服务器到服务器的通知机制,用于通知您的服务器有关 PayPal 交易的状态变化。当买家在 PayPal 上完成支付后,PayPal 会向您指定的 URL 发送一个 HTTP POST 请求,包含交易的详细信息。

问题原因

当 PayPal IPN 返回 payment_status: Pending 时,通常有以下几种可能的原因:

  1. 支付正在等待确认:某些支付方式(如信用卡支付)可能需要额外的确认时间。
  2. 买家未完成支付:买家可能在 PayPal 界面上没有完成支付流程。
  3. 支付被暂停:支付可能因为某些原因(如风险检测)被 PayPal 暂停。
  4. 账户问题:买家的 PayPal 账户可能存在问题,导致支付无法完成。
  5. 网络问题:网络延迟或中断可能导致 IPN 消息未能及时到达。

解决方法

以下是一些解决 payment_status: Pending 问题的步骤:

  1. 检查支付方式
    • 确保买家使用的支付方式支持即时支付。某些支付方式(如 eCheck)可能需要几天时间才能确认。
  • 验证买家账户
    • 确保买家的 PayPal 账户是有效的,并且没有被限制或冻结。
  • 检查 IPN 设置
    • 确保您的 IPN URL 是正确的,并且可以从 PayPal 访问。
    • 确保您的服务器能够处理 POST 请求,并且返回 VERIFIED 响应。
  • 查看 PayPal 账户日志
    • 登录到您的 PayPal 账户,查看交易详情和 IPN 日志,以获取更多关于支付状态的信息。
  • 处理 Pending 状态
    • 对于 payment_status: Pending 的交易,您可以设置一个定时任务,定期检查这些交易的状态,并在状态变为 Completed 时进行相应的处理。

示例代码

以下是一个简单的 PHP 示例代码,用于处理 PayPal IPN 请求:

代码语言:txt
复制
<?php
// 读取 POST 数据
$postData = file_get_contents('php://input');
$ipnData = json_decode($postData, true);

// 验证 IPN 消息
$验证URL = "https://www.paypal.com/cgi-bin/webscr";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $验证URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($ipnData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);

if (strpos($response, 'VERIFIED') !== false) {
    // 处理 IPN 数据
    if ($ipnData['payment_status'] == 'Completed') {
        // 支付完成,更新订单状态
        echo "支付已完成";
    } elseif ($ipnData['payment_status'] == 'Pending') {
        // 支付等待确认
        echo "支付等待确认";
    }
} else {
    echo "IPN 验证失败";
}
?>

参考链接

通过以上步骤和代码示例,您应该能够更好地理解和解决 PayPal IPN 返回 payment_status: Pending 的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券