Php Paypal-如何将Paypal中的其他数据发布回返回url?

Php Paypal-如何将Paypal中的其他数据发布回返回url?,php,paypal,Php,Paypal,我一直在尝试将paypal整合到我的网站中,但我遇到了一个问题。在我的网站上,我向客户销售产品,无需注册。基本上,客户选择他想要的产品,我从paypal获得我需要的所有发货信息。因此,当我的IPN返回VERIFIED状态时,我会为客户创建一个订单,并将其保存到数据库中。但现在我想在他们完成交易时给他们一个礼物代码。我知道,我可以在订单保存时通过电子邮件发送代码,但我想在他们从paypal重定向回return\u url时向他们显示代码。由于订单在他们开始paypal交易之前不存在,并且礼品代码是

我一直在尝试将paypal整合到我的网站中,但我遇到了一个问题。在我的网站上,我向客户销售产品,无需注册。基本上,客户选择他想要的产品,我从paypal获得我需要的所有发货信息。因此,当我的IPN返回
VERIFIED
状态时,我会为客户创建一个订单,并将其保存到数据库中。但现在我想在他们完成交易时给他们一个礼物代码。我知道,我可以在订单保存时通过电子邮件发送代码,但我想在他们从paypal重定向回
return\u url
时向他们显示代码。由于订单在他们开始paypal交易之前不存在,并且礼品代码是在他们被重定向回来时创建的,所以我不知道如何将礼品代码连接到他们的订单。我想如果paypal向我的
return\u url
发送额外的数据,很可能是一个
事务id
,我也许可以做到这一点。有没有办法实现这样的功能,而不必向表单中添加另一个隐藏的输入?我不希望人们继续愚弄FireBug,并将变量更改为他们想要的

我基于实现了IPN,并将订单保存在验证部分,如下所示:

if (strcmp($res, "VERIFIED") == 0) {
  $data['Order']['first_name']=$_POST["first_name"];
  $data['Order']['last_name']=$_POST["last_name"];
  $data['Order']['email']=$_POST["payer_email"];
  $data['Order']['res'] = $res;
  $this->Order->create();
  if ($this->Order->save($data)) {

  }
} else if (strcmp ($res, "INVALID") == 0) {            
  }
}

所以我从贝宝那里得到了一些信息(名字、姓氏和付款人的电子邮件)。但是,这种情况发生在paypal和网站之间的会话中,而不是用户和网站之间,因此我无法在IPN中声明一个变量,然后在用户从paypal重定向到
return\u url

时读取它。我发现,我的paypal帐户上没有打开PDT,在我打开它之后,使用GET将
事务id
发送到我的
返回url
。我想我应该多读点书

有关如何启用PDT及其工作原理的详细信息:

return\u url
的外观:

http://***/complete?tx=***&st=Pending&amt=***&cc=GBP&cm=&item\u number=

因此,我无法在IPN中声明一个变量,然后在用户从paypal重定向到返回url时读取它

是的,有,您使用
自定义
字段,该字段通常由数据库中的用户id填充。您以如下形式(POST)将其传递给paypal:

Paypal将始终在与您的任何后续通信中包含此数据

PDT本身不可靠!无法保证用户会在付款后返回您的网站(如果他点击付款按钮,得到“等待10秒,然后再将您重定向回网站”,此时断电,您将永远无法在HTTP get中获得PDT数据)

因此,贝宝建议您同时实施IPN和PDT:


使用IPN,您将保证收到通知,因为它将被发送多次,直到您回复“ok,我收到了”。相比之下,PDT只发送一次,并且只有在用户返回您的网站时才会发送。

对不起,我可能不完全理解,但“礼物代码”是您的发明还是paypal功能?paypal IPN应该有一个“txn_id”变量。商户从买家处支付的原始交易标识号,该案例是根据该号码登记的。问题是,paypal不会将任何数据返回给return_url,只会将所有信息传递给IPN,IPN没有任何连接方式(或者在我看来是这样)。我在某个地方读到过,你可以在开始购买之前创建另一个输入,并将一些数据传递给它,当用户被重定向回时会返回这些数据,但我不想传递任何可以通过编辑DOM来更改的数据。礼品代码只是用户完成购买时获得的奖励。然后他可以玩一个小游戏并赢取奖品,但他必须输入代码才能玩。我知道txn_id,但当用户返回网站时,无法知道他刚刚完成的交易id。谢谢,但正如我在问题中所述,我不想发布任何可能由用户在浏览器中编辑的数据。我在paypal通知服务器付款时创建订单,如果用户被重定向回网站(带有交易id),我会检查数据库并打印他的优惠券。@Dygestor,希望我正确理解您的意思,如果您担心计算机和paypal之间传递的数据的安全性,由于数据是通过POST发送的,因此用户无法在浏览器中对其进行编辑。当然,您也可以使用https。如果我有误解,请进一步解释。也不确定您的评论的最后部分,因为您没有指定您是否实施了IPN、PDT或两者,但用户不需要重定向回网站,交易才能成功。用户计算机可能在Paypal网站上完成交易后立即爆炸,Paypal IPN仍会通知您交易成功。重定向到您的网站只是一个不错的选择,而不是交易成功的必要条件!如果您以这种方式实现逻辑,那么它是不正确的。希望有帮助如果我像你建议的那样使用了一个隐藏的输入,输入的值可能会在提交之前被编辑。我实现了IPN和PDT(如我在问题中所述)。由于用户没有登录,我只能在他从PayPal重定向回来时显示礼物代码,否则他的会话可能会过期/cookie被删除。。。如果他在付款后访问该网站时有其他方式检查他的交易,那就太好了。我们可能应该建立一个聊天室来讨论。添加一个隐藏的“自定义”字段是正确的方法,对于IPN和PDT,您可以通过将交易ID发送回Paypal来验证数据是否确实来自Paypal,Paypal会再次使用数据进行响应(对于PDT)。