În tutorialul anterior, am început să implementăm un sistem de plată Bitcoin. Mai precis, am introdus un tablou de bord pentru a permite utilizatorilor noștri să administreze pluginul. În acest tutorial, vom continua să lucrăm la plugin făcând un front-end al magazinului.
Catalog / controler / plata
. bitpay.php
. clasa ControllerPaymentBitpay extinde Controller
. index
funcţie.index()
funcția, scrieți codul de mai jos.Prima linie a codului următor își încarcă limba în controler, iar liniile următoare parsează linkurile și textele lingvistice pentru utilizarea vizualizării.
$ This-> language-> de încărcare ( 'plată / bitpay'); $ this-> data ['button_bitpay_confirm'] = $ acest-> limbă-> primi ('text_button_confirm'); $ this-> data ['continuă'] = $ this-> url-> link ('checkout / succes');
Pentru a seta destinația șablonului:
$ this-> template = $ this-> config-> get ('config_template'). '/Template/payment/bitpay.tpl';
Pentru a face șablonul: $ This-> render ();
.
Până în acest moment, am scris doar un cod care se ocupă în special de setările modulului și de aspectul acestuia. Aici, ne vom concentra pe comunicarea cu API. În acest sens, vom crea o altă funcție în cadrul controlorului nostru, care este responsabil pentru comunicarea cu API-ul BitPay.
Așa că vom crea un a funcția publică trimite ()
pentru a ne atinge obiectivul, iar în interiorul acestei funcții codul este explicat pe rând, după cum urmează:
Avem două biblioteci / clase necesare pentru a fi încărcate în controlorul nostru, adică API-ul Bibliotecii BitPay și Modelul de comandă:
include DIR_APPLICATION. '... /bitpay/bp_lib.php'; $ This-> a sarcinii> modelul ( 'checkout / comandă');
(Deoarece Biblioteca BitPay nu este o bibliotecă bazată pe OpenCart, am inclus direct funcțiile acesteia în controlerul nostru, așa cum se arată în primul rând de mai sus.)
Pentru a obține detaliile complete de comandă, putem folosi următoarele:
$ order = $ this-> model_checkout_order-> getOrder ($ this-> session-> data ['order_id']);
Variabilele atribuite obțin toate detaliile necesare sub forma unui matrice.
Și pentru a formata moneda selectată implicit pentru ordine, folosim:
$ price = $ this-> currency-> format ($ comanda ['total'], comanda $ ['currency_code'], $ order ['currency_value'], false);
Următorul cod este responsabil pentru interacțiunea cu API și parsarea datelor necesare funcției API.
$ posData = $ comanda ['order_id']; // Ordine informații care urmează să fie postate în API $ options = array ('apiKey' => $ this-> config-> get ('bitpay_api_key'), // Cheie API extras din baza de date 'notificationURL' => $ this-> url-> link ('plata / bitpay / callback'), // Adresa URL de apel invers API 'redirectURL' => $ this-> url-> link ('account / order / info & order_id = ), // Comandați adresa URL 'currency' => $ order ['currency_code'], // Codul valutar comandat 'transactionSpeed' => $ this-> config-> get ('bitpay_transaction_speed' documentația API pentru detalii) 'testMode' => $ this-> config-> get ('bitpay_test_mode') // Set Test Mode activat sau dezactivat); $ response = bpCreateInvoice ($ comandă ['order_id'], $ price, $ posData, $ opțiuni); // Parsează informațiile către API
Pentru unele acțiuni nevalide API aruncă o eroare înapoi utilizatorului. Deci, următorul cod aruncă un răspuns în formatul JSON pentru noi:
dacă array_key_exists ('error', $ response) echo "\" error \ ": \" Eroare: Problemă de comunicare cu furnizorul de plăți. \\ nVă rugăm încercați din nou mai târziu. "url \": \ "". $ răspuns ["url"].
Ar trebui să fie clar din numele său că aceasta ar fi funcția de apel invers API. Acesta returnează informațiile de plată necesare și o aruncă utilizatorului. Urmați pașii de mai jos:
suna inapoi()
. DIR_APPLICATION. "... /bitpay/bp_lib.php";
.$ apiKey = $ acest-> config-> get ('bitpay_api_key');
$ răspuns = bpVerifyNotificare ($ apiKey);
dacă (is_string ($ răspuns))
// Afișați codul de eroare de răspuns aici
comanda ($ response ['status']) // Daca comanda este de succes si caz completat 'confirmat': caz 'complet': $ this-> load-> model ('checkout / order'); // Încărcarea modelului de comandă $ order_id = $ response ['posData']; // Obținerea ID-ului de comandă din răspunsul $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Obțineți detalii de comandă $ this-> model_checkout_order-> confirmați ($ order_id, $ this-> config-> get ('bitpay_confirmed_status_id')); // Confirmați starea comenzii ca pauză completă; caz "invalid": // Dacă comanda este nevalidă din cauza unor probleme $ this-> load-> model ('checkout / order'); // încărcarea modelului de comandă $ order_id = $ response ['posData']; // Obținerea ID-ului de comandă din răspunsul $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Obțineți detalii de comandă $ this-> model_checkout_order-> confirmați ($ order_id, $ this-> config-> get ('bitpay_invalid_status_id')); // Confirmați starea comenzii ca pauză nevalidă;
Viziunea pe care am creat-o este destul de simplă, doar un singur buton cu o solicitare Ajax către API:
Această serie servește ca o introducere pentru construirea modulelor OpenCart mai avansate. De aici, ar trebui să puteți urmări documentația OpenCart pentru a continua construirea acestui plugin (și chiar și a propriilor dvs.).
Vă rugăm să lăsați toate întrebările, comentariile și feedback-ul în formularul de mai jos.