【问题标题】:TokenMismatchException in VerifyCsrfToken.php line 67: while integrating paytm with laravel 5.3VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:同时将 paytm 与 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');

【问题讨论】:

  • 你用的是什么中间件?

标签: php laravel-5.3 csrf payment-gateway paytm


【解决方案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】:

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

  1. php artisan 缓存:清除。

  2. 清除缓存和 cookie 浏览器。

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

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

    希望这对你有用。

【讨论】:

    【解决方案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
      但仍然得到相同的错误
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2016-09-03
    • 2017-09-24
    相关资源
    最近更新 更多