Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 贝宝:我可以返回收据号或订单号返回到";return";网址?_Php_Html_Paypal - Fatal编程技术网

Php 贝宝:我可以返回收据号或订单号返回到";return";网址?

Php 贝宝:我可以返回收据号或订单号返回到";return";网址?,php,html,paypal,Php,Html,Paypal,我想能够启动一个支付成功页面后,我的应用程序贝宝交易。作为这项工作的一部分,我想在屏幕上显示一个收据号码,供用户参考(并存储在数据库中) 目前,我的代码如下所示: "alert(<?php echo $_GET['receipt_no'] ?>)" 表格 insidesuccess.php <script> alert(/*receipt no*/); </script> 警报(/*收货编号*/); 目前,其目的只是提醒收据编号。我希望可以将

我想能够启动一个支付成功页面后,我的应用程序贝宝交易。作为这项工作的一部分,我想在屏幕上显示一个收据号码,供用户参考(并存储在数据库中)

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

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

insidesuccess.php

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

警报(/*收货编号*/);
目前,其目的只是提醒收据编号。我希望可以将其更改为以下内容:

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

有没有办法告诉Paypal,我希望它能给我寄回一个收据号码?它可以通过URL变量访问吗?

您可以使用自定义字段

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

它将被发回您的返回url..以及您的通知url,您可以访问$\u POST['custom']

你也可以使用

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

但这将在paypal网站上显示给用户

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

我所做的

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

PDT与IPN的对比

PDT

  • 1) 返回变量以返回url。为了实现这一点,用户必须单击ReturntoMerchant(或其他内容)返回您的网站。或者,您必须在paypal中将其设置为付款后自动返回您的网站。如果您没有将paypal设置为自动返回,或者用户没有单击“返回商户”,或者如果您的返回url代码中存在任何问题,则您无法知道用户已付款。

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

IPN

  • 1) 返回变量以通知url。在后台工作,发送变量后,paypal将等待200 ok消息(即它将检查您是否已成功接收变量),如果没有,它将重新发送消息(根据文档)
  • 2) 为了安全--您应该将ipn返回给您的所有变量发送回paypal。贝宝将检查它是否发送。如果变量由paypal发送,则paypal将发送验证消息。因此,您可以确定这些变量实际上是由paypal发送的
更多信息

最重要的是,即使你使用IPN,你也需要使用HTTPS,否则有人可以执行人中间攻击。(黑客可以坐在中间,响应贝宝进行验证等)
有关详细信息,请在这样的会话中存储收据编号

<?php
    session_start();

    $receipt_no=$_GET['receipt_no'];

    $_SESSION["receipt_session"]=$receipt_no

?>


你可以在付款时使用这个值,正如v Sugumar指出的,你可以这样做。问题是你是否应该这样做。您最好在自己端生成收据号码,在将用户发送到PayPal之前或之后,并将其存储在数据库或会话变量中

从代码标准的角度来看,使用Javascript警报显示收据编号(而且使用PHP编写Javascript变量)也有点“恶心”。为什么不用PHP生成一个正确的收据,并在success.PHP页面上显示它呢

正如NavalDabral提到的,在$\u会话中存储数据很简单。但是,您需要做一些更类似的事情(因为您不会使用PayPal的GET变量):


用户付费并返回success.php

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


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

这是paypal生成的收据号码还是我自己定义的?或者我可以生成paypal将存储在其记录中的收据号码吗?自定义字段是您发送给paypal的内容,它将按原样返回。。它不是由贝宝生成的。。您需要创建并发送它paypal..@Notaras您可以使用txn_id跟踪记录,它由paypal返回。把它储存在你的数据库里,因为我不能在评论中解释,我更新了我的帖子。请看编辑不要介意提醒回声的事情。这将在以后被替换。自行生成收据号码的问题在于,它与Paypal生成的收据号码没有关系。如果将来需要用Paypal的记录中的交易来控制我数据库中记录的交易,那就不可能了。从昨天开始,我深入研究了一下,发现Paypal的“PDT”有正确的东西,我正在寻找“PDT”是有问题的ipn是最好的,你可能还想进一步调查Stripe;-)。这就是我几年前做的,就像从持续性偏头痛中恢复过来一样。感谢这只是一个简单的观点,不是严格意义上的相关,但如果你没有考虑过的话,这只是一个想法。向热爱贝宝各种API的开发者致歉。还有。。。据我所知,PayPal将生成自己的收据,而不管您可能传递给它的任何收据号码。你不能替换他们自己的参考系。但无论如何。。。听起来你已经找到了解决方案。@vSugumar PDT有什么问题?