2017-05-04 5 views
2

Ich versuche, eine Zahlung mit Omnipay und Mollie in meinem Laravel-Projekt zu erstellen. Ich verwende die folgenden 2 Bibliotheken:Antwort Objekt - Zahlung mit Mollie und Omnipay

ich in meinem Code folgendes mache:

$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('[email protected]'), 
]; 


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

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

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

Die Bezahlung funktioniert. Wenn die Zahlung abgeschlossen ist, kehrt er zum Funktionsrückfall zurück. Aber ich weiß nicht, was ich in diese Funktion einbauen soll und wie ich zur Zeile if($response->isSuccesfull()...) zurückkehre.

Das Wichtigste, was ich nach der Zahlung tun müssen, ist:

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

return $this->completeOrder($event_id); 

Kann mir jemand helfen, herauszufinden, wie mit der Ausweichfunktion zu arbeiten und darüber?

+0

Können Sie Ihre Frage aktualisieren, um mehr deutlich zu machen, was Flow du benutzt? Von deinen anderen Fragen verstehe ich, dass dieses PHP-Skript als AJAX-Aufruf bezeichnet wird. Dieser Code erstellt die Zahlung. Nach dem erfolgreichen Abschluss der Zahlung benötigen Sie ein anderes Skript zum Anrufen. – Daan

+0

@Daan, ich mache es nicht mehr mit einer AJAX-Anfrage. Es ist jetzt nur eine normale POST-Anfrage. – nielsv

+0

Wird die Zahlung über eine Weiterleitung an das Mollie-Gateway durchgeführt? – delatbabel

Antwort

2

Ein typischer Aufbau Mollie Verwendung besteht aus drei getrennten Seiten:

  • eine Seite, die Zahlung zu schaffen;
  • eine Seite, auf der Mollie den Status der endgültigen Zahlung im Hintergrund anzeigt; und
  • eine Seite, auf die der Verbraucher nach der Zahlung zurückkehrt.

Der vollständige Durchfluss wird in the Mollie docs beschrieben. Sehen Sie sich auch das Flussdiagramm auf dieser Seite an.

HAFTUNGSAUSSCHLUSS: Ich habe Omnipay selbst nie benutzt und habe den folgenden Code nicht getestet, aber es sollte Ihnen zumindest eine Idee geben, wie Sie Ihr Projekt einrichten.

Erstellen der Zahlung:

$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(); 
} 

Empfang der Webhook:

$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 
} 

Seite, wo die Verbraucher wieder:

// 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.