Integrera Bitcoin Payment Gateway Into OpenCart Del 2

I den tidigare handledningen började vi implementera ett Bitcoin betalningssystem. I synnerhet introducerade vi en instrumentpanel för att göra det möjligt för våra användare att administrera plugin. I den här handledningen fortsätter vi att fortsätta arbeta med plugin-modulen genom att bygga upp fronten.

1. Controller

  1. Navigera till katalog / styrenheten / betalning
  2. Skapa en PHP-fil och namnge den till bitpay.php
  3. Öppna filen i din favorit IDE och skriv en klass av den här modulen med hjälp av OpenCart-klassnamnkonventionen, till exempel: klass ControllerPaymentBitpay utökar Controller
  4. Inne i klassen skapar du standard OpenCart index fungera.
  5. Inuti index() funktion, skriv koden som nedan.

1.1 Ladda språk och analysvärden

Den första raden i följande kod laddar sitt språk in i regulatorn, och de följande raderna analyserar länkar och språktexter för visningsanvändningen.

$ This-> språk-> last (betalning / bitpay '); $ this-> data ['button_bitpay_confirm'] = $ this-> language-> get ('text_button_confirm'); $ this-> data ['continue'] = $ this-> url-> länk ('checkout / framgång'); 

1,2. Mall & Rendering

Så här anger du mallens destination:

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

För att göra mallen: $ This-> render ();

2. En API-förfråganfunktion

Hittills har vi bara skrivit kod som specifikt handlar om modulens inställningar och dess layout. Här kommer vi att fokusera specifikt på att kommunicera med API: n. I detta avseende skapar vi en annan funktion inom vår controller som ansvarar för kommunikation med BitPay API.

Så vi kommer att skapa en offentlig funktion skicka () för att uppnå vårt mål, och precis inom denna funktion förklaras koden linje för rad enligt nedan:

2.1 Laddar nödvändiga bibliotek / klasser i kontrollenhet

Vi har två obligatoriska bibliotek / klasser som ska laddas in i vår controller, dvs BitPay Library API och Order Model:

inkludera DIR_APPLICATION. '... /bitpay/bp_lib.php'; $ This-> last> modell ( 'kassan / beställning'); 

(Eftersom BitPay-biblioteket inte är ett OpenCart-baserat bibliotek inkluderade vi direkt dess funktioner i vår kontroller som visas i första raden ovan.)

2.2 Få orderdetaljer och formatering

För att få fullständiga Orderdetaljer kan vi använda följande:

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

 De tilldelade variablerna får alla nödvändiga detaljer i form av en matris.

Och för att formatera den ordinarie valda valutan använder vi:

$ pris = $ this-> currency-> format ($ order ['total'], $ order ['currency_code'], $ order ['currency_value'], false);

2.3 Samverkan med API

Följande kod är ansvarig för att interagera med API: n och analysera nödvändiga data till API-funktionen.

$ posData = $ order ['order_id']; // Beställningsinformation som ska publiceras i API $ options = array ('apiKey' => $ this-> config-> get ('bitpay_api_key'), // API-nyckel hämtade från databasen 'notificationURL' => $ this-> url-> länk ('betalning / bitpay / callback'), // Återkopplingsadressen för API 'redirectURL' => $ this-> url-> länk ('konto / order / info & order_id ='. $ order ['order_id'] ), // Beställningsinformation URL 'currency' => $ order ['currency_code'], // Ordered Currency Code 'transactionSpeed' => $ this-> config-> get ('bitpay_transaction_speed'), // Transaktionshastighet API-dokumentationen för detaljer) 'testMode' => $ this-> config-> get ('bitpay_test_mode') // Ange testläge aktiverat eller inaktiverat); $ response = bpCreateInvoice ($ order ['order_id'], $ pris, $ posData, $ options); // Parse informationen till API 

2.4 Felhantering

För vissa ogiltiga åtgärder kastar API ett fel tillbaka till användaren. Så följande koden slår ett svar i JSON-format till oss:

om array_key_exists ("error", $ response) echo "\" error \ ": \" Fel: Problem att kommunicera med betalningsleverantören. \\ nTryck försök senare. \ ""; else echo "\ "url \": \ "". $ svar ["url"]. "\" ";

3. Återuppringningsfunktion

Det bör vara tydligt från namnet att detta skulle vara API-återuppringningsfunktionen. Den returnerar nödvändig betalningsinformation och slänger den till användaren. Följ stegen nedan:

  1. Skapa en offentlig funktion ring tillbaka()
  2. Inne i funktionen, inkludera biblioteket: DIR_APPLICATION. '... /bitpay/bp_lib.php';.
  3. Hämta API Response Array Key med följande kod:
    $ apiKey = $ this-> config-> get ('bitpay_api_key');
    $ response = bpVerifyNotification ($ apiKey); 
  4. Kontrollera efter svar. Om svaret är en sträng måste det finnas ett fel: 
    om (is_string ($ response))

    // Visa svarfelkoden här            
     
  5. Och inom det andra uttalandet måste vi bekräfta ordern med hjälp av koden som visas nedan.
switch ($ response ['status']) // Om Order är framgångsrikt och fullständigt fall 'bekräftat': case 'complete': $ this-> load-> model ('checkout / order'); // Laddar beställningsmodellen $ order_id = $ response ['posData']; // Hämta order-ID från svaret $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Få orderuppgifter $ this-> model_checkout_order-> bekräfta ($ order_id, $ this-> config-> get ('bitpay_confirmed_status_id')); // Bekräfta Order Status som fullständig paus fallet "ogiltigt": // Om Order är ogiltigt på grund av vissa problem $ this-> load-> model ('checkout / order'); // laddar Order Model $ order_id = $ response ['posData']; // Hämta order-ID från svaret $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Få orderuppgifter $ this-> model_checkout_order-> bekräfta ($ order_id, $ this-> config-> get ('bitpay_invalid_status_id')); // Bekräfta orderstatus som ogiltig paus 

Vyn

Vyn vi skapade är ganska enkel, bara en knapp med en Ajax-förfrågan till API:

  

Slutsats

Denna serie fungerar som en introduktion till att bygga mer avancerade OpenCart-moduler. Härifrån borde du kunna följa OpenCart-dokumentationen för att fortsätta bygga ut det här pluginet (och till och med några av dina egna).

Vänligen lämna alla frågor, kommentarer och feedback i formuläret nedan.