如何让paypal交易后的用户只看到“谢谢”页面?

时间:2014-10-10 19:01:43

标签: php paypal

您好我的网站上有一个表单,我希望在我的用户填写表单并在paypal页面上付款后,他将被重定向到我的“谢谢”页面。但在一个条件下只有

的用户

完成此程序会看到我的感谢页面并非用户复制“谢谢”链接并将其发送给某人,该链接不应该选择已完成付款程序的用户以外的任何人。

我在我的网站内存档了这样的东西,但是用paypal我不知道该怎么做: 我在proces.php

上的验证过程之后得到了这个
$emotion = $_POST['emotion']; 

if($emotion == 'Basic Pack') { 
session_start(); 
$_SESSION['form_finished'] = true; 
header('Location: /buynow/mypage.php'); 

}

此代码在付费朋友的“立即购买”按钮的网站上放置了“mypage.php”

<?php
session_start();
if(!$_SESSION['form_finished']) {
    header("HTTP/1.0 404 Not Found");
    exit;
}
?>

只允许已提交表单的用户查看该页面,但使用paypal但中间我不知道如何让它按照我想要的方式工作,

任何帮助都将受到极大欢迎。谢谢

1 个答案:

答案 0 :(得分:1)

PayPal WPS允许您设置自动退货页面,客户在付款完成后重定向到该页面。 现在,由于自动返回包含GET请求,因此无法阻止用户复制URL并将其发送给其他人。但 >的用途是设置一种机制来弃用每笔付款交易的感谢信息。当然,这不是一个理想的解决方案,但它是一种可能性:

首先,转到您在网站上使用的付款表单,向PayPal发送付款请求,并添加一个名为return的隐藏变量,并使用您希望用户重定向到的网址设置该变量: / p>

<input type="hidden" name="return" value="<?php echo $returnUrl; ?>" />

由于您肯定希望每个交易都有一个返回网址,因此您可以知道每个网页是否被查看,网址可能如下所示:

$returnUrl = "https://www.yoursite.com/thankyou.php?x=123";

其中123是“那个”特定交易的标识号。要跟踪所有待处理的谢谢,您可以拥有一个数据库表,将交易标识与客户链接;通过这种方式,您将能够显示个性化消息。

现在,当PayPal将客户发回您的网站时,您可以检查$_GET['x']并构建感谢页面:

$x = $_GET['x'];
$thankRow = getThankRowFromDatabase( $x );

if ( $thankRow === false )
{
    // redirect to some other page, don't show thank you
}

$customer = getCustomerFromDatabase( $thankRow['customerId'] );

$message = "Thank you {$customer['name']}.";

// Display messages

从数据库中获取“谢谢”条目后,您可以删除该行或将其标记为已读。这就是诀窍:如果有人试图再次看到该页面,相应的“谢谢行”将被标记为已经查看过(或者可能已删除),因此您只需重定向到您网站中的主页或其他页面。

这样,“谢谢”页面只能查看一次;我觉得这最终有意义。

编辑:其他详细信息。

首先要创建一个数据表来跟踪事务,简单的有两个字段:

tmp_tx_tracker( orderId, customerId )

由于您肯定会创建某种订单,在您构建付款表单时,在将其发送到PayPal之前,您应该拥有订单ID,因此您可以使用它来识别交易。 customerId字段应该是微不足道的。

我假设您已经为客户提供了一个表格,我认为该表格的主键是客户的ID,我称之为“customerId”。所以,这一切:

function getThankRowFromDatabase( $id )
{
    $row = false;

    $qst = "SELECT orderId, customerId FROM tmp_tx_tracker WHERE orderId = '{$id}' ";

    // run the query as you normally do and put the row in $row

    if ( $row !== false )
    {
        // Now we have the information in the variable $row, we can
        // delete the entry from the db so the message won't be available in the future.  
        $qst = "DELETE FROM tmp_tx_tracker WHERE orderId = = '{$id}' ";
        // Execute the query as you usually do.
    }

    return $row;
}

在这种情况下,我没有保留一个标记将行标记为已读取,而是在读取后删除该行。

我想你也有办法从你的数据库中获取客户:这就是你应该用getCustomerFromDatabase()代替的,但是要完成这里的例子:

function getCustomerFromDatabase( $id )
{
    $qst = "SELECT name FROM customers WHERE customerId = '{$id}' ";

    // run the query as you normally do and fetch the $row

    return $row;
}

请记住,当您构建要使用付款请求发送到PayPal的表单时,您应该已经创建了临时行:

...
$qst = "INSERT INTO tmp_tx_tracker (orderId, customerId) VALUES ('{$orderId}', '{$customerId}') ";
...

正如您所看到的,这里我没有使用读取标志,但我在阅读后删除了该行,因此请注意反映此内容的原始代码中的更改。