在购买服务订阅时,建议使用什么工作流来存储我的客户ID?
以下是我的想法:
- 用户决定购买
- 用户创建帐户或登录(如果尚未登录)
- 会话变量已建立
- 进行Paypal交易
- 获取IPN信息并将适当的会话变量添加到DB
我以前从未处理过付款问题,只是想确保我以正确的方式做事。我能找到的几个教程并没有专门解决这个问题。我将根据付款信息验证我的用户是否有权使用该工具。我正在使用PHP,贝宝交易已经开始工作了。
payer_id似乎并不是一个真正可靠的方法,因为它可能会改变。因此,我真的在寻找一种方法,将该交易的结果与我的数据库中的现有客户联系起来,该客户的会话在购买时是活跃的。其中一个问题是,我必须在IPN响应而不是SUCCESS响应中处理它,因为用户可能会在付款时关闭浏览器。想法?
我找到了一个可以接受的解决方案(实际上很简单),我把它发布在这里,因为我在任何地方都找不到。这样做的方法是在表单中添加一个隐藏字段,该字段接受登录用户的用户id。
<input type="hidden" name="custom" value="<?php echo $your_userid; ?>"> //set somewhere else in the code
然后,在您的IPN url上,该表单字段值将通过POST返回给您:
$userid_to_log = $_POST['custom'];
在付款表中添加一个名为userid的新列(例如)最后,在插入语句中包含该字段:
$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选项更安全,SUCCESS基本上是通过GET获取所有变量。