2

我正在使用 Laravel 5 制作电子商务 Web 应用程序。

现在我被困在支付集成上。我正在使用CCAvenue我的支付集成,但 ccavenue 本身没有为 laravel 框架提供支持。

所以,经过一番研究,我得到了这个叫做Indipay的包。这个包工作得很好。但是,我得到TokenMismatchException. 虽然交易成功,但我确实收到了收到付款的通知。

检查下图:

在此处输入图像描述

路由.php

Route::post('/store/proceed-to-checkout', 'CheckoutController@proceedToCheckout');
Route::get('/store/thank-you', 'PagesController@getThankYou');

CheckoutController.php

public function proceedToCheckout(Request $request)
{
    $orderCode = Order::latest()->limit(1)->first();
    $newOrderCode = ($orderCode) ? ++$orderCode->order_code : 'ORD-000000001';

    $parameters = [
        'merchant_id' => $request->get('merchant_id'),
        'currency' => $request->get('currency'),
        'redirect_url' => $request->get('redirect_url'),
        'cancel_url' => $request->get('cancel_url'),
        'language' => 'EN',
        'order_id' => $newOrderCode,
        'actionId' => $request->get('actionID'),
        'TxnType' => $request->get('TxnType'),
        'amount' => $request->get('amount'),
        'tid' => time().rand(111,999)
    ];

    return Indipay::purchase($parameters);
}

PagesController.php

public function getThankYou(Request $request)
{
    $ordCode = Session::get('ordCode');

    $response = Indipay::response($request);

    dd($response);

    //return view('version-seven.pages.thank_you', compact('ordCode'));
}

内核.php

<?php namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel {

    /**
     * The application's global HTTP middleware stack.
     *
     * @var array
     */
    protected $middleware = [
        'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
        'Illuminate\Cookie\Middleware\EncryptCookies',
        'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
        'Illuminate\Session\Middleware\StartSession',
        'Illuminate\View\Middleware\ShareErrorsFromSession',
        //'App\Http\Middleware\VerifyCsrfToken',
        'App\Http\Middleware\VerifyCsrfMiddleware',
    ];

    /**
     * The application's route middleware.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => 'App\Http\Middleware\Authenticate',
        'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
        'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
        'admin' => 'App\Http\Middleware\AdminAuthentication',
    ];

}

可能是什么问题?有人可以帮我解决这个问题吗?

非常感谢任何帮助。谢谢你。

4

5 回答 5

3

好的......我处于这样的情况。禁用'App\Http\Middleware\VerifyCsrfToken'不是一个好的解决方案。最好的方法是禁用 URL,特别是对于那些需要令牌的人。像这样:

 protected $except = [
    'transaction-failed/*',
    'transaction-successful/*',
    'payment-notification/*',

];

注意:不要忘记在 URL 的末尾添加一个“/*”。

于 2016-07-08T10:33:43.037 回答
1

我的情况也一样,我正在开发电子商务网站并在 Laravel 5.1 中使用 Payubiz 支付网关。

我也收到了令牌不匹配的相同错误消息,我没有禁用 CSRF,而是将此行添加到我的表单中。

<input type="hidden" name="_token" value="{{csrf_token()}}"/> 

这对我来说非常有效,没有任何错误。

于 2015-12-08T02:45:17.677 回答
1

在您的表单中添加 csrf 令牌。

<input type="hidden" name="_token" value="{{csrf_token()}}"/> 
于 2015-08-14T13:00:56.830 回答
0

我已经用 Laravel 实现了很多次 CCAvenue。这是一个方法问题。您实际上将用户重定向到第三方站点(在本例中为 CCAvenue),它会将其重定向到您的应用程序表单作为 POST 请求。您的 csrf 令牌中间件将阻止您的路由,因为没有令牌。有三种解决方案:

  1. 升级到 5.1 - 您可以考虑升级到 5.1 的选项,因为它可以让您禁用路由中间件。然后,您可以禁用响应路由的 csrf 令牌,它会像魅力一样工作。这是推荐的解决方案,因为它很容易迁移到 5.1(需要大约 10-15 分钟的时间),并且您将在您的应用程序中使用更多 5.1 的组件
  2. 为您的所有发布路线禁用 csrf 令牌中间件,这将起作用。
  3. 在 CCAvenue 的参数变量中传递您的 csrf 令牌(不推荐)
于 2015-08-15T04:35:46.127 回答
-1

你有一个更简单的方法来做到这一点。它在 Laravel 文档中有描述。

http://laravel.com/docs/5.1/routing#csrf-protection

您可以轻松地从令牌中间件中排除一些链接。

于 2015-08-14T12:52:55.100 回答