Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Я знаю, какие данные должны прийти от платежной системы. И вижу в логах 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 до контроллера лары
А можно чуток поконкретней.
Я должен получить от платежной системы некие данные, скажем:
class OrderController extends Controller {
public function postNotification(Request $request)
{
$data1 = $request->only('data1');
$data2 = $request->only('data2');
//далее мне надо как-то сохранить данные $data1 и $data2 для дальнейшего пользования (как???)
//проверить корректность этих данных, сделать запись в бд...в общем, какие-то стандартные манипуляции по обработке
//а платежной системе отправить ответ (в случае корректности этих данных) - все хорошо, либо наоборот все плохо
}
}
Пусть не сессия, то каким еще вариантом сохраняем?
Для оплаты товара покупатель переходит из 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)
{
//здесь выборка данных сессии, сохраненных ранее
}
}
Проблема в том, что в сессии необходимых данных нет (в принципе код сохранения-извлечения сесс. данных верен).
Что я делаю не так?
Спасибо, заработало!
Вот только еще надо было закоментить строчку
'App\Http\Middleware\VerifyCsrfToken'
в app\Http\Kernel.php, иначе сразу сваливалось на домашнюю страницу
И все же, как заставить (уговорить, запутать, обмануть) лару принять post-данные со стороннего источника?
ларавель для известных маршрутов, заканчивающихся на слэш, делает редирект на адрес без слэша
И как можно решить проблему?
Так же сталкивался с этой проблемой при редиректе и внутри проекта, приходилось прописывать кроме post-маршрутов еще и get-маршруты (скажем, при возврате на предыдущую страницу при ошибке ввода в форму).
отдаёт редирект на "http://mysait/order/payment" (без слэша)
Я же явно указал слэш в "http://mysait/order/payment/"
Пользую 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"
]
Вопрос: что делается не так, и есть ли варианты решения этой проблемы?
Страницы 1