CodeIgniter PHP Framework - необходимо получить строку запроса - PullRequest
31 голосов
/ 31 января 2010

Я создаю сайт электронной коммерции, используя CodeIgniter .

Как мне получить строку запроса?

Я использую Saferpay платежный шлюз.Ответ шлюза будет выглядеть следующим образом:

http://www.test.com/registration/success/?DATA=<IDP+MSGTYPE%3D"PayConfirm"+KEYID%3D"1-0"+ID%3D"KI2WSWAn5UG3vAQv80AdAbpplvnb"+TOKEN%3D"(unused)"+VTVERIFY%3D"(obsolete)"+IP%3D" 123.25.37.43"+IPCOUNTRY%3D"IN"+AMOUNT%3D"832200"+CURRENCY%3D"CHF"+PROVIDERID%3D"90"+PROVIDERNAME%3D"Saferpay+Test+Card"+ACCOUNTID%3D"99867-94913159"+ECI%3D"2"+CCCOUNTRY%3D"XX"%2F>&SIGNATURE=bc8e253e2a8c9ee0271fc45daca05eecc43139be6e7d486f0d6f68a356865457a3afad86102a4d49cf2f6a33a8fc6513812e9bff23371432feace0580f55046c

Для обработки ответа мне нужно получить данные строки запроса.


Извините, я не объяснил проблему ясно.Я получаю сообщение об ошибке «Страница не найдена» при получении ответа от сайта оплаты после оплаты.

Я попытался включить с uri_protocol = 'PATH_INFO' и enable_query_strings = 'TRUE' в config.php.При поиске в Google я обнаружил, что это не будет работать, если я использую htaccess rewrite.

Я уже пытался изменить записи конфигурации, но это не работает.

Ответы [ 12 ]

0 голосов
/ 21 февраля 2010

Вы можете создать хук pre_system. В создаваемом классе ловушек вы можете получить нужные параметры запроса и добавить их в $ _POST для обычной обработки CI. Я сделал это для помощника JQuery Ajax.

Например:

(Назовите этот файл autocomplete.php или что-то еще, что вы указали в качестве имени файла в хуке)

<?php

/*
By Brodie Hodges, Oct. 22, 2009.
*/

if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
*   Make sure this file is placed in your application/hooks/ folder.
*
*   jQuery autocomplete plugin uses query string.  Autocomplete class slightly modified from excellent blog post here:
*   http://czetsuya-tech.blogspot.com/2009/08/allowing-url-query-string-in.html 
*   Ajax autocomplete requires a pre_system hook to function correctly.  Add to your 
*   application/config/hooks.php if not already there:

    $hook['pre_system'][] = array(
        'class'    => 'Autocomplete',
                'function' => 'override_get',
                                'filename' => 'autocomplete.php',
                                'filepath' => 'hooks',
                                'params'   => array()
                                );

*                               
* 
*/

class Autocomplete {
    function override_get() {
        if (strlen($_SERVER['QUERY_STRING']) > 0) {
            $temp = @array();
            parse_str($_SERVER['QUERY_STRING'], $temp);
            if (array_key_exists('q', $temp) && array_key_exists('limit', $temp) && array_key_exists('timestamp', $temp)) {
                $_POST['q'] = $temp['q'];
                $_POST['limit'] = $temp['limit'];
                $_POST['timestamp'] = $temp['timestamp'];
                $_SERVER['QUERY_STRING'] = "";
                $_SERVER['REDIRECT_QUERY_STRING'] = "";
                $_GET = @array();
                $url = strpos($_SERVER['REQUEST_URI'], '?');
                if ($url > -1) {
                    $_SERVER['REQUEST_URI'] = substr($_SERVER['REQUEST_URI'], 0, $url);
                }
            }
        }
    }
}

?>
0 голосов
/ 01 февраля 2010

Вы можете создать правило в своем .htaccess, чтобы предотвратить запуск MOD_REWRITE на этой страницеЭто должно позволить вам использовать _GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...