Объект ответа — Оплата с помощью Mollie и Omnipay

Я пытаюсь создать платеж с помощью Omnipay и Mollie в своем проекте Laravel. Я использую следующие 2 библиотеки:

Я делаю следующее в своем коде:

$gateway = Omnipay\Omnipay::create('Mollie');

$gateway->setApiKey('test_gSDS4xNA96AfNmmdwB3fAA47zS84KN');

$params = [
    'amount' => $ticket_order['order_total'] + $ticket_order['organiser_booking_fee'],
    'description' => 'Bestelling voor klant: ' . $request->get('order_email'),
    'returnUrl' => URL::action('EventCheckoutController@fallback'),
];


$response = $gateway->purchase($params)->send();

if ($response->isSuccessful()) {
    session()->push('ticket_order_' . $event_id . '.transaction_id',
        $response->getTransactionReference());

    return $this->completeOrder($event_id);
}

Плата работает. После оплаты он возвращается к резервной функции. Но я не знаю, что прописать в этой функции и как вернуться к строке if($response->isSuccesfull()...).

Самое главное, что мне нужно сделать после оплаты:

session()->push('ticket_order_' . $event_id . '.transaction_id',
        $response->getTransactionReference());

return $this->completeOrder($event_id);

Может ли кто-нибудь помочь мне понять, как работать с резервной функцией и выше?


person nielsv    schedule 04.05.2017    source источник
comment
Можете ли вы обновить свой вопрос, чтобы прояснить, какой поток вы используете? Из других ваших вопросов я понимаю, что этот php-скрипт вызывается как вызов AJAX. Этот код создает платеж. Вам понадобится другой скрипт для вызова после успешного завершения платежа.   -  person Daan    schedule 04.05.2017
comment
@Даан, я больше не делаю этого с запросом AJAX. Теперь это обычный POST-запрос.   -  person nielsv    schedule 04.05.2017
comment
Оплата осуществляется путем перенаправления на шлюз Mollie?   -  person delatbabel    schedule 05.05.2017
comment
да, это делается с помощью редиректа.   -  person nielsv    schedule 05.05.2017


Ответы (1)


Типичная установка с использованием Mollie состоит из трех отдельных страниц:

  • страница для создания платежа;
  • страница, на которой Молли в фоновом режиме публикует окончательный статус платежа; а также
  • страница, на которую потребитель возвращается после оплаты.

Полный процесс описан в документах Mollie< /а>. Также взгляните на блок-схему на этой странице.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я никогда не использовал Omnipay сам и не тестировал следующий код, но он должен хотя бы дать вам представление о том, как настроить ваш проект.

Создание платежа:

$gateway = Omnipay\Omnipay::create('Mollie');
$gateway->setApiKey('test_gSDS4xNA96AfNmmdwB3fAA47zS84KN');

$params = [
    'amount' => $ticket_order['order_total'] + $ticket_order['organiser_booking_fee'],
    'description' => 'Bestelling voor klant: ' . $request->get('order_email'),
    'notifyUrl' => '', // URL to the second script
    'returnUrl' => '', // URL to the third script
];

$response = $gateway->purchase($params)->send();

if ($response->isRedirect()) {
    // Store the Mollie transaction ID in your local database
    store_in_database($response->getTransactionReference());
    // Redirect to the Mollie payment screen
    $response->redirect();
} else {
    // Payment failed: display message to the customer
    echo $response->getMessage();
}

Получение вебхука:

$gateway = Omnipay\Omnipay::create('Mollie');
$gateway->setApiKey('test_gSDS4xNA96AfNmmdwB3fAA47zS84KN');

$params = [
    'transactionReference' => $_POST['id'],
];

$response = $gateway->fetchTransaction($params);

if ($response->isPaid()) {
    // Store in your local database that the transaction was paid successfully
} elseif ($response->isCancelled() || $response->isExpired()) {
    // Store in your local database that the transaction has failed
}

Страница, на которую возвращается потребитель:

// Check the payment status of your order in your database. If the payment was paid
// successfully, you can display an 'OK' message. If the payment has failed, you
// can show a 'try again' screen.

// Most of the time the webhook will be called before the consumer is returned. For
// some payment methods however the payment state is not known immediately. In
// these cases you can just show a 'payment is pending' screen.
person Daan    schedule 05.05.2017