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.
katalog / styrenheten / betalning
. bitpay.php
. klass ControllerPaymentBitpay utökar Controller
. index
fungera.index()
funktion, skriv koden som nedan.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');
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 ();
.
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:
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.)
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);
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
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"]. "\" ";
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:
ring tillbaka()
. DIR_APPLICATION. '... /bitpay/bp_lib.php';
.$ apiKey = $ this-> config-> get ('bitpay_api_key');
$ response = bpVerifyNotification ($ apiKey);
om (is_string ($ response))
// Visa svarfelkoden här
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 vi skapade är ganska enkel, bara en knapp med en Ajax-förfrågan till API:
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.