Paypal自定义变量解决方案

Ahm*_*mad 3 php paypal paypal-sandbox paypal-ipn

我正在尝试使用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变量.

哪种解决方案是对的?有什么解决方案吗?以及如何确保付款确认,我的意思是,如果有人知道并破解我的返回.

谢谢

Cha*_*amp 7

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

参考支付认证

$paypal = new SetExpressCheckout($totalPrice);
Run Code Online (Sandbox Code Playgroud)

此类调用者实例化您将用于设置将客户重定向到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();
Run Code Online (Sandbox Code Playgroud)

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

完成销售

$paypal  = new GetExpressCheckoutDetails;
$details = $paypal->getResponse();
Run Code Online (Sandbox Code Playgroud)

DoExpressCheckoutPayment()

$payment  = new DoExpressCheckoutPayment($totalPrice);
$response = $payment->getResponse();
Run Code Online (Sandbox Code Playgroud)

检查状态

if ($response['PAYMENTSTATUS'] == 'Completed') {
    # process information
}
Run Code Online (Sandbox Code Playgroud)

显示getResponse的结果

echo '<pre>';
print_r($details);
echo '<pre>';
print_r($response);
Run Code Online (Sandbox Code Playgroud)

在详细说明