gpt4 book ai didi

php - paypal交易后如何让 "thank you"页面只对用户可见?

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:27 24 4
gpt4 key购买 nike

你好,我的网站上有一个表格,我希望在我的用户填写表格并在 paypal 页面上付款后,他将被重定向到我的“谢谢”页面。但在一种情况下,只有拥有

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

我已经在我的站点中存档了类似的东西,但是使用 paypal 我不知道该怎么做:在对我的 proces.php 进行验证后,我得到了这个

$emotion = $_POST['emotion']; 

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

}

而此代码位于“mypage.php”中放置 pay pal 立即购买按钮的网站上

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

只让已提交表单的用户看到该页面,但中间有 paypal,我不知道如何让它像我想要的那样工作,

非常欢迎任何帮助。谢谢

最佳答案

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

首先,转到您在站点中使用的付款表单以向 PayPal 发送付款请求并添加一个名为 return 的隐藏变量,并将该变量设置为您希望用户重定向的 URL到:

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

由于您肯定希望每个交易都有一个返回 URL,这样您就可以知道是否看到了每一页,因此该 URL 可能类似于:

$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

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

这样,“谢谢”页面只能被浏览一次;我认为这最终是有道理的。

编辑:其他详细信息。

第一件事是创建一个数据表来跟踪交易,一些简单的有两个字段的东西:

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}') ";
...

如您所见,这里我没有使用read 标志,但我在读取后删除了该行,因此请注意反射(reflect)这一点的原始代码中的更改。

关于php - paypal交易后如何让 "thank you"页面只对用户可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com