Paypal:返回“退货”网址时,我可以退回收据编号或订单编号吗?

Posted

技术标签:

【中文标题】Paypal:返回“退货”网址时,我可以退回收据编号或订单编号吗?【英文标题】:Paypal: Can i return a receipt no or order no when going back to "return" URL? 【发布时间】:2017-10-03 11:03:13 【问题描述】:

我希望能够在 Paypal 交易后在我的应用程序中启动支付成功页面。作为其中的一部分,我想在屏幕上显示收据编号以供用户参考(并存储在数据库中)

目前,我的代码如下所示:

表格

<input type="hidden" name="return" value="http://myurl/success.php">

Success.php 内部

<script>
    alert(/*receipt no*/);
</script>

目前,其目的只是提醒收据编号。我希望我能把它改成这样:

"alert(<?php echo $_GET['receipt_no'] ?>)"

有没有办法告诉 Paypal 我希望它向我发回收据编号?是否可以通过 URL 变量访问?

【问题讨论】:

【参考方案1】:

您可以使用自定义字段

<input type='hidden' name='custom' value='your receiptnumber'>

它会发回您的返回 url..以及您的通知 url,您可以访问 $_POST['custom']

你也可以使用

<input type='hidden' name='item_name' value='receipt number'>
<input type='hidden' name='item_number' value='receipt number'>

但这将在贝宝网站上显示给用户..

您可以使用 txn_id 来跟踪记录,它是由 paypal 返回的。将其存储在您的数据库中

我做什么

我将所有内容都存储到数据库中......以及将其写入文件。

PDT 与 IPN

PDT

1) 变量返回返回url。为此,用户必须单击返回商家(或其他内容)才能返回您的网站。或者您必须在paypal中设置为支付后自动返回您的网站。如果您没有设置paypal自动返回或用户没有点击返回商家或您的退货有任何问题url代码比你没有办法知道用户付费了。

2) 变量不可能来自贝宝,因为任何人都可以使用 post 方法创建一个包含所有必需变量的表单并将其发送到您的返回 url。

IPN

1) 返回变量通知url。在后台工作,发送变量后,paypal 将等待 200 ok 消息(即它会检查您是否已成功接收变量)如果没有,它将重新发送消息(根据文档)。 2) 出于安全考虑,您应该将通过 ipn 返回给您的所有变量发送回贝宝。贝宝会检查它是否发送。如果变量是由贝宝发送的,贝宝将发送已验证的消息。这样您就可以确定变量实际上是由贝宝发送的..

更多信息https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNPDTAnAlternativetoIPN/

最重要的是,即使你使用ipn,你也需要使用https,否则有人可以进行中间人攻击。(黑客可以坐在中间并响应而不是paypal进行验证等)

更多信息https://developer.paypal.com/docs/classic/products/instant-payment-notification/

【讨论】:

这是贝宝生成的收据号码还是我自己定义的收据号码?或者我可以生成一个 paypal 将存储在其记录中的收据编号吗? 自定义字段是您发送给paypal的内容,它将按原样返回..它不是由paypal生成的..您需要创建并发送给paypal.. @Notaras 你可以使用 txn_id 来跟踪记录,它是由 paypal 返回的。将其存储在您的数据库中 因为我无法在评论中解释它,所以我更新了我的帖子..请查看编辑【参考方案2】:

正如 v Sugumar 所指出的,您可以做到这一点。问题是应该你做到了。在将用户发送到 PayPal 之前或之后,您最好自己生成收据编号,并将其存储在数据库或会话变量中。

从代码标准的角度来看,使用 javascript 警报显示收据编号(此外还使用 PHP 编写 Javascript 变量)也有点“糟糕”。为什么不在 PHP 中生成正确的收据并直接显示在 success.php 页面上?

正如 Naval Dabral 所提到的,将数据存储在 $_SESSION 中很简单。但是,您需要做更多类似的事情(因为您不会使用 PayPal 的 GET 变量):

 <?php
   //Before user is sent to PayPal.
   session_start();
   $_SESSION['receipt'] = "receipt number"
 ?>

用户付费返回success.php

 <?php
   session_start();
   echo "Thank you for your order. Your Receipt number is " . $_SESSION['receipt'];
 ?>

它还可以防止有人猜测收据编号并访问您用户的销售详细信息,因为收据将存储在安全的 PHP 会话中,而不是不安全且可猜测的 GET 变量中。

【讨论】:

不要介意警报回声的事情。这将在以后被替换。自行生成收据编号的问题在于,这与 Paypal 生成的收据编号无关。而且,如果将来需要使用 Paypal 记录中的交易来控制我的数据库中记录的交易,则无法完成。从昨天开始,我已经深入研究并发现 Paypal 的“PDT”有我正在寻找的正确的东西 “PDT”有问题 ipn 最好 您可能还想进一步研究 Stripe ;-)。这就是我几年前所做的事情,就像从持续的偏头痛中走出来一样。欣赏这只是意见,并不严格相关,但如果您没有考虑过,这只是一个想法。向喜爱 PayPal 各种 API 的开发者致歉。 另外......据我了解,无论您传递的任何收据编号如何,PayPal 都会生成它自己的收据。你不能替换他们自己的参考系统。但无论如何......听起来你已经找到了解决方案。 @vSugumar PDT 有什么问题?【参考方案3】:

像这样在会话中存储收据号

<?php
    session_start();

    $receipt_no=$_GET['receipt_no'];

    $_SESSION["receipt_session"]=$receipt_no

?>

支付时可以使用这个值

【讨论】:

以上是关于Paypal:返回“退货”网址时,我可以退回收据编号或订单编号吗?的主要内容,如果未能解决你的问题,请参考以下文章

PayPal IPN - 自动退货

PayPal退货页面问题

贝宝退货网址

退还跟退回有啥区别?退回和退还有啥不同

如何将 webhook 与 paypal 退货请求集成

设置 PayPal 退货 URL 并使其自动退货?