Intégration de Bitcoin Payment Gateway dans OpenCart Part 2

Dans le tutoriel précédent, nous avons commencé à mettre en place un système de paiement Bitcoin. Plus précisément, nous avons introduit un tableau de bord pour permettre à nos utilisateurs d’administrer le plug-in. Dans ce tutoriel, nous allons continuer à travailler sur le plugin en construisant le front-end du magasin..

1. Le contrôleur

  1. Aller vers catalogue / contrôleur / paiement
  2. Créez un fichier PHP et nommez-le bitpay.php
  3. Ouvrez le fichier dans votre IDE favori et écrivez une classe de ce module en utilisant la convention de dénomination de classe OpenCart, par exemple: la classe ControllerPaymentBitpay étend Controller
  4. Dans la classe, créez le OpenCart par défaut indice une fonction.
  5. À l'intérieur de indice() fonction, écrivez le code comme ci-dessous.

1.1 Chargement des langues et des valeurs d'analyse

La première ligne du code suivant charge sa langue dans le contrôleur et les lignes suivantes analysent les liens et les textes de langue pour l'utilisation de la vue..

$ this-> language-> load ('paiement / bitpay'); $ this-> data ['button_bitpay_confirm'] = $ this-> language-> get ('text_button_confirm'); $ this-> data ['continue'] = $ this-> url-> link ('checkout / success'); 

1.2. Modèle et rendu

Pour définir la destination du modèle:

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

Pour rendre le modèle: $ this-> render ();

2. Une fonction de requête d'API

Jusqu'à présent, nous n'avons écrit que du code qui traite spécifiquement des paramètres du module et de sa présentation. Ici, nous allons nous concentrer spécifiquement sur la communication avec l’API. À cet égard, nous allons créer une autre fonction dans notre contrôleur, chargée de la communication avec l'API BitPay..

Nous allons donc créer un fonction publique send () pour atteindre notre objectif, et directement dans cette fonction, le code est expliqué ligne par ligne comme ci-dessous:

2.1 Chargement des bibliothèques / classes requises dans le contrôleur

Nous avons deux bibliothèques / classes requises à charger dans notre contrôleur, à savoir l'API de bibliothèque BitPay et le modèle de commande:

include DIR_APPLICATION. '… /bitpay/bp_lib.php'; $ this-> load-> model ('commande / commande'); 

(La bibliothèque BitPay n'étant pas une bibliothèque OpenCart, nous avons directement inclus ses fonctions dans notre contrôleur, comme indiqué à la première ligne ci-dessus.)

2.2 Obtenir les détails de la commande et le formatage

Pour obtenir les détails complets de la commande, nous pouvons utiliser ceci:

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

 Les variables assignées obtiennent tous les détails nécessaires sous la forme d'un tableau.

Et pour formater la devise sélectionnée par défaut pour l'ordre, nous utilisons:

$ price = $ this-> devise-> format ($ order ['total'], $ order ['code_monnaie'], $ order ['valeur_monnaie'], false);

2.3 Interaction avec l'API

Le code suivant permet d'interagir avec l'API et d'analyser les données requises dans la fonction API..

$ posData = $ order ['order_id']; // Informations de commande à publier dans l'API $ options = array ('apiKey' => $ this-> config-> get ('bitpay_api_key'), // clé d'API extraite de la base de données 'notificationURL' => $ this-> url-> link ('payment / bitpay / callback'), // L'URL de rappel de l'API 'redirectURL' => $ this-> url-> link ('account / order / info & order_id ='. $ order ['order_id'] ), // Informations sur la commande URL 'currency' => $ order ['code_monnaie'], // Code de la devise commandée 'transactionSpeed' => $ this-> config-> get ('bitpay_transaction_speed'), // vitesse de transaction la documentation de l'API pour plus de détails) 'testMode' => $ this-> config-> get ('bitpay_test_mode') // Définit le mode test activé ou désactivé); $ response = bpCreateInvoice ($ order ['order_id'], $ price, $ posData, $ options); // Analyse les informations dans l'API 

2.4 Traitement des erreurs

Pour certaines actions non valides, l'API renvoie une erreur à l'utilisateur. Le code suivant renvoie donc une réponse au format JSON:

if (array_key_exists ('error', $ response)) echo "\" error \ ": \" Erreur: Problème de communication avec le fournisseur de paiement. \\ nVeuillez réessayer plus tard. \ ""; Echho "\ "url \": \ "". $ response ["url"]. "\" ";

3. Fonction de rappel

Son nom doit clairement indiquer qu'il s'agira de la fonction de rappel de l'API. Il renvoie les informations de paiement nécessaires et les envoie à l'utilisateur. Suivez les étapes ci-dessous:

  1. Créer une fonction publique rappeler()
  2. Dans la fonction, incluez la bibliothèque: DIR_APPLICATION. '… /Bitpay/bp_lib.php';.
  3. Obtenez la clé de tableau de réponses API à l'aide du code suivant:
    $ apiKey = $ this-> config-> get ('bitpay_api_key');
    $ response = bpVerifyNotification ($ apiKey); 
  4. Recherchez une réponse. Si la réponse est une chaîne, il doit y avoir une erreur: 
    if (is_string ($ response))

    // Affiche le code d'erreur de réponse ici            
     
  5. Et à l'intérieur de l'instruction else, nous devons confirmer la commande en utilisant le code ci-dessous..
switch ($ response ['status'])) // Si la commande est réussie et complète le cas 'confirmé': le cas 'complete': $ this-> load-> model ('checkout / order'); // Chargement du modèle de commande $ order_id = $ response ['posData']; // Obtention de l'ID de commande à partir de la réponse $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Obtenir les détails de la commande $ this-> model_checkout_order-> confirm ($ order_id, $ this-> config-> get ('bitpay_confirmed_status_id')); // Confirmer le statut de la commande en tant que pause complète; case 'invalid': // Si la commande est invalide en raison de certains problèmes $ this-> load-> model ('checkout / order'); // chargement du modèle de commande $ order_id = $ response ['posData']; // Obtention de l'ID de commande à partir de la réponse $ order = $ this-> model_checkout_order-> getOrder ($ order_id); // Obtenir les détails de la commande $ this-> model_checkout_order-> confirm ($ order_id, $ this-> config-> get ('bitpay_invalid_status_id')); // Confirmer le statut de la commande en tant que pause invalide; 

La vue

La vue que nous avons créée est assez simple, juste un bouton avec une requête Ajax à l’API:

  

Conclusion

Cette série est une introduction à la construction de modules OpenCart plus avancés. À partir de là, vous devriez pouvoir suivre la documentation OpenCart afin de continuer à construire ce plugin (et même certains de vos propres).

S'il vous plaît laissez toutes les questions, commentaires et commentaires dans le formulaire ci-dessous.