Уведомление об обратном вызове не принимается - PullRequest
0 голосов
/ 26 апреля 2018

Я использую этот пакет 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-адрес уведомления». что мы должны сконфигурировать в бэк-офисе 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
    }

1 Ответ

0 голосов
/ 12 июня 2018

Сессия сохраняется в файле сессии пользователя, который посещает ваш веб-сайт и инициирует платеж.

receiveNotifications будет вызывать данные из файла сеанса, который принадлежит серверу платежного шлюза, если вы что-то там делаете. Данные не совпадают, потому что они не знают друг о друге.

Кроме того, у вас может не быть Session::save() где-то в вашем запросе, который записывает данные сеанса в файл.

Хранить ссылку в базе данных. Создайте модель для хранения этих данных, чтобы затем вы могли запросить у этой модели правильный ссылочный идентификатор, чтобы проверить / сделать что-то.

Когда запрос возвращается из платежного шлюза, используйте переменные ep_cin, ep_user и ep_doc для получения данных из модели.

Когда вы вручную запрашиваете эти данные, вы запрашиваете их с помощью запроса GET, который не передает вышеуказанные данные вместе.

Запрос, сделанный платежным провайдером, получит результат DD, но он нигде не зарегистрирован, поэтому ничего не происходит.

Записывайте ваши данные для запросов, инициируемых удаленными API, чтобы увидеть, что происходит.

...