我在PayPal上使用“网站付款标准”。因此,我有一个自定义购买页面,该页面本质上是我的许可证列表(从数据库中拉出):
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页面发布信息,并将浏览器重定向到该页面,以便用户可以完成Paypal交易?因此,关键数据直接从我的Web服务器发布到PayPal,用户将无法编辑付款信息。
我想您可以使用IPN来确保他们支付了正确的金额,无论如何我仍然会这样做。但是我仍然不想通过GET发送所有内容。
谢谢!
最佳答案
最好的解决方案是使用Express Checkout。这比标准按钮提供的灵活性要大得多。
如果您正在考虑是否要进行IPN,则有能力集成Express Checkout。实际上,实际上是1个API调用,然后重定向到PayPal,并且至少再有1个API调用才能完成付款。
典型流程如下所示:
1.调用SetExpressCheckout API。如果您是新手,则可以通过PayPal的NVP API接口轻松实现。您可以将数据作为GET NVP字符串发送到https://api-3t.paypal.com/nvp并以相同格式获取响应。
2.从响应中获取令牌,然后重定向到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)会将PAYERID附加到您的RETURNURL。如果找不到它,请调用GetExpressCheckoutDetails API并提供令牌来检索它。
4.使用PAYERID和TOKEN,调用DoExpressCheckoutPayment完成付款。
首先,建议您查看他们在https://www.x.com/community/ppx/sdks#NVP提供的PHP NVP SDK