【问题标题】:Handling question mark in url in codeigniter在codeigniter中处理url中的问号
【发布时间】:2011-03-10 05:17:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: url codeigniter


    【解决方案1】:

    我想我会扩展核心 URI 类,通过在 application/libraries/MY_URI.php 创建新文件来扩展 CI_URI 类,然后复制 _fetch_uri_string 方法,如果 $_SERVER[' QUERY_STRING'] 存在:

    MY_URI 类扩展 CI_URI { 函数 __construct() { 父::CI_URI(); } //无论此方法返回什么,路由器类都使用相应的映射控制器和动作。 函数 _fetch_uri_string() { if(isset($_SERVER['QUERY_STRING']) AND !empty($_GET['auth'])) { //在这里做你的逻辑,例如,如果你使用 REQUEST_URI,你可以做类似的事情 $this->uri_string = '付款/成功/'.$_GET['auth']; 返回; //您将通过CI方式将uri_string设置为controller/action/param并进一步处理 } //这里是你复制的方法的其余部分 } }

    另外请注意,您必须对您的 URL 进行安全检查,我希望这对您有用,否则您可以尝试扩展 CI_Router 类或其他方法(尝试使用少数方法,尽管 _set_routing 很重要)。这 2 个类负责截获的 url 并将它们映射到 CI 中的控制器/动作/参数。

    【讨论】:

    • 忘记了在你的控制器支付中,方法成功应该是这样的:function success($auth_code=''){...}
    • 非常感谢,你救了我..!
    • 我有 nginx 服务器,这个解决方案对我有用,在使用 uri_protocol 和 enable_query_strings 参数玩了很多之后。
    • 在添加构造方法之前,我无法让它工作: public function __construct() { parent::__construct(); }
    【解决方案2】:

    我相信this thread 拥有答案。
    基本上加上

    $config['enable_query_strings'] = TRUE;
    

    到你的 config.php

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        查看 Stripe 文档中的示例代码: https://stripe.com/docs/payments/checkout/set-up-a-subscription 有人可能会得出结论,您只能将 checkout_session_id 作为命名 GET 参数检索,如下所示:

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

        在使用 .htaccess 和配置设置(如之前的答案)并最终让它工作之后,我突然意识到 DEVELOPER 控制着 success_url 格式,而不是 Stripe。因此,可以通过以正常、干净的 Codeigniter 格式指定成功 url 来避免 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 处理规则的情况下简化了集成。

        【讨论】:

          猜你喜欢
          • 2013-05-12
          • 2013-07-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-18
          • 2014-01-04
          • 2013-05-09
          • 1970-01-01
          • 2018-10-09
          相关资源
          最近更新 更多