2017-02-09 90 views
2

购买服务订购时,推荐的工作流程用于存储我的客户ID?使用PayPal IPN时的客户信息

这里是我的想法:

  1. 用户决定购买
  2. 用户在创建帐户或登录(如果尚未登录)
  3. 会话变量建立
  4. 做PayPal交易
  5. 获取IPN信息并将适当的会话变量添加到数据库中

我从来没有处理过付款,只是想确保我以正确的方式做事。我能找到的几个教程没有具体解决这个问题。我将验证我的用户是否有权使用基于付款信息的工具。我正在使用PHP并且已经使贝宝事务工作。

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

+0

我很想知道这个答案。作为边注,你是否实现了用户注册门户和paypal收费yoruself,还是你使用任何现有的软件包? –

+0

我的实现来自这种方法[here](http://www.codexworld.com/paypal-standard-payment-gateway-integration-php/) –

+0

您应该将用户标识存储在['custom'变量]( https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/),以便您的IPN处理程序有权访问该ID。 – Mikey

回答

0

我找到了一个可以接受的解决方案(很简单,实际上),我在这里发布它,因为我无法在任何地方找到它。做到这一点的方法是添加一个隐藏的字段到您的表单,该表单接受登录用户的用户标识。

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

然后,在你的IPN的网址,该表单字段的值将是提供给您通过POST:

$userid_to_log = $_POST['custom']; 

添加一个新列到您的付款命名为用户ID表(例如) 最后,在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上,但在我看来,它不是依靠成功选项,其中b更安全通过GET获取所有变量。