Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » curl-запрос со сторонего сервиса » 09.02.2017 13:13:40

Я знаю, какие данные должны прийти от платежной системы. И вижу в логах linux-сервера, что до сервера они в принципе дошли:

63.83.16.50 - - [09/Feb/2017:10:46:19 +0700] "POST /order/notification HTTP/1.1" "Signature=6F16D&OrderID=0078&Status=authorized" 200 20692 

Но $request их не видит.
Отдаются они curl-ом.
Вот и не понятно, то ли ошибка какая с моей стороны, то ли данные теряются на пути от сервера linux до контроллера лары

#2 Re: Laravel 5.x » curl-запрос со сторонего сервиса » 09.02.2017 12:36:06

А можно чуток поконкретней.
Я должен получить от платежной системы некие данные, скажем:

class OrderController extends Controller {
    public function postNotification(Request $request)
    {
        $data1 = $request->only('data1');
        $data2 = $request->only('data2');
        //далее мне надо как-то сохранить данные $data1 и $data2 для дальнейшего пользования (как???)
        //проверить корректность этих данных, сделать запись в бд...в общем, какие-то стандартные манипуляции по обработке
        //а платежной системе отправить ответ (в случае корректности этих данных) - все хорошо, либо наоборот все плохо
    }
}

Пусть не сессия, то каким еще вариантом сохраняем?

#3 Laravel 5.x » curl-запрос со сторонего сервиса » 09.02.2017 10:52:19

AlexBoy
Ответов: 5

Для оплаты товара покупатель переходит из online-магазина в платежную систему, совершает там платеж,
платежная система отсылает фоном уведомление с необходимыми даными post-запросом посредством curl.

Уведомление приходит на адрес магазина mysait/order/notification, соотвествующий контроллер:

class OrderController extends Controller {
    public function postNotification(Request $request)
    {
        //здесь запись данных запроса в переменные сессии
    }
}

Затем покупатель жмет на ссылку "покинуть страницу" и уходит с платежной системы, адрес возврата: mysait/order/result.
Соответствующий контроллер:

class OrderController extends Controller {
    public function anyResult(Request $request)
    {
        //здесь выборка данных сессии, сохраненных ранее
    }
}

Проблема в том, что в сессии необходимых данных нет (в принципе код сохранения-извлечения сесс. данных верен).
Что я делаю не так?

#4 Re: Laravel 5.x » Обработка post запроса от стороннего сервиса » 03.02.2017 11:20:45

Спасибо, заработало!

Вот только еще надо было закоментить строчку

    'App\Http\Middleware\VerifyCsrfToken'

в app\Http\Kernel.php, иначе сразу сваливалось на домашнюю страницу

#5 Re: Laravel 5.x » Обработка post запроса от стороннего сервиса » 03.02.2017 10:26:53

И все же, как заставить (уговорить, запутать, обмануть) лару принять post-данные со стороннего источника?

#6 Re: Laravel 5.x » Обработка post запроса от стороннего сервиса » 03.02.2017 08:43:55

ларавель для известных маршрутов, заканчивающихся на слэш, делает редирект на адрес без слэша

И как можно решить проблему?
Так же сталкивался с этой проблемой при редиректе и внутри проекта, приходилось прописывать кроме post-маршрутов еще и get-маршруты (скажем, при возврате на предыдущую страницу при ошибке ввода в форму).

#7 Re: Laravel 5.x » Обработка post запроса от стороннего сервиса » 03.02.2017 08:04:09

constb пишет:

отдаёт редирект на "http://mysait/order/payment" (без слэша)

Я же явно указал слэш в "http://mysait/order/payment/"

#8 Laravel 5.x » Обработка post запроса от стороннего сервиса » 03.02.2017 06:53:45

AlexBoy
Ответов: 8

Пользую L 5.1.
Есть необходимость отработать post-запрос, пришедший от сторонней платежной системы.
В запросе отдаются, будем считать, две переменые: status и sign.
Обработка в контроллере пока простейшая:

    class OrderController extends Controller {
         public function anyPayment(Request $request) {
             dd($request->all());
        }
    }

Отключаю CSRF-проверку добавлением в VerifyCsrfToken:

    protected $except = [
        'order/payment/*',
    ];

Итог: dd отдает мне пустой массив.
Далее, проверяю, в принципе данные поступают или нет.
Сооружаю формочку:

    <form method = "post"  action = "http://mysait/order/payment/"> 
        <div>status <input   type = "text" name = "status" value = "abc" /></div> 
	<div>sign <input   type = "text" name = "sign" value = "def" /></div> 
       <div> <input type = "submit"></div> 
    </form>

Проверка дает отрицательный результат, данных нет.
В формочке post меняю на get.
Что имеем:

array:2 [▼
  "status" => "abc"
  "sign" => "def"
]

Вопрос: что делается не так, и есть ли варианты решения этой проблемы?

Подвал раздела