/class.xmodmonetique.inc
PHP | 1856 lines | 1015 code | 81 blank | 760 comment | 172 complexity | 36d94239298c177e1cd74d1b9f9ffabd MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
Large files files are truncated, but you can click here to view the full file
- <?php
- /**
- * \file class.xmodmonetique.inc
- * \name XModMonetique
- * \author Vladimir Monari
- * \version 1.0
- * \date 1 Septembre 2013
- */
- /**
- * \brief Classe MTransaction.
- * Classe représentant une transaction.
- * \version 1.0
- * \note
- * - Pour Paybox et Atos une transaction en état WAITTING signifie que le serveur n'était pas disponible lors de l'appel.
- * - Pour SystemPay une transaction en état WAITTING signifie que le status en banque de la transaction ne permet pas cette action pour le moment. Elle devra donc être rejouée. Exemple:
- * - Un remboursement ne peut être éfféctué que si la transaction à été remisé. Si le remboursement est intégral, on peut annuler la transaction, sinon il faudra attendre.
- */
- /*************************************************************************
- * TEST MULTI WEB_PAYMENT :
- * - $order->options['nbDeadLine'] = 3;
- * - $order->options['frequencyDuplicate'] = 31;
- * - $order->options['captureDay'] = 10; ///< Spécifique à paybox (numéro du jour de prélèvement dans le mois)
- * - $order->options['captureDelay'] = 10;
- * - $order->options['noCapture'] = true; ///< Demande d'autorisation uniquement
- *
- * TEST D'ENROLLEMENT :
- * - $order->options['enrollement']= true;
- * - $order->options['refAbonnement'] = 'Atos Refus';
- ***************************************************************************/
- class MTransaction{
- public $oid = null; ///< Identifiant de la transaction.
- public $orderOid = null; ///< Identifiant oid de la commande.
- public $orderReference = null; ///< Référence de la commande.
- public $customerOid = null; ///< Identifiant oid du client.
- public $customerEmail = null; ///< Email du client.
- public $dateCreated = null; ///< Date de création de la transaction.
- public $responseCode = null; ///< Code reponse de la banque.
- public $amount = null; ///< Float $amount : Montant de la transaction en euros.
- /**
- * \brief Status de la transaction.
- * \details Peut-être valorisé à :
- * - XModMonetique::RUNNING.
- * - XModMonetique::WAITTING.
- * - XModMonetique::SUCCESS.
- * - XModMonetique::ERROR.
- * - XModMonetique::INVALID.
- */
- public $status = null;
- /**
- * \brief Type de la transaction.
- * \details Peut-être valorisé à :
- * - XModMonetique::DUPLICATE.
- * - XModMonetique::WEB_PAYMENT.
- * - XModMonetique::REFUND.
- */
- public $type = null;
- public $dateTimeOut = null; ///< Date et heure d'envoi en banque des paramètres de la transaction.
- public $dateTimeIn = null; ///< Date et heure du retour banque de la transaction.
- public $transOri = null; ///< Lien vers la transaction d'origine (oid de la transaction d'origine).
- public $shopMoid = null; ///< Identifiant du module de la boutique.
- public $shopClass = null;///< Classe de la boutique.
- public $shopName = null;///< Nom de la boutique.
- /**
- * \brief Mode de la notification boutique.
- * \details Peut-être valorisé à :
- * - \link XModMonetique::ASYNC_RESPONSE \endlink
- * - \link XModMonetique::SYNC_RESPONSE \endlink
- * - \link XModMonetique::RESPONSE_NONE \endlink
- */
- public $autoResponseMode = null;
- public $shopCallBack = null; ///< Fonction de la boutique permettant le traitement de la réponse.
- public $statusComplement = null; ///< Complément de statut de la transaction. Donne des informations complémentaire sur l'état de la transaction.
- public $callParms = null; ///< Paramètres bruts transmis lors de l'appel en banque.
- public $responseParms = null; ///< Réponse brute retournée par la banque.
- public $refAbonneBoutique = null; ///< Référence d'abonné attribué à un client lors d'une commande définissant un enrollement.
- public $monetiqueMoid = null; ///< Identifiant du module de gestion des transaction utilisé pour celle-ci.
- public $nbReturn = null; ///< Nombre de retour banque (Utile à Paybox uniquement, maximum 3 trois retour pour un paiement web).
- /**
- * \brief Statut de la notification boutique.
- * \details Peut-être valorisé à :
- * - XModMonetique::RESPONSE_STATUS_SENT \endlink
- * - XModMonetique::RESPONSE_STATUS_TO_SEND \endlink
- * - XModMonetique::RESPONSE_STATUS_NOT_TO_SEND \endlink
- */
- public $responseStatus = null;
- public $transId = null; ///< Identifiant en bancaire de la transaction.
- public $modeTest = True; ///< Mode test par defaut.
- public $captureDelay = '0'; ///< Capture immédiate par défaut.
- /**
- *\brief Capture par défaut, sinon simple demande d'autorisation.
- * \details Peut-être valorisé à :
- * - \link XModMonetique::AUTHORIZATION_ONLY \endlink
- * - \link XModMonetique::CATCH_PAYMENT \endlink
- */
- public $captureMode = null;
- public $frequencyDuplicate = null; ///< Capture immédiate par défaut.
- public $enrollement = False; ///< Pas d'enrollement par défaut
- public $nbDeadLine = 1; ///< Nombre d'échéances par défaut
- }
- /**
- * \brief Classe MOrderInfos.
- * Classe représentant une commande.
- * \version 1.0
- */
- class MOrderInfos{
- public $oid = null; ///< Identifiant oid de la commande.
- public $reference = null; ///< Référence de la commande.
- public $amount = null; ///< Montant de la commande.
- /**
- * \brief Contient les options éventuelles de la commande.
- * \details Doit être valorisé à :
- * - Pour un enrollement :
- * - $order->options['enrollement']= true;
- * - $order->options['refAbonnement'] = '<Référence de l'abonné>';
- * - Pour un paiement multiple :
- * - $order->options['nbDeadLine'] = 3;
- * - Facultatif:
- * - $order->options['frequencyDuplicate'] = 31; Fréquence de prélevement en jours. Par défaut 30.
- * - $order->options['captureDay'] = 10; Spécifique à paybox : Numéro du jour de prelevement dans le mois. Par défaut le 1.
- * - Pour modifier le délai de la capture :
- * - $order->options['captureDelay'] = 10; Délais de capture réelle de la transaction en jours. Par défaut 0.
- * - Pour une demande d'autorisation seule :
- * - $order->options['noCapture'] = true; ///< Demande d'autorisation uniquement
- */
- public $options = array();
- public $cardsType = array();
- }
- /**
- * \brief Classe MCustomerInfos.
- * Classe représentant un client.
- * \version 1.0
- */
- class MCustomerInfos{
- public $oid = null; ///< Identifiant oid du client.
- public $email = null; ///< Email du client.
- }
- /**
- * \brief Classe MShopInfos.
- * Classe contenant les paramètres de la boutique.
- * \version 1.0
- */
- class MShopInfos{
- public $moid = null; ///< Identifiant du module de la boutique.
- public $class = null;///< Classe de la boutique.
- public $name = null;///< Nom de la boutique.
- public $autoResponseMode = null;///< Mode de reponse.
- public $autoResponseCallBack = null;///< Fonction de la boutique permettant le traitement de la réponse.
- public $cardsType =null; ///< Tableau des cartes voulue par la boutique
- }
- /**
- * \brief Classe abstraite, base des modules "monetique/VAD".
- * \details Cette classe permet d'unifier les appels et retours des différents modules de paiements en ligne (ATOS/SIPS, SystemPay et Paybox).
- */
- abstract class XModMonetique extends XModtable{
- // Options communes à tout (ou presque) les modules de paiements
- const CATCH_PAYMENT = 'capture';
- const AUTHORIZATION_ONLY = 'autorisation';
- // Constantes correspondant au type de transaction.
- const DUPLICATE = 'subscdebit'; ///< Prelèvement 'manuel' sur un abonné / enrollé.
- const WEB_PAYMENT = 'webpayment'; ///< Paiement de base par internet.
- const REFUND = 'refund'; ///< Remboursement.
-
- // Constantes pour la gestion du retour vers la boutique.
- const ASYNC_RESPONSE = 'async'; ///< Notifier la boutique en arrière plan.
- const SYNC_RESPONSE = 'sync'; ///< Notifier la boutique dès le retour.
- const RESPONSE_NONE = 'none'; ///< Ne pas notifier la boutique.
- // Status de notification de la réponse vers la boutique.
- const RESPONSE_STATUS_SENT = 'sent'; ///< Boutique notifiée.
- const RESPONSE_STATUS_TO_SEND = 'tosend'; ///< Boutique à notifier.
- const RESPONSE_STATUS_NOT_TO_SEND = 'nottosend'; ///< Boutique à notifier.
- // Constantes correspondant à l'état d'une transaction
- const RUNNING = 'running'; ///< En cours de traitement (on attend le retour banque, qui ne viendra peut être jamais, si le client n'arrive pas au bout de la transaction).
- const WAITTING = 'waitting'; ///< Opération en attente (Soit le serveur ATOS n'est pas disponible, soit il faut attendre que la transaction est un status permettant l'opération en attente pour SystemPay.
- const SUCCESS = 'success'; ///< Opération réalisée avec succés, que ce soit un paiement web, un remboursement ou une duplication.
- const ERROR = 'error'; ///< Opération échoué, motifs exacte dans compelement de status (statusComplement) \link MTransaction::$statusComplement \endlink
- const INVALID = 'invalid'; ///< Correspond à une erreur de vérification de signature.
-
- /**
- * \brief Type de carte géré par le module XmodMonetique.
- * \details Ce tableau est utilisable UNIQUEMENT avec SystemPay. Les autres modules de gestion, ne permette de préciser qu'un seul type de carte.
- * Pour utiliser ce tableau, il faut que la boutique est le même tableau avec les cartes qu'elle autorise à 'true'.
- */
- public $cardsType = array(
- 'AMEX' => false,
- 'AURORE' => false,
- 'BUYSTER' => false,
- 'CB' => false,
- 'COFINOGA' => false,
- 'MASTERCARD' => false,
- 'JCB' => false,
- 'VISA' => false,
- 'FINAREF' => false,
- 'FNAC' => false,
- 'CYRILLUS' => false,
- 'PRINTEMPS' => false,
- 'KANGOUROU' => false,
- 'SURCOUF' => false,
- 'POCKETCARD' => false,
- 'CONFORAMA' => false,
- 'NUITEA' => false,
- 'PASS' => false,
- 'PASS2' => false,
- 'PASS3FOIS' => false,
- 'CBPASS' => false,
- 'PEUGEOT' => false,
- 'ACCORD' => false,
- 'FRANFINANCE' => false,
- '1EUROCOM' => false,
- '4ETOILES' => false,
- 'COFIDIS_3X' => false,
- 'PROFILPLUS' => false,
- 'LIBRAVOU' => false,
- 'DINERS' => false,
- 'SOLO' => false,
- 'SWITCH' => false,
- 'DELTA' => false,
- 'BANCONTACTMISTERCASH' => false,
- 'VISA_ELECTRON' => false,
- 'COF3XCB' => false,
- 'COF3XCB_SB' => false,
- 'MAESTRO' => false,
- 'E-CARTEBLEUE' => false,
- 'ONEY' => false,
- 'ONEY_SANDBOX' => false,
- 'PAYPAL' => false,
- 'PAYPAL_SB' => false,
- 'PAYSAFECARD' => false,
- 'SOFINCO' => false,
- 'AVANTAGES' => false,
- 'CDGP' => false,
- 'RIVE GAUCHE' => false,
- 'WEXPAY' => false,
- 'KADEOS' => false,
- 'SVS' => false,
- 'LASER' => false,
- 'KWIXO' => false,
- 'LEETCHI' => false,
- 'MAXICHEQUE' => false,
- 'PAYBUTTON ING' => false,
- 'iDEAL' => false
- );
- // Constante définissants le mode de capture
- public $siteId = null; ///< Identifiant du site marchand.
- public $urlPayed = null; ///< Url de redirection du client pour un paiement accepté.
- public $urlCancelled = null; ///< Url de redirection du client en cas d'annulation.
- public $urlRefused = null; ///< Url de redirection du client en cas d'erreur.
- public $urlAutoResponse = null; ///< Url de retour automatique serveur.
- public $lang = "fr"; ///< Langue par defaut.
- public $defaultForeignLang = "en"; ///< Langue par defaut si pas de traduction disponible.
- public $defaultCurrencyCode = "978"; ///< La devise par défaut en l'euro.
- protected $defaultTemplate = null; ///< Template par defaut.
-
- /// Constructeur standard d'un module console.
- function __construct($ar=NULL){
- parent::__construct($ar);
- }
- /* Fonctions de paiements boutique */
- /**
- * \brief Méthode de génération des données de paiement.
- * Cette fonction permet de générer les données d'un paiement et l'insert dans la table TRANSACMONETIQUE.
- * \param MOrderInfos $order : Objet des données issues de la commande.
- * \param MCustomerInfos $customer : Objet des données issues du client.
- * \param MShopInfos $shop : Objet comportant les paramètres de la boutique.
- * \note
- * - Gestion du paiement à multiple écheances. \link MOrderInfos::$options \endlink
- * - Mémorise le nombre de retour banque (Spécifique à Paybox, maximum 3).
- * - Gestion de l'enrollement. \link insertAbonne($donnees) \endlink, \link MOrderInfos::$options \endlink
- * \exception:
- * - Error : \link webPaymentHandling(MOrderInfos $order, MCustomerInfos $customer, MShopInfos $shop, $transactionOid) \endlink.
- * \return array :
- * - String ok/ko.
- * - Array $formulaireAppel : Contient le formulaire envoyé en banque
- * - String $template : Le template correspondant correspondant un module de traitement
- * - String $tplentry : L'entrée smarty du template.
- * - Sring $transaction->oid : L'oid de la transaction \link MTransaction::$oid \endlink
- * \note
- * - Vérifie que toutes les infos nécésaires sont bien présentes
- * - Paramètres la transaction, l'insère en base et récupère son oid.
- * - Délègue au module approprié la création du formaulaire.
- * - Mémorise les données brutes d'appel et le status.
- */
- public function paymentCall(MOrderInfos $order, MCustomerInfos $customer, MShopInfos $shop){
- // Vérifie que toutes les infos nécésaires sont bien présentes.
- $this->checkPaymentData($order, $customer, $shop);
- $transaction = new MTransaction();
- if(isset($shop->cardsType)){
- $transaction->cardsType = $shop->cardsType;
- }
- // Définition des paramètres de la transaction
- if($this->testMode(true)){
- $transaction->testMode = True;
- }else{
- $transaction->testMode = False;
- }
- $transaction->status = self::RUNNING;
- $transaction->type = self::WEB_PAYMENT;
- /* Vérification des paramètres de la commande */
- $transaction->orderOid = $order->oid;
- $transaction->orderReference = $order->reference;
- $transaction->amount = $order->amount;
- // Préparation des paiement à multiples échéances
- if (isset($order->options['nbDeadLine']) && $order->options['nbDeadLine']>1) {
- $transaction->nbDeadLine = $order->options['nbDeadLine'];
- // Définition de la fréquence de prélèvement en jours
- if(empty($order->options['frequencyDuplicate'])){
- $transaction->frequencyDuplicate = '30';
- }else{
- $transaction->frequencyDuplicate = $order->options['frequencyDuplicate'];
- }
- // Par défaut le jour de prélèvement est la date courante
- if(!empty($order->options['captureDay'])){
- $transaction->captureDay = $order->options['captureDay'];
- }
- else{
- $transaction->captureDay = date('d');
- }
- } else {
- // Paiement à une seule échéances par défaut
- $transaction->nbDeadLine = '1';
- }
- // Si la commande indique que la capture doit être différé
- if(isset($order->options['captureDelay'])){
- $transaction->captureDelay = $order->options['captureDelay'];
- }else{
- $transaction->captureDelay = '0';
- }
- // Gestion du mode de capture (Capture par défaut, sinon autorisation seulement)
- if( $order->options['noCapture'] == true){
- $transaction->captureMode = self::AUTHORIZATION_ONLY;
- }
- else{
- $transaction->captureMode = self::CATCH_PAYMENT;
- }
- // Vérification de l'option enrollement
- if (isset($order->options['refAbonnement']) && $order->options['enrollement'] == true) {
- $transaction->enrollement = true;
- $transaction->refAbonneBoutique = $order->options['refAbonnement'];
- }
- $transaction->customerOid = $customer->oid;
- if(isset($customer->email)){
- $transaction->customerEmail = $customer->email;
- }
- if(isset($shop->class)){
- $transaction->shopClass = $shop->class;
- }
- // Paramètres de traitement de la réponse.
- $transaction->autoResponseMode = $shop->autoResponseMode;
- $transaction->shopCallBack = $shop->autoResponseCallBack;
- $transaction->shopName = $shop->name;
- $transaction->shopMoid = $shop->moid;
- $transaction->dateCreated = date('Y-m-d H:i:s');
- // champs plus spécifiques (pas communs à strictement toutes les vads)
- if (isset($order->options['specificsfields'])){
- if (isset($order->options['specificsfields']['transId'])){
- $transaction->transId = $order->options['specificsfields']['transId'];
- }
- }
- // Créer la transaction en base et récupère son oid pour les paramètres d'appel.
- $transaction->oid = $this->insertWebPayment($transaction);
- // Tentative de crétion du formulaire.
- try{
- // Appel au module concerné
- list($transaction, $formulaireAppel, $template, $tplentry) = $this->webPaymentHandling($transaction);
- $returnValue = array('ok', $formulaireAppel, $template, $tplentry, $transaction->oid);
- } catch(Exception $e){
- $transaction->status = self::ERROR;
- $transaction->statusComplement = $e->getMessage().' '.$e->getCode();
- XLogs::critical(get_class($this).' ::paymentCall ',XLabels::getSysLabel('xmodmonetique','exceptionPaymentCall').$transaction->statusComplement);
-
- $transactionParams = (array) $transaction;
- $transactionParams['_options'] = array('local'=>1);
- $transactionParams['options'] = array('callParms'=>array('raw'=>true,'toxml'=>true));
- $this->xset->procEdit($transactionParams);
- throw new Exception(get_class($this).' ::paymentCall : '.$transaction->statusComplement);
- }
- // Mémorisation de la date d'émission
- $transaction->dateTimeOut = date('Y-m-d H:i:s');
- // Gestion de l'enrollement.
- if (isset($order->options['refAbonnement']) && $order->options['enrollement'] == true) {
- $transaction->refAbonnement = $order->options['refAbonnement'];
- $this->insertAbonne($transaction);
- }
- // Enregistrement des paramètres d'appel
- $transactionParams = (array) $transaction;
- $transactionParams['_options'] = array('local'=>1);
- $transactionParams['options'] = array('callParms'=>array('raw'=>true,'toxml'=>true));
- $this->xset->procEdit($transactionParams);
- return $returnValue;
- }
- /**
- * \brief Fonction de traitement du retour banque automatique.
- * Cette fonction permet de faire le traitement du retour banque en passant par le module approprié.
- * \exception:
- * - Transaction introuvable.
- * - Montant d'appel et de réponse incohérents.
- * - Nombre de retour Paybox supérieur à 3.
- * - Trop grand nombre de retour pour une transaction.
- * \todo
- * - Exception si une transaction d'un module différent de paybox possède un statut différent de running. Ce cas se présente quand :
- * - Une réponse à déjà été reçue.
- * \return boolean : True (Pour un succès) ou False ( Error : \link webPaymentUnFoldReponse() \endlink )
- * \note
- * - Traite la réponse avec le module approprié. \link webPaymentUnFoldReponse() \endlink.
- * - Si l'oid de la transaction est introuvable, elle crée une nouvelle transaction pour mémoriser le paramètres reçus et lève une exception.
- * - Récupère les informations de la transaction d'origine. \link getTransaction($transactionOid) \endlink
- * - Lève une exception si une transaction d'un module différent de paybox possède un statut différent de running.
- * - Lève une exception si il y a une incohérence du montant, entre les paramètres d'appel et de réponse du serveur bancaire.
- * - Mémorise le retour.
- * - Gestion de l'enrollement. \link editAbonne($transaction) \endlink.
- * - Recupère tous les champs de la transaction non renseigné dans la reponse.
- * - Si la signature est vérifié, gestion de la notification boutique.
- * \todo Voir l'équivalent de instanceof pour voir si une classe appartient à une classe mère (pour Paybox).
- */
- public function autoresponse() {
- // Tentative de traitement de la réponse par le module approprié
- try{
- $transaction = $this->webPaymentUnFoldReponse();
- $ret = array(true, $transaction->oid);
- }catch(Exception $e){
- // Erreur de traitement de la réponse
- $transaction->status = self::ERROR;
- $transaction->statusComplement = 'Message : '.$e->getMessage().' Code : '.$e->getCode();
- $transactionParams = (array) $transaction;
- $transactionParams['_options'] = array('local'=>1);
- $transactionParams['options'] = array('callParms'=>array('raw'=>true,'toxml'=>true));
- $this->xset->procEdit($transactionParams);
- XLogs::critical(get_class($this).' ::autoresponse ' , $transaction->statusComplement);
- return false;
- }
- XLogs::critical(get_class($this).' ::autoresponse ', print_r($transaction, true));
- // Vérification de la réponse de la banque
- if($transaction->responseCode == '00'){
- $transaction->status = self::SUCCESS;
- }
- else{
- $transaction->status = self::ERROR;
- }
- // Si l'oid de la transaction n'a pas été trouvé par le module approprié, on crée une nouvelle transaction pour mémoriser le paramètres reçus.
- if ($transaction->oid == null){
- $transaction->statusComplement .= XLabels::getSysLabel('xmodmonetique','exceptionUnknowTransaction');
- $paramToMemorize = (array) $transaction;
- $paramToMemorize['options'] = array('responseParms'=>array('raw'=>true,'toxml'=>true));
- $r = $this->xset->procInput( (array) $paramToMemorize);
- XLogs::critical(get_class($this).' ::autoresponse '. XLabels::getSysLabel('xmodmonetique','exceptionUnknowTransaction'), print_r($transaction, true));
- // En cas de problème d'insertion de cette réponse, on log les paramètres reçus
- if (empty($r)) {
- XLogs::critical(get_class($this).' ::autoresponse : Problème d\'insertion de la transaction : ', print_r($transaction, true));
- }
- throw new Exception(get_class($this).' ::autoresponse :'.XLabels::getSysLabel('xmodmonetique','exceptionUnknowTransaction'));
- }
- // Si la transaction à été trouvée, on récupère les informations de la transaction d'origine
- $paramsOri = $this->getTransaction($transaction->oid);
- // Incrémentation du nombre de retour (3 maximum pour un paiement Web)
- if(empty($paramsOri->nbReturn)){
- $transaction->nbReturn = 1; ///< Premier retour
- }else{
- $transaction->nbReturn++; ///< Retours suivants
- }
- // Si le nombres de retour Paybox est supérieur à 3 on lève une exception
- if ( (($transaction->nbReturn > 3) && ($transaction->nbDeadLine == 1) || ($transaction->nbReturn > $transaction->nbDeadLine+2 ) ) && ((get_class($this)=='XModPaybox') || ($this instanceof XModPaybox == 1)) ){
- XLogs::update('update', $transaction->oid, $this->array2html($transaction->responseParms, true));
- XLogs::critical(get_class($this)."::autoresponse ".XLabels::getSysLabel('xmodmonetique','overmuchResponse'), print_r($transaction, true));
- throw new Exception(get_class($this).' ::autoresponse '.XLabels::getSysLabel('xmodmonetique','overmuchResponse').$transaction->oid);
- }
- // Si une transaction d'un module différent de paybox possède un statut différent de running (C'est qu'une réponse à déjà été reçu, ou qu'elle comportait une erreur de paramètre), donc on lève une execption
- if ( ( ($paramsOri->status != self::RUNNING) && ($paramsOri->nbDeadLine < $transaction->nbReturn)) && ((get_class($this)!='XModPaybox') && ($this instanceof XModPaybox != 1)) ) {
- $transaction->autoResponseMode = self::RESPONSE_NONE;
- $transaction->statusComplement = 'Erreur, trop de retour pour cette transaction on déjà été traité : '.$transaction->status.'/'.$transaction->statusComplement;
- // on garde la "reponse" dans les log de la transaction
- XLogs::update('update', $transaction->oid, print_r($transaction->responseParms, true));
- XLogs::critical(get_class($this).' ::autoresponse '.$transaction->statusComplement, print_r($transaction, true));
- throw new Exception('::autoresponse '.$transaction->statusComplement);
- }
- XLogs::critical(get_class($this).' ::autoresponse->transaction(initialiser par unfold) ', print_r($transaction, true));
- XLogs::critical(get_class($this).' ::autoresponse params ori', print_r($paramsOri, true));
- // Paypal ne fournisant pas le montant total pour un paiement multiple, il faut recalculer le montant de l'échéance
- if($paramsOri->nbDeadLine > 1){
- if((get_class($this)=='XModPaypal') || ($this instanceof XModPaypal == 1)){
- $montant = $paramsOri->amount / $paramsOri->nbDeadLine;
- $montant = round($montant , 2);
- // Calcule de la différence du aux arrondis
- $diff= $paramsOri->amount - ($montant* $paramsOri->nbDeadLine);
- if( !empty($transaction->responseParms['mc_amount1']) && ($transaction->responseParms['mc_amount1']==$montant+$diff) && ($transaction->responseParms['mc_amount1']==$montant) ){
- $transaction->amount= $paramsOri->amount;
- XLogs::critical(get_class($this).' ::autoresponse ', 'Montants OK');
- }else{
- list($firstDeadLine,$otherDeadLine) = $this->getAmountDeadLine($transaction->oid);
- if( $transaction->amount==$firstDeadLine || $transaction->amount==$otherDeadLine){
- $transaction->amount= $paramsOri->amount;
- }
- }
- }
- }
- // Vérification de la cohérence du montant, entre les paramètres d'appel et de réponse du serveur bancaire
- if (!$this->checkResponseAmount($transaction->amount, $paramsOri->amount)){
- $amountCall = XLabels::getSysLabel('xmodmonetique','amountCall').$paramsOri->amount;
- $amountResponse =XLabels::getSysLabel('xmodmonetique','amountResp').$transaction->amount ;
- $transaction->statusComplement = XLabels::getSysLabel('xmodmonetique','errorAmount').$amountCall.' : '.$amountResponse;
- $this->xset->procEdit(array('_options'=>array('local'=>1),
- 'oid'=> $transaction->oid,
- 'responseParms'=>$transaction->responseParms,
- 'status'=>self::ERROR,
- 'dateTimeIn'=>date('Y-m-d H:i:s'),
- 'statusComplement'=>$transaction->statusComplement,
- 'nbReturn'=>$transaction->nbReturn,
- 'responseStatus'=>'NA'
- ));
- XLogs::critical(get_class($this)."::autoresponse ", $transaction->statusComplement);
- throw new Exception(get_class($this).' ::autoresponse '.$transaction->statusComplement);
- }
- // Affectation du libellé du code erreur dans le statusComplement si il est vide
- if(empty( $transaction->statusComplement)){
- $transaction->statusComplement = $this->getErrorCode($transaction->responseCode);
- }
- // Mémorisation de la réponse
- $transaction->dateTimeIn = date('Y-m-d H:i:s');
- $infosToMemorize = (array) $transaction;
- $infosToMemorize['_options'] = array('local'=>1);
- $infosToMemorize['options'] = array('responseParms'=>array('raw'=>true,'toxml'=>true));
- $this->xset->procEdit($infosToMemorize);
- // Récupération des informations d'origine afin de traiter l'enrollement s'il y a lieu
- foreach ($paramsOri as $key => $value){
- // On vérifie que le champs est vide afin de ne pas écraser d'informations.
- if(empty($transaction->$key)){
- $transaction->$key = $value;
- }
- }
- // Si la transaction d'origine indique qu'il faut mettre à jour la table des enrollements
- if (!empty($transaction->refAbonneBoutique)){
- // Si la transaction est un echec on le mémorise également dans la table des enrollements
- if($transaction->status != self::SUCCESS){
- $transaction->porteur= XLabels::getSysLabel('xmodmonetique','enrollementError');
- $transaction->dateVal = XLabels::getSysLabel('xmodmonetique','enrollementError');
- $transaction->cvv = XLabels::getSysLabel('xmodmonetique','enrollementError');
- $transaction->numCarte = XLabels::getSysLabel('xmodmonetique','enrollementError');
- }
- // Mise à jour de l'enrollement
- $this->editAbonne($transaction);
- }
- // Si nécessaire on notifie le retour à la boutique
- if ($transaction->autoResponseMode === self::SYNC_RESPONSE){
- $this->notifyShop($transaction);
- }
- // Sinon on valorise le statut de réponse à : RESPONSE_STATUS_TO_SEND, afin qu'il soit traité de manière asynchrone
- elseif($transaction->autoResponseMode === self::ASYNC_RESPONSE){
- $this->xset->procEdit(array('_options'=>array('local'=>true), 'oid'=>$transaction->oid, 'responseStatus'=>self::RESPONSE_STATUS_TO_SEND));
- }
- $GLOBALS['XSHELL']->response = (object)array('complete' => true, 'content' => '');
- return true;
- }
-
- /**
- * \brief Fonction d'insertion d'une transaction en base.
- * Cette fonction permet d'inserer une transaction avant l'appel en banque.
- * \param MTransaction $transaction : La transaction paramètré par paymentCall.
- * \return String Oid de la transaction associée à ce paiement.
- */
- protected function insertWebPayment(MTransaction $transaction){
- $transaction->monetiqueMoid = $this->_moid;
- $transaction->responseStatus = self::RESPONSE_NONE;
- $r = $this->xset->procInput( (array) $transaction);
- if (empty($r)) {
- XLogs::critical(get_class($this).XLabels::getSysLabel('xmodmonetique','errorInsertWebPayment'), print_r($transactionParams, true));
- ;
- }
- return $r['oid'];
- }
- /**
- * \brief Fonction de création d'un abonné.
- * Cette fonction permet d'inserer un nouvel abonné avant l'appel en banque.
- * \param MTransaction $transaction : La transaction contenant les paramètres d'enrollement :
- * - $transaction->customerOid. \link MTransaction::$customerOid \endlink
- * - $transaction->refAbonneBoutique. \link MTransaction::$refAbonneBoutique \endlink
- * - $transaction->oid']. \link MTransaction::$oid \endlink
- * \note
- * - Récupère la table des abonnés.
- * - Prépare les paramètres à mémoriser.
- * - Insère les informations.
- * \return String Oid du nouvel enrollement.
- */
- protected function insertAbonne($transaction) {
- // Récupération de la table des abonnés
- $tableAbonne = XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.'ENROMONETIQUE');
- // Préparation des paramètres à mémoriser
- $infosAbonne = array(
- 'customerOid' => $transaction->customerOid,
- 'refAbonne'=> $transaction->refAbonneBoutique,
- 'transOri' => $transaction->oid
- );
- // Insertion des informations
- $r = $tableAbonne->procInput($infosAbonne);
- if (empty($r)) {
- XLogs::critical(get_class($this).XLabels::getSysLabel('xmodmonetique','errorInsertAbonne'), print_r($infosAbonne), true);
- }
- return $r['oid'];
- }
-
- /**
- * \brief Fonction de mise à jour d'un abonné.
- * Cette fonction permet de mettre à jour un abonné à la suite d'un retour banque.
- * \param MTransaction $transaction : La transaction donné par le retour banque.
- * - Doit contenir:
- * - $transaction->customerOid. \link MTransaction::$customerOid \endlink
- * - $transaction->refAbonneBoutique. \link MTransaction::$refAbonneBoutique \endlink
- * \note
- * - Récupère la table des abonnés.
- * - Vérifie que l'enrollement à été créé avant l'appel en banque.
- * - Prépare les paramètres à mémoriser
- * - Insère les informations.
- * \return String Oid du nouvel enrollement.
- */
- protected function editAbonne($transaction) {
- // Récupération de la table des abonnés
- $tableAbonne = XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.'ENROMONETIQUE');
- // On vérifie que l'enrollement à été créé avant l'appel bancaire
- $custEnro = $this->getEnrollement($transaction->customerOid,$transaction->refAbonneBoutique);
- if(!empty($custEnro)){
- // Préparation des paramètres à mémoriser
- $lar = array('_options'=>array('local'=>1),
- 'oid'=>$custEnro->KOID,
- 'refAbonne'=>$transaction->refAbonneBoutique,
- 'customerOid'=> $transaction->customerOid,
- 'porteur'=>$transaction->porteur,
- 'dateVal'=>$transaction->dateVal,
- 'cvv'=>$transaction->cvv,
- 'numCarte'=>$transaction->numCarte,
- );
- // Insertion des informations
- $r = $tableAbonne->procEdit($lar);
- if (empty($r)) {
- XLogs::critical(get_class($this).' ::editAbonne : '.XLabels::getSysLabel('xmodmonetique','errorUpdateAbonne'), print_r($lar), true);
- }
- }
- else{
- XLogs::critical(get_class($this).XLabels::getSysLabel('xmodmonetique','errorUnknowAbonne'), print_r($transaction), true);
- }
- return $r['oid'];
- }
- /**********************************************************
- *************** Fonctions de remboursement ***************
- *********************************************************/
- /**
- * \brief Fonction création d'un remboursement.
- * Cette fonction permet de mettre à jour un abonné à la suite d'un retour banque.
- * \param String $transactionOriginOid : Identifiant de la transaction d'origine. \link MTransaction::$oid \endlink
- * \param MOrderInfos $order : Commande à l'origine du remboursement, avec le montant du remboursement.
- * - $order->amount est obligatoire.\link MOrderInfos::$amount \endlink
- * \param MShopInfos $shop : Comporte les paramètres de la boutique (autoResponseCallBack, autoResponseMode, ...).\link MShopInfos \endlink
- * \return Array :
- * - String ok/ko.
- * - String oid de la nouvelle transaction. \link MTransaction::$oid \endlink
- * \exception:
- * - Error : \link refundHandling(& $transaction) \endlink.
- * - Impossible de trouver la transaction d'origine.
- * - Si $order->amount n'est pas initialisé. \link MOrderInfos::$amount \endlink
- * - Si la signature est invalide, levée par \link refundHandling(& $transaction) \endlink
- * \note
- * - Si $transactionOriginOid (\link MTransaction::$oid \endlink) est null, cherche la transaction à partir de l'order->reference (\link MTransaction::$reference \endlink).
- * - Vérification que le montant à rembourser à été saisi.
- * - Initialise les paramètres de base de la nouvelle transaction.
- * - Copie les informations manquantes à partir de la transaction d'origine.
- * - Crée la transaction en base. \link insertRefund ($transaction, $shop) \endlink.
- * - Formate le montant passé en paramètres. \link formatOrderAmount($amount); \endlink
- * - Met à jour les attributs de $newTransaction. \link refundHandling(& $transaction) \endlink.
- * - Mémorise les données brutes de reponse et le status.
- * - Si la signature est vérifié, gestion de la notification boutique.
- * \see
- * - getIdTransactionWithOrderRef($orderReference);
- * - getTransaction ($transactionOid);
- * - refundHandling(& $transaction);
- * \todo Factoriser le contrôle du montant dans monétique
- */
- public function refundCall($transactionOriginOid, $order, $shop){
- // Recherche la transaction d'origine
- // Si l'on ne possède que l'order->reference, on cherche la transaction à partir de celui-ci
- if(!empty($order->reference) && empty($transactionOriginOid)){
- // Récupération de l'oid de la transaction d'origine
- $transactionOriginOid = $this->getIdTransactionWithOrderRef($order->reference);
- // Récupération de toutres les infos relatives à cette transaction
- $transactionOrigin = $this->getTransaction($transactionOriginOid);
- // Mémorisation de l'oid d'origine
- $transactionOrigin->oid = $transactionOriginOid;
- }
- // Sinon on cherche la transaction à partir de son oid
- else if(!empty($transactionOriginOid)){
- // Récupération de toutres les infos relatives à cette transaction
- $transactionOrigin = $this->getTransaction($transactionOriginOid);
- // Mémorisation de l'oid d'origine
- $transactionOrigin->oid = $transactionOriginOid;
- }
- // Problème de paramètres, impossible de trouver la transaction d'origine
- if(empty($transactionOrigin->oid)){
- throw new Exception(get_class($this).' ::refundCall '.XLabels::getSysLabel('xmodmonetique','exceptionUnknowTransaction').' Order reference : '.$order->reference.' Transaction oid : '.$transactionOriginOid);
- }
- // Vérification que le montant à rembourser à été saisi
- if(empty($order->amount)){
- throw new Exception(get_class($this).' ::refundCall :'.XLabels::getSysLabel('xmodmonetique','noAmount'));
- }
- /* Initialisation des paramètres de base de la nouvelle transaction */
- // Mémorisation de la transaction d'origine
- $newTransaction->transOri = $transactionOrigin->oid;
- // Affectation de la date de création du remboursement
- $newTransaction->dateCreated = date('Y-m-d H:i:s');
- // Affectation du montant à rembourser
- $newTransaction->amount = $order->amount;
- // Récupération de l'oid de la commande à remboursée
- $newTransaction->orderOid = $transactionOrigin->orderOid;
- // Génération de la référence de la commande de remboursement
- $newTransaction->orderReference = 'N/A'; //$this->genOrderRef('Y%m%d%H%i%s');
- // Le remboursement est immédiat
- $newTransaction->captureMode = self::CATCH_PAYMENT;
- // Le traitement est en cours
- $newTransaction->status = self::RUNNING;
- // Le type de transaction est un remboursement
- $newTransaction->type = self::REFUND;
- // Il n'y a pas de dalai, si c'est faisable, on le fait
- $newTransaction->captureDelay = 0;
- // Récupération de l'oid du client à remboursée
- $newTransaction->customerOid = $transactionOrigin->customerOid;
- // On regarde s'il y a des infos supplémentaires au sujet du client
- if(isset($transactionOrigin->refAbonneBoutique)){
- $newTransaction->refAbonneBoutique = $transactionOrigin->refAbonneBoutique;
- }
- if(isset($transactionOrigin->customerEmail)){
- $newTransaction->customerEmail = $transactionOrigin->customerEmail;
- }
- /* Paramètres de la boutique */
- // On mémorise dans la transaction le mode de réponse attendu par la boutique.
- $newTransaction->autoResponseMode = $shop->autoResponseMode;
- // On mémorise dans la transaction la fonction de traitement de la reponse attendu par la boutique.
- $newTransaction->shopCallBack = $shop->autoResponseCallBack;
- $newTransaction->monetiqueMoid = $this->_moid;
- $newTransaction->shopMoid = $shop->moid;
- $newTransaction->shopName = $shop->name;
- $newTransaction->shopClass = $shop->class;
- // Tant qu'on n'a pas de réponse on ne cherche pas à notifier la boutique
- $newTransaction->responseStatus = self::RESPONSE_NONE;
- // Créer la transaction en base. On a besoin de son oid pour les paramètres d'appel
- $newTransaction->oid = $this->insertRefund($newTransaction, $shop);
- // Traiter la requête
- try{
- // Cette méthode retourne la transaction après l'appel en banque
- $transaction = $this->refundHandling($newTransaction);
- $returnValue = array('ok', $newTransaction->oid);
- }
- catch(Exception $e){
- XLogs::critical(get_class($this).'::refundCall ',print_r($newTransaction,true) );
- $newTransaction->status = self::ERROR;
- XLogs::critical(get_class($this), '::refundCall -> ::refundHandling '.$e->getMessage().' Code '.$e->getCode());
- $newTransaction->statusComplement = $e->getMessage();
- // Mémorise les données brutes de reponse et le status
- $this->xset->procEdit(array('_options'=>array('local'=>1),
- 'oid'=>$newTransaction->oid,
- 'responseParms'=>$newTransaction->responseParms,
- 'status'=> $newTransaction->status,
- 'dateTimeIn'=>date('Y-m-d H:i:s'),
- 'statusComplement'=> $newTransaction->statusComplement,
- 'responseCode'=>$newTransaction->responseCode,
- 'options'=>array('responseParms'=>array('raw'=>true,'toxml'=>true))
- ));
- $returnValue = array('ko', $newTransaction->oid);
- throw new Exception(get_class($this).' ::refundCall : '.$newTransaction->statusComplement);
- }
- XLogs::critical(get_class($this).' ::refundCall', print_r($transaction,true));
- // Mémorise les données brutes de reponse et le status
- $this->xset->procEdit(array('_options'=>array('local'=>1),
- 'oid'=>$transaction->oid,
- 'responseParms'=>$transaction->responseParms,
- 'status'=> $transaction->status,
- 'dateTimeIn'=>date('Y-m-d H:i:s'),
- 'statusComplement'=> $transaction->statusComplement,
- 'responseCode'=>$transaction->responseCode,
- 'options'=>array('responseParms'=>array('raw'=>true,'toxml'=>true))
- ));
- // si nécessaire notifier le retour à la boutique
- if ($newTransaction->autoResponseMode === self::SYNC_RESPONSE){
- $this->notifyShop($newTransaction);
- }
- // Sinon mise à jour pour traitement asynchrone
- elseif($newTransaction->autoResponseMode === self::ASYNC_RESPONSE){
- $this->xset->procEdit(array('_options'=>array('local'=>true),
- 'oid'=>$newTransaction->oid,
- 'responseStatus'=>self::RESPONSE_STATUS_TO_SEND
- ));
- }
- return $returnValue;
- }
- /**
- * \brief Fonction d'insertion d'un remboursement en base.
- * Cette fonction permet d'inserer une transaction avant l'appel en banque.
- * \param MTransaction $transaction : Contient les informations relatives au remboursement. \link MTransaction \endlink
- * \return String Oid de la transaction associée à ce remboursement. \link MTransaction::$oid \endlink
- */
- protected function insertRefund($transaction, $shop){
- $r = $this->xset->procInput( (array) $transaction);
- if (empty($r)) {
- XLogs::critical(get_class($this).' ::insertRefund :'.XLabels::getSysLabel('xmodmonetique','noAmount'), print_r($infosToMemorize), true);
- }
- return $r['oid'];
- }
- /**
- * \brief Fonction de ré-émission des remboursements ayant le status waitting.
- * Cette fonction permet de rejouer les remboursement en attente.
- * \return Array :
- * - Int $nbTotal : Nombre total de transactions rejouée.
- * - Int $nbSucces : Nombre total de succès.
- * - Array $error : Le details des erreurs (statusComplement de chaque transaction échouée).
- * \throws:
- * - Error : \link refundHandling(& $transaction) \endlink.
- * - Impossible de trouver la transaction d'origine.
- * \note
- * - Séléctionne des transaction à rejouer.
- * - Pour chaque transaction :
- * - Formate le montant de la transaction en centimes.
- * - Transforme les paramètres d'appels mémorisés en XML en tableau associatif.
- * - Appel à la fonction refundReplay spécifique au module de la transaction.
- * - Mémorise la réponse et les paramètres de la transaction.
- * - Si la signature est vérifié, gestion de la notification boutique.
- * \see
- * - XModMonetique::refundReplay(& $transaction);
- */
- public function refundAsyncHandling(){
- // Séléction des transaction à rejouer
- $rs = selectQuery('select * from '.$this->xset->getTable().' where status = "'.self::WAITTING.'" and type = "'.self::REFUND.'" and monetiqueMoid = "'.$this->_moid.'" ');
- // Initialisation des variables locales
- $nbTotal = $rs->rowcount();
- $nbSucces = '0';
- $error = array();
- // Tant qu'il y a des transactions à rejouer
- while($ors = $rs->fetch()){
- foreach ($ors as $key => $value){
- // Si c'est le montant on le formate en centimes et on le mémorise dans la transaction
- $transaction->$key = $value;
- }
- // On transforme les paramètres d'appels mémorisés en XML en tableau associatif
- $transaction->callParms = XSystem::xml2array($transaction->callParms);
- // Appel à la fonction refundReplay spécifique au module de la transaction
- $transaction = $this->refundReplay($transaction);
- // Mémorise la réponse et les paramètres de la transaction
- $this->xset->procEdit(array(
- '_options'=>array('local'=>1),
- 'oid'=>$transaction->KOID,
- 'responseParms'=>$transaction->responseParms,
- 'statusComplement'=> $transaction->statusComplement,
- 'status'=>$transaction->status,
- 'options'=>array('responseParms'=>array('raw'=>true,'toxml'=>true))
- ));
- if($transaction->status == self::SUCCESS){
- $nbSucces++;
- }else{
- $error[$ors['KOID']][$transaction->status] = $transaction->statusComplement;
- }
- // si nécessaire notifier le retour à la boutique
- if ($ors->autoResponseMode === self::SYNC_RESPONSE){
- $this->notifyShop($ors->oid);
- }
- elseif($ors->autoResponseMode === self::ASYNC_RESPONSE){
- $this->xset->procEdit(array('_options'=>array('local'=>true), 'oid'=>$ors->oid, 'responseStatus'=>self::RESPONSE_STATUS_TO_SEND));
- }
- }
- return array($nbTotal, $nbSucces, $error);
- }
- /* Fonctions de débit forcé d'un abonné */
-
- /**
- * \brief Fonction de génération des données de prelevement.
- * Cette fonction permet de dupliquer un paiement à partir d'un paiement web ayant généré un enrollement.
- * \param MOrderInfos $order : Commande relative à la duplication, avec le montant de la duplication.
- * - $order->amount est obligatoire.
- * \param MCustomerInfos $customer : Le client qui va être débité.
- * - $customer->oid et $customer->refAbonne sont obligatoire.
- * \param MShopInfos $shop : Comporte les paramètres de la boutique (autoResponseCallBack, autoResponseMode, ...).
- * \return MTransaction $transaction : La transaction après l'appel banque avec tous ses paramètres renseignés.
- * \exception:
- * - Error : \link refundHandling(& $transaction) \endlink
- * - Si $order->amount n'est pas initialisé.
- * - Si \link XModMonetique::getEnrollement($customerOid,$refAbonne) \endlink retourne null.
- * - Impossible de trouver la transaction d'origine.
- * \note
- * - Vérifie que le montant est saisi.
- * - Récupère les informations concernant l'abonné. \link getEnrollement($customerOid,$refAbonne); \endlink
- * - Initialise les paramètres de base de la nouvelle transaction.
- * - Formate le montant passé en paramètres. \link formatOrderAmount($amount); \endlink
- * - Récupère les informations de la transaction d'origine. \link getTransaction($transactionOid) \endlink
- * - Crée la transaction en base, avant l'appel en banque. \link insertDuplicate($transaction); \endlink
- * - L'appel à \link marshallRemboursement(& $newTransaction); \endlink permet de laissé le traitement de la duplication au module concerné. Cette appel renseigne le retour dans $newTransaction.
- * - Mémorise les données brutes de reponse et le status.
- * - Si la signature est vérifié, gestion de la notification boutique.
- * \see
- * - getEnrollement($customerOid,$refAbonne);
- * - formatOrderAmount($amount);
- * - getTransaction ($transactionOid);
- * - refundHandling($transaction);
- */
- public function duplicateCall(MOrderInfos $order, MCustomerInfos $customer, MShopInfos $shop){
- // Vérification que le montant est saisi
- if(empty($order->amount)){
- throw new Exception(get_class($this).' ::duplicateCall :'.XLabels::getSysLabel('xmodmonetique','noAmount'));
- }
- // Récupération des informations concernant l'abonné
- $customerEnrollment = $this->getEnrollement($customer->oid, $customer->refAbonne);
- // Si l'abonné existe dans ENROMONETIQUE
- if (!empty($customerEnrollment)){
- $newTransaction = new MTransaction();
- // Préparation des paiement à multiples échéances
- if (isset($order->options['nbDeadLine'])) {
- $newTransaction->nbDeadLine = $order->options['nbDeadLine'];
- // Définition de la fréquence de prélèvement en jours
- if(empty($order->options['frequencyDuplicate'])){
- $newTransaction->frequencyDuplicate = '30';
- }else{
- $newTransaction->frequencyDuplicate = $order->options['frequencyDuplicate'];
- }
- // Par défaut le jour de prélévement est la date courante
- if(!empty($order->options['captureDay'])){
- $newTransaction->captureDay = $order->options['captureDay'];
- }
- else{
- $newTransaction->captureDay = date('d');
- }
- }
- // Paiement à une seule échéances par défaut
- else {
- $newTransaction->nbDeadLine = '1';
- }
- // Si la commande indique que la capture doit être différé
- if(isset($order->options['captureDelay'])){
- $newTransaction->captureDelay = $order->options['captureDelay'];
- }else{
- $newTransaction->captureDelay = '0';
- }
- // Gestion du mode de capture (Capture par défaut, sinon autorisation seulement)
- if( $order->options['noCapture'] == true){
- $newTransaction->captureMode = self::AUTHORIZATION_ONLY;
- }
- else{
- $newTransaction->captureMode = self::CATCH_PAYMENT;
- }
- // Affectation du type de transaction : DEBIT
- $newTransaction->type = self::DUPLICATE;
- // Mémorisation de la transaction d'origine
- $newTransaction->transOri =$customerEnrollment->transOri;
- // Mémorisation de la référence abonné
- $newTransaction->refAbonneBoutique =$customerEnrollment->refAbonne;
- // Mémorisation du cvv
- $newTransaction->cvv =$customerEnrollment->cvv;
- // Mémorisation du porteur
- $newTransaction->porteur =$customerEnrollment->porteur;
- // Mémorisation de la date de validitée de la carte
- $newTransaction->dateVal =$customerEnrollment->dateVal;
- // Affectation du montant à rembourser
- $newTransaction->amount =$order->amount;
- // Définition du status
- $newTransaction->status = self::RUNNING;
- // Pas de notification tant qu'il n'y a pas de reponse
- $newTransaction->responseStatus = self::RESPONSE_NONE;
- // Récupération de la référence
- $newTransaction->orderReference = $order->reference;
- // Récupération de l'oid de la commande
- $newTransaction->orderOid = $order->oid;
- // Si la boutique fournis le mode de réponse attendu. Sinon on utilisera le même mode que la transaction d'origine.
- if(isset($shop->autoResponseMode)){
- $newTransa…
Large files files are truncated, but you can click here to view the full file