PHP 集成 PayPal 沙箱测试与 IPN 验证流程

蓝鲸
蓝鲸
发布时间:2026-10-15| 5人浏览过
原创

本文介绍了在 PHP 环境中接入 PayPal 支付的步骤,重点展示沙箱模式下的支付跳转实现,以及服务器端如何通过即时付款通知(IPN)机制验证交易真实性,确保资金安全。

PayPal 支付跳转实现

在进行 PayPal 集成时,首先需要在代码中定义沙箱测试环境地址,以便在不涉及真实资金流动的情况下测试接口逻辑。

第1步:配置支付常量

目的:指定 PayPal 沙箱服务器地址,用于测试阶段。

在 PHP 类或配置文件中定义常量:

const PAYPAL_URL = 'https://www.sandbox.paypal.com/';

第2步:构建订单数据数组

目的:封装用户信息、商品详情及金额,准备发送给 PayPal。

创建一个关联数组,包含以下关键字段:

  • business: 接收款项的 PayPal 账号邮箱。
  • item_name: 商品或服务名称。
  • item_number: 内部订单 ID,便于后续对账。
  • amount: 商品单价。
  • shipping: 运费(如有)。
  • currency_code: 货币代码,如 USD。
  • cmd & redirect_cmd: 设置支付命令类型,通常为 _ext-enter 和 _xclick。

示例代码如下:

$paypalData = array(
    'add'       => 1,
    'cmd'       => '_ext-enter',
    'redirect_cmd' => '_xclick',
    'business'  => $paypalAccount,
    'item_name' => '51customimprint shopping cart',
    'item_number' => $order->id,
    'first_name' => $address->first_name,
    'last_name' => $address->last_name,
    'address1'  => $address->address1,
    'city'      => $address->city,
    'state'     => $address->state_or_province,
    'zip'       => $address->zip_code,
    'amount'    => $order->subtotal,
    'shipping'  => $order->shipping_fee,
    'no_note'   => 1,
    'currency_code' => 'USD',
    'lc'        => 'US'
);

第3步:生成跳转 URL 并重定向

目的:将参数序列化为标准 URL 查询字符串,并将用户引导至 PayPal 页面。

遍历数据数组,进行 URL 编码后拼接:

$paypalArguments = array();
foreach($paypalData as $k => $v){
    array_push($paypalArguments, $k . '=' . urlencode($v));
}
$paypalUrl = self::PAYPAL_URL . '?' . implode('&', $paypalArguments);
$this->_redirect($paypalUrl);

处理即时付款通知 (IPN)

用户完成支付后,PayPal 会向您在 HTML 表单中指定的 notify_url 发送 HTTP POST 请求。此过程即 IPN(Instant Payment Notification)。为了防止网络延迟导致的重复发货,必须在发货前验证该通知的真实性。

第4步:配置 notify_url

目的:接收支付结果回调。

在发起支付的 HTML 表单或 API 参数中,添加隐藏字段指向你的服务器处理脚本:
<input type="hidden" name="notify_url" value="https://yourdomain.com/paypal/ipn_handler.php" />

第5步:验证 IPN 请求合法性

目的:确认消息确实来自 PayPal,防止伪造。

收到 POST 数据后,不要直接处理业务逻辑,而是执行以下步骤:

  1. 原样发送所有参数:保持从 PayPal 收到的键值对顺序和内容不变。
  2. 附加验证命令:在数据末尾追加 cmd=_notify-validate。
  3. 回送请求:将上述完整数据包通过 HTTPS POST 发送至 PayPal 验证端点。
    • 生产环境:https://www.paypal.com/cgi-bin/webscr
    • 沙箱测试:https://www.sandbox.paypal.com/cgi-bin/webscr
  4. 解析响应:
    • 若返回 VERIFIED:说明交易合法。
    • 若返回 INVALID:可能是测试请求或遭遇攻击,应忽略并记录日志。

第6步:交易安全检查(仅针对 VERIFIED 状态)

目的:确保订单数据未被篡改,且未重复支付。

在确认验证成功后,需进行以下检查:

  • Payment Status:必须为 Completed。避免处理 Pending(待审核)或 Failed 的交易。
  • Txn Id 去重:查询本地数据库,确认该 txn_id 未处理过,防止重复发货。
  • Receiver Email:确认收款邮箱与你的 PayPal 账户注册邮箱一致。
  • Amount:核对该笔交易的金额是否与你系统生成的订单金额完全匹配。

总结

通过上述步骤,你可以在 PHP 项目中安全地集成 PayPal 支付功能。关键在于严格区分沙箱测试环境与正式环境,并在服务端严格执行 IPN 验证逻辑,这是保障电商网站资金安全的核心防线。

以上就是 PHP 集成 PayPal 沙箱测试与 IPN 验证流程的详细内容,更多关于 PHP 第三方支付接口的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。