如何在没有 paytm 回调响应的 csrf 令牌的情况下将 post 值赋给控制器函数?

How to post value to a controller function without csrf token for paytm callback response?

我在我的 Codeigniter 项目中使用 Paytm 支付网关,我根据 Paytm 发送参数,一切正常,但在付款后,Paytm 重定向回我的回调 URL(这是一个函数在我的家庭控制器中)响应我收到 "The action you have requested is not allowed." 错误。我还尝试将 csrf 令牌的参数发送到 paytm,但他们拒绝了。

请帮助我如何获得 paytm 响应。

    {
     header("Pragma: no-cache");
     header("Cache-Control: no-cache");
     header("Expires: 0");

     // following files need to be included
     require_once(APPPATH . "/libraries/config_paytm.php");
     require_once(APPPATH . "/libraries/encdec_paytm.php");

     $checkSum = "";
     $paramList = array();

     $ORDER_ID = time().mt_rand().$this->session->userdata('inf_ses_id'); 
     $CUST_ID = $this->session->userdata('inf_ses_id')."_thebell"; 
     $INDUSTRY_TYPE_ID = "Retail"; //$_POST["INDUSTRY_TYPE_ID"];
     $CHANNEL_ID = "WEB"; //$_POST["CHANNEL_ID"];
     $TXN_AMOUNT = $this->session->userdata('plan_price'); 

    // Create an array having all required parameters for creating checksum.
     $paramList["MID"] = PAYTM_MERCHANT_MID;
     $paramList["ORDER_ID"] = $ORDER_ID;
     $paramList["CUST_ID"] = $CUST_ID;
     $paramList["INDUSTRY_TYPE_ID"] = $INDUSTRY_TYPE_ID;
     $paramList["CHANNEL_ID"] = $CHANNEL_ID;
     $paramList["TXN_AMOUNT"] = $TXN_AMOUNT;
     $paramList["WEBSITE"] = PAYTM_MERCHANT_WEBSITE;
     $paramList["CALLBACK_URL"] = "http://localhost/my_project/home/paytm_response";

    //Here checksum string will return by getChecksumFromArray() function.
     $checkSum = getChecksumFromArray($paramList,PAYTM_MERCHANT_KEY);
     echo "<html>
    <head>
    <title>Merchant Check Out Page</title>
    </head>
    <body>
        <center><h1>Please do not refresh this page...</h1></center>
            <form method='post' action='".PAYTM_TXN_URL."' name='f1'>
    <table border='1'>
     <tbody>";

     foreach($paramList as $name => $value) {
     echo '<input type="hidden" name="' . $name .'" value="' . $value .         '">';
     }

     echo "<input type='hidden' name='CHECKSUMHASH' value='". $checkSum . "'>

     </tbody>
    </table>
    <script type='text/javascript'>
    document.f1.submit();
    </script>
    </form>
    </body>
    </html>";
     } 

这是我在同一个控制器中的回调函数

public function paytm_response(){
        var_dump($_POST); }

遇到错误 您请求的操作不被允许。

在某些情况下,例如当您从外部站点获取 POST 时,您不能依赖外部站点来提供 CSRF 令牌。

解决此问题的一种方法是为从外部站点获取 POST 的特定 controller/method 授予 CSRF 检查例外。

在您的主 config.php 上找到一个名为 $config['csrf_exclude_uris'] 的变量(如果您从未使用过它,则它应该是一个空数组)。只需像这样添加 controller/method 对:

$config['csrf_exclude_uris'] = array('yourcontroller/yourmethod');

因为是数组,如果需要排除一对以上的controller/method,只需要在末尾加上:

$config['csrf_exclude_uris'] = array('yourcontroller/your_first_method', 'yourcontroller/your_second_method');

希望对您有所帮助