Paypal自定义变量解决方案

时间:2012-10-05 12:31:27

标签: php paypal paypal-ipn paypal-sandbox

我正在尝试使用PayPal作为我网站的付款。

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

所以在阅读后我开始使用Express Checkout for Digital Goods,是吗?或者我必须采用其他付款方式吗?

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

假设我想从我的数据库向paypal api支付user_id,diamond_id和其他一些变量。似乎paypal不支持自定义变量来传递api调用。我希望在用户完成付款后,Paypal通过我的服务器通过user_id和我通过的其他变量完成付款,这样我就可以轻松了解详细信息。

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

  1. 第一个解决方案是存储“TOKEN”(由“SetExpressCheckout”方法生成)和我的自定义变量,它属于数据库中的TOKEN,然后在付款完成后,paypal将通知我的服务器之前保存的相同TOKEN。所以我将根据TOKEN进行查询。
  2. 第二个解决方案是在RETURNURL变量中使用get样式http://www.mysite.com/successpayment.php?user_id=13&diamond_id=88所以我很容易抓住GET变量。
  3. 哪种解决方案是对的?有什么解决方案吗?以及如何确保付款确认,我的意思是,如果有人知道并破解我的回报。

    由于

4 个答案:

答案 0 :(得分: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);

this

上的详细说明

答案 1 :(得分:1)

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

PayPal API的工作方式是(通常)向PayPal发送一个表单,其中包含大量隐藏字段,您可以设置的其中一个字段类似于&#34; custom&#34;,您可以存储你喜欢的任何东西所以你要做的就是在用户表中存储类似用户ID的内容,以及你想给他们多少虚拟货币,也可以用逗号分隔,这样你就可以使用爆炸()返回分离数据的变量。

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

答案 2 :(得分:0)

这与PayPal即时付款通知的合作方式 - 一旦您收到PayPal的回复,您就会将该邮件发回PayPal并确认其已经过验证或无效。

你通过HTTPS向PayPal发布这个帖子,因此“中间人攻击”应该不是问题(我认为这是你上面的跟进问题)。请参阅IPN here的完整代码示例。

答案 3 :(得分:0)

这样的系统

怎么样?
  1. 当用户向购物篮添加内容或点击购买链接时,使用您需要的所有自定义字段向您自己的数据库添加一行,然后获取该行的ID(mysql_insert_id())。

  2. 然后在PayPal表单中有一个隐藏字段,该字段名为notify_url,并且包含指向paypal_ipn.php?id={ID}之类的链接,其中{ID}是数据库行ID

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

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

相关问题