我在接收Wordpress中的GET請求時遇到問題。Action hook'parse_request'爲Wordpress的單個GET請求觸發兩次
我寫的支付插件(其中包括)的2Checkout託管結算。一旦客戶提交表格,他就會被重定向到2Checkout,他們可以在那裏完成支付請求。在成功付款後,客戶將返回到我的wordpress網站,付款詳細信息爲GET參數(http://example.org/success/?key1=value1&key2=value2..。)。
我的wordpress插件掛鉤到'parse_request'鉤子中以攔截此請求,檢查是否存在某個鍵以查看它是否爲2Checkout答覆,然後驗證並將請求存儲在表中。
此外,擁有的2Checkout一些所謂的 'INS' - 即時商家通知。基本上這些是在後臺發送的付款的單獨的POST請求消息 - 我也將它們設置並指向我的wordpress站點,在那裏它們被同一個鉤子攔截到'parse_request',並且也被驗證並存儲在相同的表。
當我測試的支付,我收到了直接的GET請求和INS請求如預期,並將其存儲在表中。但是,GET請求總是存儲兩次,因爲處理該請求的函數被GET請求調用兩次。但是,只有GET請求才會這樣 - INS POST請求只出現一次並進行相應處理。
是不同的兩者之間是GET請求實際上重定向到其中GET參數用於顯示自定義的感謝消息頁面的唯一的事情。 POST請求在後臺處理(不面向用戶)。
我已經檢查用的2Checkout和測試發送重定向到requestb.in和的2Checkout只發送GET請求一次。但不知怎的,它被我的插件處理了兩次。
缺少檢查數據庫的GET請求已存在的條目(這是一個醜陋的黑客在我看來,因爲它沒有解決問題),我不知道該怎麼做以防止重複的GET請求。
由於我不是在WordPress的「流動」經歷摸不着頭腦,無法找到一個答案的任何地方使用谷歌或堆棧溢出,我要找任何幫助,您可以提供。此外,如果有更好的方法比勾選'parse_request',任何信息都會被讚賞。
示例代碼(簡化顯示原理):
class MyController {
public function __construct() {
$this->register_hooks();
}
private function register_hooks() {
add_action('parse_request', array($this, 'handle_request'));
}
public function handle_request($wp) {
if(!isset($_REQUEST['2Checkout_variable']) {
return;
}
$request_handler = new MyPluginRequestHandler($_REQUEST);
$request_handler->handle_request();
}
}