貝寶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