贝宝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
是“该”特定交易的一些识别号码。为了跟踪所有未完成的感谢,您可以拥有一个数据库表,将交易标识与客户相关联;这样你将能够显示个性化的信息。
现在,当贝宝向客户发送到你的网站,你可以检查$_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;
}
请记住,在那一刻,你建的形式发送给贝宝与支付请求,您应该已经创建了临时行:
...
$qst = "INSERT INTO tmp_tx_tracker (orderId, customerId) VALUES ('{$orderId}', '{$customerId}') ";
...
正如你所看到的,在这里我没有使用读标志,但我读后删除的行因此请注意原始代码中的变化反映了这一点。
你可以在会话变量上使用'isset()'。 – 2014-10-10 19:10:26
您是否使用PayPal网站付款标准? – 2014-10-10 19:21:54
是@Alejandro Arbiza – 2014-10-10 20:16:59