Integrieren Sie das Bitcoin Payment Gateway in OpenCart Teil 2

Im vorherigen Tutorial haben wir mit der Einführung eines Bitcoin-Zahlungssystems begonnen. Insbesondere haben wir ein Dashboard eingeführt, mit dem unsere Benutzer das Plugin verwalten können. In diesem Lernprogramm werden wir das Plugin weiterentwickeln, indem wir das Store-Frontend erstellen.

1. Der Controller

  1. Navigiere zu Katalog / Controller / Zahlung
  2. Erstellen Sie eine PHP-Datei und benennen Sie sie bitpay.php
  3. Öffnen Sie die Datei in Ihrer bevorzugten IDE und schreiben Sie eine Klasse dieses Moduls unter Verwendung der Namenskonvention der OpenCart-Klasse. Beispiel: Klasse ControllerPaymentBitpay erweitert Controller
  4. Erstellen Sie in der Klasse die Standard-OpenCart Index Funktion.
  5. In der Index() Funktion, schreiben Sie den Code wie folgt.

1.1 Laden von Sprachen und Analysewerten

Die erste Zeile des folgenden Codes lädt seine Sprache in den Controller, und die nächsten Zeilen analysieren Links und Sprachtexte für die Ansicht.

$ this-> language-> load ('payment / bitpay'); $ this-> data ['button_bitpay_confirm'] = $ this-> language-> get ('text_button_confirm'); $ this-> data ['continue'] = $ this-> url-> link ('checkout / success'); 

1.2. Vorlage & Rendering

So legen Sie das Vorlagenziel fest:

 $ this-> template = $ this-> config-> get ('config_template'). "/template/payment/bitpay.tpl";

So rendern Sie die Vorlage: $ this-> render ();

2. Eine API-Anforderungsfunktion

Bis jetzt haben wir nur Code geschrieben, der sich speziell mit den Einstellungen des Moduls und seinem Layout befasst. Hier konzentrieren wir uns speziell auf die Kommunikation mit der API. In diesem Zusammenhang erstellen wir eine weitere Funktion in unserem Controller, die für die Kommunikation mit der BitPay-API verantwortlich ist.

Also schaffen wir eine öffentliche Funktion send () Um unser Ziel zu erreichen, wird der Code direkt in dieser Funktion Zeile für Zeile wie folgt erklärt:

2.1 Laden der erforderlichen Bibliotheken / Klassen in den Controller

Wir haben zwei erforderliche Bibliotheken / Klassen, die in unseren Controller geladen werden sollen, d. H. Die BitPay Library API und das Order Model:

include DIR_APPLICATION. '… /bitpay/bp_lib.php'; $ this-> load-> model ('Checkout / order'); 

(Da die BitPay Library keine OpenCart-basierte Bibliothek ist, haben wir ihre Funktionen direkt in unsere Steuerung aufgenommen, wie in der ersten Zeile oben gezeigt.)

2.2 Bestelldetails und Formatierung abrufen

Um die vollständigen Bestelldetails zu erhalten, können wir Folgendes verwenden:

$ order = $ this-> model_checkout_order-> getOrder ($ this-> session-> data ['order_id']);

 Die zugewiesenen Variablen erhalten alle notwendigen Details in Form eines Arrays.

Und für die Formatierung der Standardwährung der Bestellung verwenden wir:

$ price = $ this-> Currency-> Format ($ order ['total'], $ order ['currency_code'], $ order ['currency_value'], false);

2.3 Interaktion mit der API

Der folgende Code ist für die Interaktion mit der API und das Analysieren der erforderlichen Daten für die API-Funktion verantwortlich.

