使用PayPal IPN时的客户信息

时间:2017-02-09 22:37:08

标签: php paypal paypal-ipn paypal-sandbox

购买服务订阅时,存储我的客户ID的推荐工作流程是什么?

这是我的想法:

  
      
  1. 用户决定购买
  2.   
  3. 用户创建帐户或登录(如果尚未登录)
  4.   
  5. 建立会话变量
  6.   
  7. 做Paypal交易
  8.   
  9. 获取IPN信息并将正确的会话变量添加到数据库
  10.   

我以前从未处理过付款,只是想确保我的工作方式正确。我找到的几个教程没有专门解决这个问题。我将验证我的用户是否有权根据付款信息使用该工具。我正在使用PHP并且已经完成了paypal交易。

似乎payer_id并不是一个非常可靠的方法,因为它可能会改变。所以我真的在寻找一种方法来将该交易的结果与我的数据库中的现有客户联系起来,其会话将在购买时激活。一个问题是我必须在IPN响应而不是SUCCESS响应中处理它,因为用户可能在付款时关闭浏览器。思考?

1 个答案:

答案 0 :(得分:1)

我找到了一个可接受的解决方案(实际上非​​常简单),我在这里发布它,因为我无法在任何地方找到它。执行此操作的方法是在表单中添加一个隐藏字段,该字段将获取您登录用户的用户ID。

<input type="hidden" name="custom" value="<?php echo $your_userid; ?>"> //set somewhere else in the code

然后,在您的IPN网址上,该表单字段值将通过POST返回给您:

$userid_to_log = $_POST['custom']; 

在名为userid的付款表中添加新列(例如) 最后,在insert语句中包含该字段:

$db->query("INSERT INTO payments(item_number,txn_id,payment_gross,currency_code,payment_status, userid) VALUES('".$item_number."','".$txn_id."','".$payment_gross."','".$currency_code."','".$payment_status."','".$userid_to_log."')");

使用此解决方案,您必须打开IPN,但在我看来,它比依赖SUCCESS选项更安全,后者基本上通过GET获取所有变量。