在codeigniter中处理url中的问号

时间:2011-03-10 05:17:15

标签: url codeigniter

我使用的是一种付款方式,成功时会返回一个类似mysite / payment / sucess的网址?auth = SDX53641sSDFSDF,但由于我使用的是codeigniter,因此url中的问号对我无效。 我尝试过路由,但它没有用。作为最后的手段,我创建了一个预系统挂钩,并从网址中取消设置GET部分,因为我必须设置

$config["uri_protocol"] = "REQUEST_URI";

它以这种方式工作,但我网站中的所有其他链接都没有按预期工作,尝试更改uri_protocol但无法以任何方式使其工作。 所以基本上我的问题是在我的网址中处理?auth = SDFSEFSDFXsdf5345sdf部分,每当付款方法使用上面提到的网址重定向到我的网站时,它会被重定向到主页而不是控制器内的功能。 我怎么能处理这个,我使用的是codeIgniter 1.7版本,并且无法找到任何方法。 请提出一些解决方案。

4 个答案:

答案 0 :(得分:2)

我想我会扩展核心URI类,在application / libraries / MY_URI.php创建新文件,这将扩展CI_URI类,然后复制_fetch_uri_string方法,在这里你可以添加你的逻辑,如果$ _SERVER [' QUERY_STRING']存在:

class MY_URI extends CI_URI
{
    function __construct()
    {
        parent::CI_URI();
    }

    //Whatever this method returns the router class is using to map controller and action accordingly.
    function _fetch_uri_string()
    {
        if(isset($_SERVER['QUERY_STRING']) AND !empty($_GET['auth']))
        {
            //Do your logic here, For example you can do something like if you are using REQUEST_URI
            $this->uri_string = 'payment/success/'.$_GET['auth'];
            return;
            //You will set the uri_string to controller/action/param the CI way and process further
        }

        //Here goes the rest of the method that you copied
    }
}

另请注意,您必须对您的URL进行安全检查,我希望这对您有用,否则您可以尝试扩展CI_Router类或其他方法(尽管_set_routing很重要,但只需使用少量方法进行实验)。这两个类负责截获的URL并将它们映射到CI中的controller / action / params。

答案 1 :(得分:1)

我相信this thread能够得到答案 基本上加上

$config['enable_query_strings'] = TRUE;

到你的config.php

答案 2 :(得分:0)

希望这会对你有所帮助!无需更改htaccess,只需更改代码即可。

redirect(base_url()."controller_name/function_name");

答案 3 :(得分:0)

查看Stripe文档中的示例代码: https://stripe.com/docs/payments/checkout/set-up-a-subscription 可能会得出这样的结论:您只能像这样命名的GET参数检索一个checkout_session_id:

'success_url' => 'https://example.com/success?session_id={CHECKOUT_SESSION_ID}',

在使用.htaccess和配置设置(如先前的答案)并最终使其工作之后,我突然意识到DEVELOPER是由success_url格式而不是Stripe控制的。因此,可以通过以正常的干净Codeigniter格式指定成功网址来避免GET参数的所有问题,如下所示:

'success_url' => 'https://example.com/success/{CHECKOUT_SESSION_ID}',

在我的路由文件中,传入的CHECKOUT_SESSION_ID字符串通过以下路由传递到订阅控制器的checkout_success方法:

$route['success/(:any)'] = 'subscription/checkout_success/$1';

该方法接受$ checkout_session_id如下:

function checkout_success($checkout_session_id)
{
    // Do something with the $checkout_session_id...
}

我是Stripe Checkout的新手,但这似乎简化了集成而又不违反Codeigniter的GET处理规则。