$ posData = $ order ['order_id']; // Bestellinformationen, die in das API $ options = Array geschrieben werden sollen ('apiKey' => $ this-> config-> get ('bitpay_api_key')), // API-Schlüssel aus der Datenbank 'notificationURL' => $ this-> abgerufen url-> link ('payment / bitpay / callback'), // Die API-Callback-URL 'redirectURL' => $ this-> url-> link ('account / order / info & order_id ='. $ order ['order_id'] ), // Bestellinformations-URL 'currency' => $ order ['currency_code'], // Bestellter Währungscode 'transactionSpeed' => $ this-> config-> get ('bitpay_transaction_speed'), // Transaktionsgeschwindigkeit (Siehe die API-Dokumentation für Details) 'testMode' => $ this-> config-> get ('bitpay_test_mode') // Testmodus aktivieren oder deaktivieren (aktivieren); $ response = bpCreateInvoice ($ order ['order_id'], $ price, $ posData, $ options); // Analysiere die Informationen in die API 

2.4 Fehlerbehandlung

Bei einigen ungültigen Aktionen gibt die API einen Fehler an den Benutzer zurück. Der folgende Code gibt uns also eine Antwort im JSON-Format:

if (array_key_exists ('error', $ response) echo "\" error \ ": \": Fehler: Problem beim Kommunizieren mit dem Zahlungsanbieter. \\ nBitte versuchen Sie es später erneut. \ ""; else echo "\ "url \": \ "". $ response ["url"]. "\" ";

3. Rückruffunktion

Aus seinem Namen sollte klar sein, dass dies die API-Callback-Funktion sein würde. Es gibt die erforderlichen Zahlungsinformationen zurück und wirft sie dem Benutzer zu. Folgen Sie den Schritten wie folgt:

  1. Erstellen Sie eine öffentliche Funktion Ruf zurück()
  2. Fügen Sie in der Funktion die Bibliothek ein: DIR_APPLICATION. '… /Bitpay/bp_lib.php';.
  3. Rufen Sie den API-Antwortarrayschlüssel mit dem folgenden Code ab:
    $ apiKey = $ this-> config-> get ('bitpay_api_key');
    $ response = bpVerifyNotification ($ apiKey); 
  4. Suchen Sie nach einer Antwort. Wenn die Antwort eine Zeichenfolge ist, muss ein Fehler vorliegen: 
    if (is_string ($ response))

    // Zeigt den Antwortfehlercode hier an            
     
  5. Innerhalb der else-Anweisung müssen wir die Bestellung mit dem unten angegebenen Code bestätigen.
switch ($ response ['status']) // Wenn der Auftrag erfolgreich ist und den Fall abgeschlossen hat 'bestätigt': Fall 'abgeschlossen': $ this-> load-> model ('Checkout / order'); // Laden des Bestellmodells $ order_id = $ response ['posData']; // Holen der Bestell-ID aus der Antwort $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Bestelldetails abrufen $ this-> model_checkout_order-> confirm ($ order_id, $ this-> config-> get ('bitpay_confirmed_status_id')); // Bestätige den Bestellstatus als vollständigen Bruch; case 'invalid': // Wenn der Auftrag aufgrund einiger Probleme ungültig ist $ this-> load-> model ('checkout / order'); // Laden des Bestellmodells $ order_id = $ response ['posData']; // Holen der Bestell-ID aus der Antwort $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Bestelldetails abrufen $ this-> model_checkout_order-> confirm ($ order_id, $ this-> config-> get ('bitpay_invalid_status_id')); // Bestätigen Sie den Bestellstatus als ungültigen Bruch. 

Die Aussicht

Die von uns erstellte Ansicht ist ziemlich einfach, nur eine Schaltfläche mit einer Ajax-Anforderung an die API:

  

Fazit

Diese Serie dient als Einführung in die Entwicklung fortschrittlicherer OpenCart-Module. Von hier aus sollten Sie in der Lage sein, die OpenCart-Dokumentation zu befolgen, um dieses Plugin weiterentwickeln zu können (und sogar einige von Ihnen selbst)..

Bitte hinterlassen Sie alle Fragen, Kommentare und Rückmeldungen im untenstehenden Formular.