Я использую этот пакет Laravel «https://github.com/kanazaca/easypay«создать ссылку на МБ с помощью Easypay API.
У меня есть этот метод для создания ссылки:
public function generateReference()
{
$amount = Session::get('total');
$payment_info = [
't_value' => $amount,
'o_obs' => '',
't_key' => 1
];
$easypay = new EasyPay($payment_info);
$reference = $easypay->createReference();
Session::put('entity', $reference['ep_entity']);
Session::put('reference', $reference['ep_reference']);
Session::put('value', $reference['ep_value']);
}
И с этим кодом все работает, я получаю несколько справочных кодов, которые можно оплатить, используя МБ или кредитную карту.
Затем, когда платеж будет сделан, easypay вызовет «URL-адрес уведомления».
что мы должны настроить на back-office easypay в разделе «Конфигурации URL».
Потому что, когда сервис easypay получит оплату, он позвонит по указанному нами URL-адресу. Поэтому я определил URL-адрес в бэк-офисе easypay и создал маршрут в проекте:
Route::get('/easypay/notification-callback', [
'uses' => 'PaymentController@receiveNotifications',
'as' =>'mb.notifications'
]);
В бэк-офисе API есть кнопка, которая имитирует платеж, после нажатия этой кнопки ничего не происходит, и если я получаю доступ вручную «http://....ngrok.io/easypay/notification-callback
«появляется пустой массив:
[]
Но в документации (https://docs.easypay.pt/workflow/payment-notification) говорит, что когда Easypay вызывает эту конечную точку, она имеет несколько параметров: «ep_cin», «ep_user» и «ep_doc», которые будут необходимы в процессе. Так что не должно появиться пустой массив.
Вы знаете, в чем может быть проблема? Я новичок в API, поэтому я не понимаю, в чем проблема.
PaymentController receiveNotifications()
метод:
public function receiveNotifications(Request $request)
{
dd($request->all());
//$easypay = new EasyPay($payment_info);
//$xml = $easypay->processPaymentInfo();
//return \Response::make($xml, '200')->header('Content-Type', 'text/xml'); //must return in text/xml for easypay
}
Метод receiveNotifications () с журналом:
public function receiveNotifications(Request $request)
{
//dd($request->all());
Log::info('Showing info: ' .var_export($request->all(),true));
$payment_info = [
'ep_cin' => $request->ep_cin,
'ep_user' => $request->ep_user,
'ep_doc' => $request->ep_doc
];
Log::info('Showing info: ' .var_export($payment_info,true));
//dd($payment_info);
$easypay = new EasyPay($payment_info);
$xml = $easypay->processPaymentInfo();
return \Response::make($xml, '200')->header('Content-Type', 'text/xml'); //must return in text/xml for easypay
}
Сеанс сохраняется в файле сеанса пользователя, который посещает ваш сайт и инициирует платеж.
ReceiveNotifications будет вызывать данные из файла сеанса, который принадлежит серверу платежного шлюза, если вы что-то там делаете. Данные не совпадают, потому что они не знают друг о друге.
Кроме того, вы можете не иметь Session::save()
где-то в вашей обработке запросов, которая записывает данные сеанса в файл.
Храните ссылку в базе данных. Создайте модель для хранения этих данных, чтобы затем вы могли запросить у этой модели правильный ссылочный идентификатор, чтобы проверить / сделать материал.
Когда запрос возвращается из платежного шлюза, используйте переменные ep_cin, ep_user и ep_doc для получения данных из модели.
Когда вы вручную запрашиваете эти данные, вы запрашиваете их с помощью запроса GET, который не отправляет вышеуказанные данные вместе.
Запрос, сделанный платежным провайдером, получит результат DD, но он нигде не зарегистрирован, поэтому ничего не происходит.
Зарегистрируйте ваши данные для запросов, вызванных удаленными API, чтобы увидеть, что происходит.
Других решений пока нет …