3

我正在尝试使用贝宝作为我网站的付款方式。

我的网站只销售一种虚拟货币,比如在线游戏中的“钻石”。

因此,在阅读后我开始使用 Express Checkout for Digital Goods,对吗?还是我必须使用其他付款方式?

那么我的问题是当使用 Express Checkout for Digital Goods 时,如何传递自定义变量?

假设我想将数据库中的 user_id、diamond_id 和其他一些变量支付给 paypal api。似乎贝宝不支持自定义变量传递 api 调用。我想在用户完成付款后,Paypal 通知我的服务器通过 user_id 和我传递的一些其他变量完成付款,这样我很容易知道细节。

搜索后我找到了一些解决方案,

  1. 第一个解决方案是将“TOKEN”(从“SetExpressCheckout”方法生成)和我属于TOKEN的自定义变量存储在数据库中,然后在支付完成后paypal将通知我的服务器之前保存的相同TOKEN。所以我会根据TOKEN查询。
  2. 第二种解决方案是在 RETURNURL 变量http://www.mysite.com/successpayment.php?user_id=13&diamond_id=88中使用 get 样式所以我很容易抓住 GET 变量。

哪种解决方案是正确的?有什么解决办法吗?以及如何确保付款确认的安全,我的意思是如果有人知道并破解了我的返回网址。

谢谢

4

4 回答 4

7

如果您使用的是PAYPAL EXPRESS CHECKOUT NVP API和类SetExpressCheckOut()

参考支付认证

$paypal = new SetExpressCheckout($totalPrice);

此类调用程序实例化您将用于设置将客户重定向到 Paypal 并返回所需参数的方法。必须设置总价格的一个变量来完成这个类的启动。

    $paypal->setNVP("RETURNURL", "http://yourURL.com/confirm.php");
    $paypal->setNVP("HDRIMG", "http://yourURL.com/image.jpg");
    $paypal->setNVP("EMAIL", "$userEmail"); // customer's email
    $paypal->setNVP("AMT", $totalPrice);
    $paypal->setNVP("SHIPPINGAMT", "32");
    $paypal->setNVP("CUSTOM", "Anything you want to put");  // user_id, diamond_id
    $paypal->setNVP("INVNUM", $uniqueID); // your Order number this include the id of your order  (order table  will also have user_id, diamond_id related to the order so you will automaticaly get them once you send the orderid  )
    $paypal->getResponse();

在您提交转账到 Paypal 之前,请知道您可以使用该setNVP()功能发送可选值,以自定义付款流程。默认情况下,可以在etc/NVP/SetExpressCheckout.ini file. getResponse()将用户的浏览器发送到 Paypal 以验证信用信息。特别是您必须在名为 etc/NVP/PayPalNVP.ini 的文件中在测试模式(沙盒)和实时模式之间进行可变设置的 URL。

完成销售

$paypal  = new GetExpressCheckoutDetails;
$details = $paypal->getResponse();

DoExpressCheckoutPayment()

$payment  = new DoExpressCheckoutPayment($totalPrice);
$response = $payment->getResponse();

检查状态

if ($response['PAYMENTSTATUS'] == 'Completed') {
    # process information
}

显示来自 getResponse 的结果

echo '<pre>';
print_r($details);
echo '<pre>';
print_r($response);

对此的详细说明

于 2012-10-08T10:55:21.517 回答
1

PayPal API 确实允许您发送自定义数据。不,永远不要使用返回 URL 为用户提供他们所支付的费用。任何人都可以访问该 URL。

PayPal API 的工作方式是您(通常)向 PayPal 发送一个带有大量隐藏字段的表单,您可以设置的字段之一是“自定义”,因为您可以存储您喜欢的任何内容;所以你想要做的是存储用户表中的用户ID之类的东西,以及你想给他们多少虚拟货币,也许用逗号分隔,所以你可以在变量上使用explode()它返回以分离数据。

PayPal 付款完成后,如果您使用 Express Checkout,PayPal 会发送 IPN(即时付款通知)。此 IPN 请求转到您指定的页面,因此您需要创建一个http://yourwebsite.ca/ipn.php例如。然后需要验证此通知,然后您可以提取自定义字段,获取用户 ID 和虚拟货币数量等。我建议您使用预先存在的PHP PayPal 类

于 2012-10-05T16:07:31.987 回答
0

PayPal 即时付款通知的工作方式 - 一旦您收到 PayPal 的回复,您将消息发回 PayPal 并确认它是已验证的还是无效的。

您通过 HTTPS 向 PayPal 发布此帖子,因此“中间人攻击”不应该成为问题(我认为这是您上面的后续问题)。请在此处参考 IPN 的完整代码示例。

于 2012-10-08T04:35:57.953 回答
0

像这样的系统怎么样:

  1. 当用户向购物篮添加东西或单击购买链接时,将一行添加到您自己的数据库中,其中包含您需要的所有自定义字段,然后获取该行的 ID (mysql_insert_id())。

  2. 然后在 PayPal 表单中有一个隐藏字段,该字段将被命名notify_url并包含指向数据库行 IDpaypal_ipn.php?id={ID}所在位置之类的链接。{ID}

  3. 付款成功后,PayPal 会将购物车详细信息发布到您的脚本中,您可以获取所有订单详细信息以及使用$_GET['id']检索数据库中设置的自定义变量。

使用 paypal_ipn.php 脚本,您当然需要检查发布的数据是否有效,并确保它来自 PayPal 本身并且没有被欺骗。这是您的 paypal_ipn.php 文件的一个很好的资源:http: //net.tutsplus.com/tutorials/php/using-paypals-instant-payment-notification-with-php/

于 2012-10-08T10:03:56.713 回答