VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:同时将 paytm 与 laravel 5.3 集成

Posted

技术标签:

【中文标题】VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:同时将 paytm 与 laravel 5.3 集成【英文标题】:TokenMismatchException in VerifyCsrfToken.php line 67: while integrating paytm with laravel 5.3 【发布时间】:2018-05-11 13:44:28 【问题描述】:

token mismatch exception in verifyCsrfToken

我通过在 laravel 5.3 中引用“https://github.com/anandsiddharth/laravel-paytm-wallet”来集成 paytm,在付款时它重定向到 paytm 站点,当它重定向回我的站点时,它给出错误“TokenMismatchException in VerifyCsrfToken.php line 67”

查看.php

               <form action="action('OrderController@order')" method="post" name="payuForm" >
                  <input type="hidden" name="_token" value=" csrf_token() ">
                  <input type="hidden" name="firstname" id="firstname" value="$data1->first_name" />
                  <input type="hidden" name="email" id="email" value="$data1->email" />
                  <input type="text"   name="amount" value="<?php echo $data[0]->cost?>" readonly/>
                  <input type="text"   name="productinfo" value="<?php echo $data[0]->mid?>" readonly />
                  <input type="text"   name="phone" value="$data1->mobile" readonly/>
                  <center><button class="btn btn-colored btn-theme-colored text-uppercase pay">Pay</button></center>
                </form>

控制器.php

<?php

namespace App\Http\Controllers;

use PaytmWallet;
use Illuminate\Http\Request;
use App\EventRegistration;
use Session;
use DB;

class OrderController extends Controller


    /**
     * Redirect the user to the Payment Gateway.
     *
     * @return Response
     */
    public function register()
    
        return view('register');
    

    /**
     * Redirect the user to the Payment Gateway.
     *
     * @return Response
     */
    public function order(Request $request)
    

        $input = $request->all();
        //pri($input); die();
        $input['order_id'] = str_random(16);
        $input['fee'] = $input['amount'];
        Session::put('packid', $input['productinfo']);
        EventRegistration::create($input);

        $payment = PaytmWallet::with('receive');
        $payment->prepare([
          'order' => $input['order_id'],
          'user' => $input['firstname'],
          'mobile_number' => $input['phone'],
          'email' => $input['email'],
          'amount' => $input['fee'],
          'callback_url' => url('payment/status')
        ]);
        //pri($payment);exit;
        return $payment->receive();
    

    /**
     * Obtain the payment information.
     *
     * @return Object
     */
    public function paymentCallback()
    

        $transaction = PaytmWallet::with('receive');

        $response = $transaction->response();
        $order_id = $transaction->getOrderId();

        if($transaction->isSuccessful())
            dd('payment Done');
        else if($transaction->isFailed())
           dd('payment Failed');
        
        

Routes.php

Route::get('event-registration', 'OrderController@register');
Route::post('payment', 'OrderController@order');
Route::post('payment/status', 'OrderController@paymentCallback');

【问题讨论】:

你用的是什么中间件? 【参考方案1】:

嘿@Deepak Patel 我搜索了大量与您的问题相关的信息。我为您找到了一个解决方案。 5.1 版 Laravel 的 VerifyCsrfToken 中间件允许路由。您需要在 App\Http\MiddlewareVerifyCsrfToken 类中将路由添加到 $except 数组:

<?php namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier

  protected $except = [
    'your-route-name/*',
  ];

它在 laravel 中为特定路线禁用 csrf。希望它能正常工作。

【讨论】:

这是我的荣幸@DeepakPatel【参考方案2】:

我也收到此错误,但问题已解决。

    php artisan 缓存:清除。

    清除缓存和 cookie 浏览器。

    使用私人浏览器 (Mozilla) / 隐身窗口 (Chrome)

    打开您的表单/页面,然后提交。

    希望这对你有用。

【讨论】:

【参考方案3】:

添加/ 以不通过现有网址附加网址

Route::get('/event-registration', 'OrderController@register');
Route::post('/payment', 'OrderController@order');
Route::post('/payment/status', 'OrderController@paymentCallback');

并使用/payment 作为表单标记中的操作,因为您已经为此'OrderController@order' 创建了路由并且没有使用任何命名路由。

<form action="/payment" method="post" name="payuForm" >

还要检查你在路由中请求的数据

Route::post('payment', function(Illuminate\Http\Request $request)
    return dd($request->all());
);

【讨论】:

按照您的建议进行了更改@user2486
但仍然得到相同的错误

以上是关于VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:同时将 paytm 与 laravel 5.3 集成的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 中的 VerifyCsrfToken.php 第 53 行中的 TokenMismatchException

VerifyCsrfToken.php 中的 TokenMismatchException

Laravel VerifyCsrfToken.php 第 53 行随机帖子

VerifyCsrfToken.php 第 53 行中的 TokenMismatchException:(Firefox 浏览器)在 laravel 5.1 中?

Laravel 5 Auth Post Submit - VerifyCsrfToken.php 第 46 行中的 TokenMismatchException

Laravel Dingo API 和中间件问题\\VerifyCsrfToken.php