Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inny][Symfony2] Laravel: Odebranie danych z metody GET - rounting
Forum PHP.pl > Forum > PHP > Frameworki
miccom
Cześć.
Implementuję na stronie szybkie płatności Cashbill.

Przy prawidłowym wykonaniu przelewu system cashbill wysyła do mnie dane metodą GET

https://moj-adres.pl/platnosci?service=strona_startowa.pl&orderid=TEST_abrazcdo&amount=70&userdata=YToxOntzOjc6InVzZXJfaWQiO2k6Mjt9&status=ok&sign=16111498e098cd3a66e0d88eacc4ae2e

Aktualnie laravel wywala błąd że nie ma takiego routingu.

Jak przygotować routing aby odebrać powyższe dane?
LowiczakPL
moim zdaniem wystarczy Route::get('/platnosci',...
miccom
Dałem sobie routes:
  1. Route::get('/platnosci/{data}', ['as' => 'autoryzacja', 'uses' => 'UserController@endPayUser']);


Otrzymuję komunikat:
  1. Sorry, the page you are looking for could not be found.
  2. 1/1
  3. NotFoundHttpException in RouteCollection.php line 161:


Mam dać tylko zwykły route jak poniżej?
  1. Route::get('/platnosci', ['as' => 'autoryzacja', 'uses' => 'UserController@endPayUser']);


Ok, jestem w domu.
Dziękuję za pomoc smile.gif


A jednak nie jestem w domu...

Usera przekierowuję poprawnie, natomiast płatność cashbill potwierdza przesłaniem danych niejawnie kanałem serwer-serwer

  1. adres URL, na który system wyśle powiadomienie dotyczące zmiany statusu transakcji kanałem serwer-serwer ( POST )


Tam wstawiłem adres URL:
https://www.mojastrona.pl/endPay/

Rout:
Route::get('/endPay', ['as' => 'autoryzacja', 'uses' => 'UserController@endPay']);


Ale w odpowiedzi otrzymuję komunikat:

  1. odpowiedź serwera: R_ERROR:
  2. Whoops, looks like something went wrong.
  3. 1/1
  4. MethodNotAllowedHttpException in RouteCollection.php line 219



Jak ustawić routing serwer-serwer?
nospor
A czy ten serwis z platnosciami nie sle ci przypadkiem tych danych POSTem? Bo ty niestety ustawiles route dla GETa
miccom
Tak nosporze, ale czy odbierając dane metodą POST muszę mieć potwierdzenie formularza przez podpis CSRF?
Jeśli dam ten routing na post
  1. Route::post('/endPay', ['as' => 'autoryzacja', 'uses' => 'UserController@endPay']);



otrzymuję ten sam komunikat sad.gif
viking
Nawet jest to jasno opisane w tym kawałku zacytowanym.
miccom
Tak vikingu, natomiast zmiana routa nie pomaga, zapewne CSRF przeszkadza i automatycznie blokuje to połączenie serwerowe
nospor
Nie znam laravela ale nie rozumiem czemu CSRF mialby tutaj cokolwiek do gadania. Jesli tak jest, to poszukaj w dokumetnacji jak to wylaczyc.
miccom
Wg instrukcji mozna poszczególne routy wyizolować aby nie wymagały csrf,

app/Middleware/VerifyCsrfToken.php

namespace App\Http\Middleware;

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

class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
'/endPay',
];
}

Tam wrzuciłem rout który ma być poza csrf, ale nadal ten sam błąd ;/
Pyton_000
CSRF można wyłączyć dla konkretnego URL w middleware.
viking
Zresztą csrf zwraca error bodajże 419 albo 420. Jeśli masz dalej błąd routingu to coś jeszcze jest nie tak. Może cache. Ściągnij sobie program insomnia i testuj.
miccom
Mój routing to:
  1. Route::group(['middleware' => ['web']], function () {
  2. Route::get('/', ['as' => '/', 'uses' => 'FirstController@indexStronaGlowna']);
  3. Route::get('/sale', ['as' => '/', 'uses' => 'FirstController@loadAllRoomSite']);
  4. Route::get('/cennik', ['as' => '/', 'uses' => 'FirstController@loadPriceListSite']);
  5. Route::get('/kontakt', ['as' => '/', 'uses' => 'FirstController@loadContactSite']);
  6. Route::get('/rejestracja', ['as' => '/', 'uses' => 'FirstController@loadRegisterSite']);
  7. Route::post('/endPay', ['as' => 'autoryzacja2', 'uses' => 'UserController@endPay']);
  8. });




userController.php
  1. public function endPay()
  2. {
  3. echo 'dziala';
  4. }



Jeśli wyświetlę sobie adres w insomnia to otwiera mi się strona główna z informacją, że muszę być zalogowany, aby widzieć tą stronę, co mam zmienić?

Jedno pytanie...Dlaczego zamiast pokazać białą stronę z tekstem "działa" odsyła do strony głównej?
viking
Jaka wersja lv? Zależy co zrobiłeś w middlewareach i autoryzacji w aplikacji. Możesz wyłączyć sprawdzanie per route.
miccom
laravel 5.2

W Authenticate mam tak:

public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/')->withErrors(['email'=>'Aby zobaczyć tą stronę musisz się zalogować']);
}
}

return $next($request);
}
nospor
Cytat
Dlaczego zamiast pokazać białą stronę z tekstem "działa" odsyła do strony głównej?

Bo robisz przekierowanie do glownej? O tu:
return redirect()->guest('/')->withErrors(['email'=>'Aby zobaczyć tą stronę musisz się zalogować']);
miccom
Powyższy kod z Authenticate to prawie oryginał laravel 5.2 master

Ok, więc rozkminiłem smile.gif



Na początku kontrolera UserControler mam:

public function __construct()
{
$this->middleware('auth');
}


Czyli z wszystkich funkcji sprawdzane jest, czy user jest zalogowany smile.gif
Funkcję endPay wrzuciłem do UserControler, i własnie middleware blokowało wszystko smile.gif

Przeniosłem funkcję endPay do innego kontrolera ( który nie sprawdza autoryzacji ) i działa pięknie ładnie.
Dziękuję wszystkim za udział w rozwiązaniu mojego problemu.
Pozdrawiam.
LowiczakPL
Systemy płatności nie mogą mieć autoryzowanego adresy, to musi być publiczny adres be żadnej autoryzacji czyli jako gość.

Route::group(['middleware' => ['auth']], function () {
//tylko autoryzowani użytkownicy mogą uzyskać dostęp do tych tras
});

Route::group(['middleware' => ['guest']], function () {
//kazdy ma do tego dostęp i tu robisz jakisz tajny adres do przyjmowania odpowiedzi
});
miccom
Ok, a jak mam jedną trasę dla gości i dla zalogowanych?
Mam ją dodać do obu grup?
LowiczakPL
zalogowany może przecież chodzić wszędzie ale nie zalogowany już nie powinien, to zależy co masz pod tym adresem, czy wrażliwe dane czy publiczne

rozdziel to na grypy ważności, publiczne i prywatne po autoryzacji

no chyba że masz jeszcze grypu zalogowanych osób, to do tego są role użytkowników
miccom
Ok, dziękuję za pomoc wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.