php - 使用 POST 从 PHP 页面将自定义购物车上传到 Paypal

标签 php database paypal shopping-cart paypal-sandbox

我在 PayPal 上使用 Website Payments Standard。所以我有一个自定义购买页面,它本质上是我的许可证列表(从数据库中提取):

licence type A: $100
licence type B: $200
licence type C: $300

他们选择其中之一(单选按钮),然后点击购买按钮。这会将页面发布到我的处理 PHP 页面,该页面从上一页获取选定的 licence_id,然后使用它从数据库中选择正确的许可证信息(价格、许可证期限)等。然后它为用户存储一个新许可证(但是标记为未付款,因为尚未发生 Paypal 付款)。

然后我的 PHP 代码使用以下代码重定向到 Paypal 站点进行支付:

// Set the transaction details to be sent to PayPal
$urlParams = array(
    'cmd' => '_cart',
    'upload' => 1,
    'charset' => 'utf-8',
    'business' => my_business_email@domain.com,
    'return' => 'http://mysite.com/paymentprocessed.php',
    'currency_code' => 'NZD',
    'amount_1' => $licencePrice,
    'item_name_1' => $licenceName,
    'quantity_1' => 1
);

// Build the URL
$urlParams = http_build_query($urlParams, '', '&');
$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';

header('location:' .$url. '?' . $urlParams);
exit();

这实质上是重定向用户并通过 GET 将参数发送到 PayPal。令人惊讶的是它有效!然而,明显的安全问题是用户只需编辑地址栏中的变量并更改价格即可获得便宜/免费的许可证。

那么是否可以让我的 PHP 页面改为 POST 信息并将浏览器重定向到该页面以便用户可以完成 paypal 交易?因此,关键数据从我的网络服务器直接发布到 PayPal,用户将无法编辑付款信息。

我想您可以使用 IPN 来确保他们支付了正确的金额,无论如何我仍然会这样做。但我仍然不想通过 GET 发送所有内容。

谢谢!

最佳答案

最好的解决方案是使用 Express Checkout。与标准按钮相比,这为您提供了更大的灵 active 。

如果您正在考虑进行 IPN,那么您有足够的能力集成 Express Checkout。它实际上是 1 个 API 调用,然后重定向到 PayPal,然后至少再调用 1 个 API 来完成支付。

典型的流程如下所示:
1. 调用 SetExpressCheckout API。如果您是新手,使用 PayPal 的 NVP API 接口(interface)可以轻松完成。您可以将数据作为 GET NVP 字符串发送到 https://api-3t.paypal.com/nvp并以相同的格式返回响应。
2. 从响应中取出 token ,并重定向到https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=XXXXXXX (https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=XXXXXXX 用于沙盒测试)
3. 一旦买家被退回,PayPal 将在您的 RETURNURL 中附加一个 PAYERID。如果您找不到它,请调用 GetExpressCheckoutDetails API 并提供您的 token 以检索它。
4. 有了PAYERID和TOKEN,调用DoExpressCheckoutPayment完成支付。

要开始使用它,我建议查看他们在 https://www.x.com/community/ppx/sdks#NVP 提供的 PHP NVP SDK。

关于php - 使用 POST 从 PHP 页面将自定义购物车上传到 Paypal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5991534/

相关文章:

php - 试图格式化 php 时间 12hr 没有前导零

php - 如何将一个人添加到 mysql json 数组?

mysql - 没有(标识)唯一属性的父类(super class)型表

php - mysql中两个表的联合结果集排序

mysql - 显示错误页面 : Application Instantiation Error. 时出错 .. 数据库问题 i thnik(详细信息 : wamp, joomla)

Android 数据库更新寄存器

php - 支付宝整合,查询

iphone - 获取经过验证的商家paypal邮箱ID

python - 如何将 sandbox.paypal 站点更改为 django-merchant 中的 paypal 站点?

php - 如何将对象转换为数组以获取数据?