2016-02-16 2 views
0

У меня проблема с получением запроса GET в Wordpress.Action hook 'parse_request' срабатывает дважды для одного запроса GET для Wordpress

Я пишу платежный плагин для (среди других) 2Checkout размещал checkout. Как только клиент отправляет форму, он перенаправляется на 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 «поток», чтобы понять это, и не мог найти ответ на это где угодно, используя переполнение Google или стека, я ищу любую помощь, которую вы можете предоставить. Кроме того, если есть лучший способ сделать это, чем зацепиться за «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(); 
    } 
} 

ответ

0

Таким образом, после некоторой дальнейшая отладки с хостинг-провайдером, причина была быстро идентифицирована (и это не была Wordpress проблемы как таковые):

URL-адрес возврата, установленный в учетной записи 2Checkout, отсутствовал в конце '/', заставляя сервер добавлять его при поступлении запроса, а затем повторно запрашивая страницу с завершающей косой чертой - следовательно, 2 запроса GET.

Оставляя это здесь, в случае, если кто-либо еще сталкивается с этой проблемой.