Integrați Gateway de plată Bitcoin în OpenCart Partea 2

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

1. Controlerul

  1. Navigheaza catre Catalog / controler / plata
  2. Creați un fișier PHP și denumiți-l bitpay.php
  3. Deschideți fișierul din IDE preferat și scrieți o clasă a acestui modul folosind convenția de numire a clasei OpenCart, de exemplu: clasa ControllerPaymentBitpay extinde Controller
  4. În interiorul clasei, creați OpenCart implicit index funcţie.
  5. În interiorul index() funcția, scrieți codul de mai jos.

1.1 Încărcarea limbilor și a valorilor parsământului

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'); 

1.2. Șablon și redare

Pentru a seta destinația șablonului:

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

Pentru a face șablonul: $ This-> render ();

2. O funcție de solicitare API

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ă:

2.1 Încărcarea bibliotecilor / claselor necesare în controler

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

2.2 Obținerea detaliilor comenzii și formatarea

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);

2.3 Interacțiunea cu API

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 

2.4 Manipularea erorilor

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"].

3. Funcția Callback

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:

  1. Creați o funcție publică suna inapoi()
  2. În interiorul funcției, includeți biblioteca: DIR_APPLICATION. "... /bitpay/bp_lib.php";.
  3. Obțineți cheia Array răspuns API utilizând următorul cod:
    $ apiKey = $ acest-> config-> get ('bitpay_api_key');
    $ răspuns = bpVerifyNotificare ($ apiKey); 
  4. Verificați pentru un răspuns. Dacă răspunsul este un șir, trebuie să existe o eroare: 
    dacă (is_string ($ răspuns))

    // Afișați codul de eroare de răspuns aici            
     
  5. Iar în declarația else, trebuie să confirmați comanda utilizând codul de mai jos.
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ă; 

Privelistea

Viziunea pe care am creat-o este destul de simplă, doar un singur buton cu o solicitare Ajax către API:

  

Concluzie

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.