Integrere Bitcoin Betaling Gateway Into OpenCart Del 2

I den forrige opplæringen begynte vi å implementere et Bitcoin betalingssystem. Spesielt introduserte vi et dashbord for å gjøre det mulig for brukerne å administrere plugin. I denne veiledningen vil vi fortsette å jobbe med pluginet ved å bygge butikkfronten.

1. Kontrolleren

  1. Navigere til katalog / styreenhet / betaling
  2. Opprett en PHP-fil og navnet på den bitpay.php
  3. Åpne filen i din favoritt IDE og skriv en klasse av denne modulen ved hjelp av OpenCart-klassenavnekonvensjonen, for eksempel: klassen ControllerPaymentBitpay utvider kontrolleren
  4. Inne i klassen, lag standard OpenCart index funksjon.
  5. Inne i indeks () funksjon, skriv koden som under.

1.1 Laste inn språk og tolkning verdier

Den første linjen i følgende kode laster språket sitt inn i kontrolleren, og de neste linjene analyserer koblinger og språktekster for visningsbruken.

$ Dette-> Språk> load ( 'betaling / bitpay'); $ this-> data ['button_bitpay_confirm'] = $ this-> language-> get ('text_button_confirm'); $ this-> data ['continue'] = $ this-> url-> link ('kassa / suksess'); 

1.2. Mal og gjengivelse

Slik angir du maledestinasjonen:

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

Slik lager du mal: $ Dette-> render ();

2. En API-forespørselsfunksjon

Frem til dette punktet har vi kun skrevet kode som omhandler modulens innstillinger og layout. Her skal vi fokusere spesielt på å kommunisere med API. I denne forbindelse vil vi skape en annen funksjon inne i vår kontroller som er ansvarlig for kommunikasjon med BitPay API.

Så vi skal skape en offentlig funksjon send () for å oppnå vårt mål, og rett innenfor denne funksjonen er koden forklart linje for linje som nedenfor:

2.1 Laster nødvendige biblioteker / klasser inn i kontrolleren

Vi har to nødvendige biblioteker / klasser som skal lastes inn i vår kontroller, dvs. BitPay Library API og Order Model:

inkludere DIR_APPLICATION. '... /bitpay/bp_lib.php'; $ Dette-> last> modell ( 'checkout / ordre'); 

(Siden BitPay-biblioteket ikke er et OpenCart-basert bibliotek, inkluderte vi direkte sine funksjoner i vår kontroller som vist i første linje ovenfor.)

2.2 Få bestillingsdetaljer og formatering

For å få fullstendig Bestillingsdetaljer kan vi bruke dette:

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

 De tildelte variablene får alle nødvendige detaljer i form av en matrise.

Og for å formatere ordren som standard valgt valuta, bruker vi:

$ price = $ this-> currency-> format ($ rekkefølge ['total'], $ rekkefølge ['currency_code'], $ rekkefølge ['currency_value'], falsk);

2.3 Interagere med API

Følgende kode er ansvarlig for samhandling med API og analyse av de nødvendige dataene til API-funksjonen.

$ posData = $ rekkefølge ['order_id']; // Ordreinformasjon som skal legges inn i API $ options = array ('apiKey' => $ this-> config-> get ('bitpay_api_key'), // API-nøkkel hentet fra databasen 'notificationURL' => $ this-> url-> link ('betaling / bitpay / tilbakeringing'), // tilbakekallingsadressen for API 'redirectURL' => $ this-> url-> link ('konto / ordre / info & order_id ='. $ rekkefølge ['order_id'] ), // Ordreinformasjon URL 'valuta' => $ rekkefølge ['currency_code'], // Bestilt valuta kode 'transactionSpeed' => $ this-> config-> get ('bitpay_transaction_speed'), // Transaksjonshastighet API-dokumentasjonen for detaljer) 'testMode' => $ this-> config-> get ('bitpay_test_mode') // Sett testmodus aktivert eller deaktivert); $ respons = bpCreateInvoice ($ rekkefølge ['order_id'], $ pris, $ posData, $ alternativer); // Parse informasjonen til API 

2.4 Feilhåndtering

For noen ugyldige handlinger kaster API-en en feil tilbake til brukeren. Så kaster følgende kode et svar i JSON-format til oss:

hvis (array_key_exists ('error', $ response) echo "\" error \ ": \" Feil: Problem kommuniserer med betalingsleverandøren. \\ nVennligst prøv igjen senere. \ ""; else echo "\ "url \": \ "". $ respons ["url"]. "\" ";

3. Tilbakeringingsfunksjon

Det bør være klart fra navnet at dette ville være API tilbakeringingsfunksjonen. Den returnerer nødvendig betalingsinformasjon og kaster den til brukeren. Følg trinnene nedenfor:

  1. Lag en offentlig funksjon Ring tilbake()
  2. Inne i funksjonen, inkluderer biblioteket: DIR_APPLICATION. '... /bitpay/bp_lib.php';.
  3. Få API Response Array Key ved hjelp av følgende kode:
    $ apiKey = $ this-> config-> get ('bitpay_api_key');
    $ response = bpVerifyNotification ($ apiKey); 
  4. Sjekk etter svar. Hvis svaret er en streng, må det være en feil: 
    hvis (is_string ($ respons))

    // Vis svarfeilskoden her            
     
  5. Og i den andre setningen må vi bekrefte bestillingen ved å bruke koden som er vist nedenfor.
bytte ($ respons ['status']) // Hvis ordren er vellykket og fullstendig tilfelle 'bekreftet': sak 'fullstendig': $ this-> load-> model ('checkout / order'); // Laster bestillingsmodellen $ order_id = $ respons ['posData']; // Få bestillings-ID fra svaret $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Få bestillingsdetaljer $ this-> model_checkout_order-> bekreft ($ order_id, $ this-> config-> get ('bitpay_confirmed_status_id')); // Bekreft bestillingsstatus som fullstendig pause; saken 'ugyldig': // Hvis bestillingen er ugyldig på grunn av noen problemer $ this-> load-> model ('checkout / order'); // laster bestillingsmodellen $ order_id = $ respons ['posData']; // Få bestillings-ID fra svaret $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Få bestillingsdetaljer $ this-> model_checkout_order-> bekreft ($ order_id, $ this-> config-> get ('bitpay_invalid_status_id')); // Bekreft bestillingsstatus som ugyldig pause; 

Visningen

Visningen vi opprettet er ganske enkel, bare en knapp med en Ajax-forespørsel til API:

  

Konklusjon

Denne serien tjener som en introduksjon til å bygge mer avanserte OpenCart-moduler. Herfra bør du kunne følge OpenCart-dokumentasjonen for å fortsette å bygge ut dette pluginet (og til og med noen av dine egne).

Vennligst legg inn alle spørsmål, kommentarer og tilbakemelding i skjemaet under.