Я делаю веб-приложение для электронной коммерции, используя Laravel 5.
Теперь я застрял в интеграции платежей. я использую CCAvenue
как моя платежная интеграция, но нет никакой поддержки, предоставляемой самой ccavenue для структуры laravel.
Итак, после небольшого исследования, я получил этот пакет под названием Indipay. Этот пакет работает полностью отлично. Тем не менее, я получаю TokenMismatchException
, Хотя транзакция прошла успешно, я получаю уведомление о получении оплаты.
Проверьте изображение ниже:
routes.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'));
}
Kernel.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',
];
}
В чем может быть возможная проблема? Кто-нибудь может мне помочь с этим ??
Любая помощь высоко ценится. Спасибо.
Хорошо … Я был в такой ситуации. Отключение 'App\Http\Middleware\VerifyCsrfToken'
не очень хорошее решение
Лучший способ сделать это — отключить URL-адреса, особенно для тех, кому нужен токен.
protected $except = [
'transaction-failed/*',
'transaction-successful/*',
'payment-notification/*',
];
Примечание: не забудьте добавить «/ *» в конце URL.
Добавьте токен csrf в вашу форму.
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
Моя ситуация тоже такая же, я занимаюсь разработкой сайта электронной коммерции & используя платежный шлюз Payubiz в Laravel 5.1.
Я также получал то же сообщение об ошибке несоответствия токена. Вместо отключения CSRF я добавил эту строку в форму.
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
Это прекрасно работает для меня без каких-либо ошибок.
Я реализовал CCAvenue с Laravel довольно много раз. Это проблема подхода. Вы фактически перенаправляете пользователя на сторонний сайт (в данном случае CCAvenue), и он перенаправляет его в форму вашего приложения в виде запроса POST. Ваше промежуточное ПО токена csrf заблокирует ваш маршрут, так как токена нет. Есть три решения:
У вас есть более простой способ сделать это. Это описано в документации Laravel.
http://laravel.com/docs/5.1/routing#csrf-protection
Вы можете легко исключить некоторые ссылки из промежуточного программного обеспечения токена.