Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Для оплаты товара покупатель переходит из 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)
{
//здесь выборка данных сессии, сохраненных ранее
}
}
Проблема в том, что в сессии необходимых данных нет (в принципе код сохранения-извлечения сесс. данных верен).
Что я делаю не так?
Не в сети
сессии там и не будет – запрос же не из браузера приходит а с сервера платёжной системы. все данные, которые ты пытаешься взять из сессии надо передавать в платёжную систему дополнительными полями, которые платёжная система передаёт на колбэках обратно на сайт – там уже документацию смотреть надо. это с любой платёжной системой так делается обычно
Не в сети
А можно чуток поконкретней.
Я должен получить от платежной системы некие данные, скажем:
class OrderController extends Controller {
public function postNotification(Request $request)
{
$data1 = $request->only('data1');
$data2 = $request->only('data2');
//далее мне надо как-то сохранить данные $data1 и $data2 для дальнейшего пользования (как???)
//проверить корректность этих данных, сделать запись в бд...в общем, какие-то стандартные манипуляции по обработке
//а платежной системе отправить ответ (в случае корректности этих данных) - все хорошо, либо наоборот все плохо
}
}
Пусть не сессия, то каким еще вариантом сохраняем?
Не в сети
открываешь документацию по апи платёжной системы, смотришь какие можно ей передать параметры такие, чтобы она их передавала в нотификации и – заносишь туда все данные, которые потребуются при обработке платежа
например, не так давно интегрировал сайт с яндекс-кассой. открываем документацию и видим – https://cl.ly/3m0F1u0g1E2Y то есть все параметры с нестандартными названиями будут переданы в колбэки в неизменном виде. соответственно я собираю всю нужную инфу в массив, сериализую в строку и кладу в форму <input type="hidden" name="order_data" value="..."> и потом десериализую в обработчике из $_REQUEST['order_data'] обратно – всё работает
у твоей платёжной системы скорее всего своё апи, но в документации должно быть прописано что именно передаётся в колбэки, какие пользовательские данные можно туда занести чтобы потом их обратно прочитать
Не в сети
Я знаю, какие данные должны прийти от платежной системы. И вижу в логах 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 до контроллера лары
Не в сети
добавь в обработчик logger(var_export($request->all(), true)); и посмотри в storage/logs/laravel.log что именно пришло в $request
Не в сети
Страницы 1