private function canGetAbonnement()
 {
     /*
      * Premià¨re étape d'un abonnement:
      * 1) Vérification de l'adresse IP (pour bloqué la souscription si non résident)
      * 2) Vérifie si l'utilisateur à  déjà  un dossier de payment UNIQUEMENT SI IL EST CONNECTé (donc impossible de se re-abonner)
      */
     // Vérifie si l'IP de l'utilisateur correspond à  une résidence
     $oResidence = new ResidenceModel();
     if (!$oResidence->getResidence()) {
         /*
          * L'utilisateur n'est pas dans l'une de nos résidence
          * on lui bloque l'acces et le redirige vers une page 
          * expliquant pourquoi
          */
         /*
         			$oWarning = new WarningModel() ;
         			$oWarning->badResidenceForAbonnement() ;
         			$oWarning->oPDO = NULL ;
         */
         return 1;
     }
     // Initialise le PaylineModel
     $oPayline = new PaylineModel();
     $oPayline->setConfig();
     // Vérifie si l'utilisateur est connecté
     if (isset($_SESSION['UID']) && $_SESSION['UID'] != 0) {
         // Si l'utilisateur est connecté, il à  forcément un abonnement
         return 2;
     }
     return 0;
 }
Example #2
0
 public function validationStep2()
 {
     /*
      * Vérifie tout les champs vide
      */
     // Civilité
     if (empty($_POST['sCivilite'])) {
         $aReturn['sCivilite'] = 1;
     } else {
         $aReturn['sCivilite'] = 0;
     }
     // Nom
     if (empty($_POST['sNom'])) {
         $aReturn['sNom'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sNom'], 3)) {
             $aReturn['sNom'] = 1;
         } else {
             $aReturn['sNom'] = 0;
         }
     }
     // Prénom
     if (empty($_POST['sPrenom'])) {
         $aReturn['sPrenom'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sPrenom'], 3)) {
             $aReturn['sPrenom'] = 1;
         } else {
             $aReturn['sPrenom'] = 0;
         }
     }
     // Adresse
     if (empty($_POST['sAdresse'])) {
         $aReturn['sAdresse'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sAdresse'], 7)) {
             $aReturn['sAdresse'] = 1;
         } else {
             $aReturn['sAdresse'] = 0;
         }
     }
     // Zipcode
     if (empty($_POST['sZipcode'])) {
         $aReturn['sZipcode'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sZipcode'], 5)) {
             $aReturn['sZipcode'] = 1;
         } else {
             if (!StrModel::strMaxLen($_POST['sZipcode'], 5)) {
                 $aReturn['sZipcode'] = 1;
             } else {
                 if (!StrModel::isNum($_POST['sZipcode'])) {
                     $aReturn['sZipcode'] = 1;
                 } else {
                     $aReturn['sZipcode'] = 0;
                 }
             }
         }
     }
     // Ville
     if (empty($_POST['sVille'])) {
         $aReturn['sVille'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sVille'], 2)) {
             $aReturn['sVille'] = 1;
         } else {
             $aReturn['sVille'] = 0;
         }
     }
     $aReturn['sBirth'] = 0;
     // Birth Day
     if (empty($_POST['sBirthDay'])) {
         $aReturn['sBirth'] = 1;
     }
     // Birth Month
     if (empty($_POST['sBirthMonth'])) {
         $aReturn['sBirth'] = 1;
     }
     // Birth Year
     if (empty($_POST['sBirthYear'])) {
         $aReturn['sBirth'] = 1;
     }
     // Fai
     if (empty($_POST['sFai'])) {
         $aReturn['sFai'] = 1;
     } else {
         $aReturn['sFai'] = 0;
     }
     // Mobile
     if (empty($_POST['sMobile'])) {
         $aReturn['sMobile'] = 1;
     } else {
         $aReturn['sMobile'] = 0;
     }
     // Activite
     if (empty($_POST['sActivite'])) {
         $aReturn['sActivite'] = 1;
     } else {
         $aReturn['sActivite'] = 0;
     }
     // Nom Banque
     if (empty($_POST['sNomBanque'])) {
         $aReturn['sNomBanque'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sNomBanque'], 3)) {
             $aReturn['sNomBanque'] = 1;
         } else {
             $aReturn['sNomBanque'] = 0;
         }
     }
     // Adresse Banque
     if (empty($_POST['sAdresseBanque'])) {
         $aReturn['sAdresseBanque'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sAdresseBanque'], 5)) {
             $aReturn['sAdresseBanque'] = 1;
         } else {
             $aReturn['sAdresseBanque'] = 0;
         }
     }
     // Ville Banque
     if (empty($_POST['sVilleBanque'])) {
         $aReturn['sVilleBanque'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sVilleBanque'], 3)) {
             $aReturn['sVilleBanque'] = 1;
         } else {
             $aReturn['sVilleBanque'] = 0;
         }
     }
     // Zipcode Banque
     if (empty($_POST['sZipcodeBanque'])) {
         $aReturn['sZipcodeBanque'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sZipcodeBanque'], 5)) {
             $aReturn['sZipcodeBanque'] = 1;
         } else {
             if (!StrModel::strMaxLen($_POST['sZipcodeBanque'], 5)) {
                 $aReturn['sZipcodeBanque'] = 1;
             } else {
                 if (!StrModel::isNum($_POST['sZipcodeBanque'])) {
                     $aReturn['sZipcodeBanque'] = 1;
                 } else {
                     $aReturn['sZipcodeBanque'] = 0;
                 }
             }
         }
     }
     // Code Banque
     if (empty($_POST['sCodeBanque'])) {
         $aReturn['sCodeBanque'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sCodeBanque'], 5)) {
             $aReturn['sCodeBanque'] = 1;
         } else {
             if (!StrModel::strMaxLen($_POST['sCodeBanque'], 5)) {
                 $aReturn['sCodeBanque'] = 1;
             } else {
                 $aReturn['sCodeBanque'] = 0;
             }
         }
     }
     // Code Guichet
     if (empty($_POST['sCodeGuichet'])) {
         $aReturn['sCodeGuichet'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sCodeGuichet'], 5)) {
             $aReturn['sCodeGuichet'] = 1;
         } else {
             if (!StrModel::strMaxLen($_POST['sCodeGuichet'], 5)) {
                 $aReturn['sCodeGuichet'] = 1;
             } else {
                 $aReturn['sCodeGuichet'] = 0;
             }
         }
     }
     // Numéro de Compte
     if (empty($_POST['sNumeroCompte'])) {
         $aReturn['sNumeroCompte'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sNumeroCompte'], 11)) {
             $aReturn['sNumeroCompte'] = 1;
         } else {
             if (!StrModel::strMaxLen($_POST['sNumeroCompte'], 11)) {
                 $aReturn['sNumeroCompte'] = 1;
             } else {
                 $aReturn['sNumeroCompte'] = 0;
             }
         }
     }
     // Clé Rib
     if (empty($_POST['sCleRib'])) {
         $aReturn['sCleRib'] = 1;
     } else {
         if (!StrModel::strMinLen($_POST['sCleRib'], 2)) {
             $aReturn['sCleRib'] = 1;
         } else {
             if (!StrModel::strMaxLen($_POST['sCleRib'], 2)) {
                 $aReturn['sCleRib'] = 1;
             } else {
                 $aReturn['sCleRib'] = 0;
             }
         }
     }
     // Validation du RIB
     if (!RibModel::verifierRib($_POST['sCodeBanque'], $_POST['sCodeGuichet'], $_POST['sNumeroCompte'], $_POST['sCleRib'])) {
         $aReturn['sValidRib'] = 1;
     } else {
         $aReturn['sValidRib'] = 0;
     }
     /*
      * Si une erreur est retourné pour l'un des champs, on stop l'opération et renvoie le tableau de résultat
      */
     foreach ($aReturn as $iValue) {
         if ($iValue == 1) {
             return $aReturn;
         }
     }
     /*
      * Enregistre les données de l'utilisateur et créer le portefeuil
      * Si l'utilisateur ne valide pas son portefeuil, les donnée seron supprimé
      * L'enregistrement se fais avant la création du token, car pour créer le token
      * il faut connaitre l'user ID (UID) qui va etre attribué en créant le compte
      */
     $_SESSION['aUserInfo']['nom'] = strtoupper($_POST['sNom']);
     $_SESSION['aUserInfo']['civilite'] = $_POST['sCivilite'];
     $_SESSION['aUserInfo']['prenom'] = ucfirst(strtolower($_POST['sPrenom']));
     if ($_POST['sBirthMonth'] < 10) {
         $_POST['sBirthMonth'] = '0' . $_POST['sBirthMonth'];
     }
     if ($_POST['sBirthDay'] < 10) {
         $_POST['sBirthDay'] = '0' . $_POST['sBirthDay'];
     }
     $_SESSION['aUserInfo']['birthday'] = $_POST['sBirthYear'] . '-' . $_POST['sBirthMonth'] . '-' . $_POST['sBirthDay'];
     $_SESSION['aUserInfo']['fai'] = $_POST['sFai'];
     $_SESSION['aUserInfo']['mobile'] = $_POST['sMobile'];
     $_SESSION['aUserInfo']['metier'] = $_POST['sActivite'];
     $_SESSION['aUserAdresse']['adresse'] = $_POST['sAdresse'];
     $_SESSION['aUserAdresse']['zipcode'] = $_POST['sZipcode'];
     $_SESSION['aUserAdresse']['ville'] = $_POST['sVille'];
     $_SESSION['aUserRib']['nomBanque'] = $_POST['sNomBanque'];
     $_SESSION['aUserRib']['adresseBanque'] = $_POST['sAdresseBanque'];
     $_SESSION['aUserRib']['villeBanque'] = $_POST['sVilleBanque'];
     $_SESSION['aUserRib']['codeBanque'] = $_POST['sCodeBanque'];
     $_SESSION['aUserRib']['zipcodeBanque'] = $_POST['sZipcodeBanque'];
     $_SESSION['aUserRib']['codeBanque'] = $_POST['sCodeBanque'];
     $_SESSION['aUserRib']['codeGuichet'] = $_POST['sCodeGuichet'];
     $_SESSION['aUserRib']['numeroCompte'] = $_POST['sNumeroCompte'];
     $_SESSION['aUserRib']['cleRib'] = $_POST['sCleRib'];
     $oResidence = new ResidenceModel();
     $aResidence = $oResidence->getResidence();
     // Enregistrement des données bo_user
     $oUser = $this->oPDO->prepare('INSERT INTO bo_user SET registered="' . date('Y-m-d') . '", RID=:RID, pass=:pass, mail=:mail, portable=:portable');
     $oUser->bindValue(':pass', StrModel::generatePass(8));
     $oUser->bindValue(':mail', $_SESSION['aUser']['mail']);
     $oUser->bindValue(':portable', $_SESSION['aUser']['portable']);
     $oUser->bindValue(':RID', $aResidence['RID']);
     $oUser->execute();
     // Sauvegarde du nouveau UID associé à  cet user
     $_SESSION['iUID'] = $this->oPDO->lastInsertId();
     // Enregistrement des donné dans bo_user_info
     $oUserInfo = $this->oPDO->prepare('INSERT INTO bo_user_info SET UID="' . $_SESSION['iUID'] . '", civilite=:civilite, nom=:nom, prenom=:prenom, metier=:metier, fai=:fai, mobile=:mobile, birthday=:birthday');
     $oUserInfo->bindValue(':civilite', $_SESSION['aUserInfo']['civilite']);
     $oUserInfo->bindValue(':nom', $_SESSION['aUserInfo']['nom']);
     $oUserInfo->bindValue(':prenom', $_SESSION['aUserInfo']['prenom']);
     $oUserInfo->bindValue(':metier', $_SESSION['aUserInfo']['metier']);
     $oUserInfo->bindValue(':fai', $_SESSION['aUserInfo']['fai']);
     $oUserInfo->bindValue(':mobile', $_SESSION['aUserInfo']['mobile']);
     $oUserInfo->bindValue(':birthday', $_SESSION['aUserInfo']['birthday']);
     $oUserInfo->execute();
     // Enregistrement des donné dans bo_user_adresse
     $oUserAdresse = $this->oPDO->prepare('INSERT INTO bo_user_adresse SET UID="' . $_SESSION['iUID'] . '", adresse=:adresse, zipcode=:zipcode, ville=:ville');
     $oUserAdresse->bindValue(':adresse', $_SESSION['aUserAdresse']['adresse']);
     $oUserAdresse->bindValue(':zipcode', $_SESSION['aUserAdresse']['zipcode']);
     $oUserAdresse->bindValue(':ville', $_SESSION['aUserAdresse']['ville']);
     $oUserAdresse->execute();
     // Enregistrement des donné dans bo_user_rib
     $oUserRib = $this->oPDO->prepare('INSERT INTO bo_user_rib SET UID="' . $_SESSION['iUID'] . '", nomBanque=:nomBanque, adresseBanque=:adresseBanque, villeBanque=:villeBanque, zipcodeBanque=:zipcodeBanque, codeBanque=:codeBanque, codeGuichet=:codeGuichet, numeroCompte=:numeroCompte, cleRib=:cleRib');
     $oUserRib->bindValue(':nomBanque', $_SESSION['aUserRib']['nomBanque']);
     $oUserRib->bindValue(':adresseBanque', $_SESSION['aUserRib']['adresseBanque']);
     $oUserRib->bindValue(':villeBanque', $_SESSION['aUserRib']['villeBanque']);
     $oUserRib->bindValue(':zipcodeBanque', $_SESSION['aUserRib']['zipcodeBanque']);
     $oUserRib->bindValue(':codeBanque', $_SESSION['aUserRib']['codeBanque']);
     $oUserRib->bindValue(':codeGuichet', $_SESSION['aUserRib']['codeGuichet']);
     $oUserRib->bindValue(':numeroCompte', $_SESSION['aUserRib']['numeroCompte']);
     $oUserRib->bindValue(':cleRib', $_SESSION['aUserRib']['cleRib']);
     $oUserRib->execute();
     $oProduct = $this->oPDO->prepare('INSERT INTO');
     // Demande à  Payline de créer le portefeuille
     $aWebWallet = $this->createWebWalletFromSession();
     if ($aWebWallet['result']['code'] == '00000') {
         /*
          * Sauvegarde le tolken avec la liste de produit lié dans la base
          * 1) Créer le dossier de payment dans notre base avec comme paymentRecordId le numéro de tolken
          * 		ce numéro de tolken sera remplacé par le vrai paymentRecordId aprà¨s création du dossier chez payline
          * 2) Enregistre la liste des produit avec comme paymentRecordId le numéro de tolken, qui sera remplacé
          * 		comme pour l'étape 1)
          * 3) Sauvegarde le numéro du token pour pouvoir supprimer toutes les données lié en cas de retour négatif de payline
          */
         // Créer le dossier de payment dans bo_payment_folder
         $sOrder = $_SESSION['iUID'];
         foreach ($_SESSION['aProduct'] as $iPID => $bValue) {
             if ($bValue) {
                 $sOrder .= '-' . $iPID;
                 $aProduct = $oResidence->getProductInfo($iPID);
                 // Si le precurrentDureeLeader est à  1, la durée d'abonnement de se produit se duplique sur tout les produit qui n'on pas de durée définie
                 $iRecurrentDuree = $aProduct['recurrentDureeLeader'] == 1 ? $aProduct['recurrentDuree'] : $iRecurrentDuree;
                 $oProduct = $this->oPDO->prepare('INSERT INTO bo_payline_folder_product SET UID=:UID, paymentRecordId=:paymentRecordId, createDate=:createDate, name=:name, description=:description, price=:price, priceFirst=:priceFirst, recurrent=:recurrent, recurrentDuree=:recurrentDuree, recurrentEngagement=:recurrentEngagement');
                 $oProduct->bindValue(':UID', $_SESSION['iUID']);
                 $oProduct->bindValue(':paymentRecordId', $aWebWallet['token']);
                 $oProduct->bindValue(':createDate', date('Y-m-d'));
                 $oProduct->bindValue(':name', $aProduct['name']);
                 $oProduct->bindValue(':description', $aProduct['description']);
                 $oProduct->bindValue(':price', $aProduct['price']);
                 $oProduct->bindValue(':priceFirst', $aProduct['priceFirst']);
                 $oProduct->bindValue(':recurrent', $aProduct['recurrent']);
                 if ($aProduct['recurrent'] == 1) {
                     $oProduct->bindValue(':recurrentDuree', $iRecurrentDuree);
                 } else {
                     $oProduct->bindValue(':recurrentDuree', 0);
                 }
                 $oProduct->bindValue(':recurrentEngagement', $aProduct['recurrentEngagement']);
                 $oProduct->execute();
             }
         }
         // Sauvegarde le dossier de payment dans bo_payment_folder
         $oPaymentFolder = $this->oPDO->prepare('INSERT INTO bo_payline_folder SET UID=:UID, contractNumber=:contractNumber, paymentRecordId=:paymentRecordId, walletId=:walletId, reforder=:reforder');
         $oPaymentFolder->bindValue(':UID', $_SESSION['iUID']);
         $oPaymentFolder->bindValue(':contractNumber', CONTRACT_NUMBER);
         $oPaymentFolder->bindValue(':walletId', $_SESSION['iUID']);
         $oPaymentFolder->bindValue(':paymentRecordId', $aWebWallet['token']);
         $oPaymentFolder->bindValue(':reforder', $sOrder);
         $oPaymentFolder->execute();
         // Sauvegarde le portefeuille
         $oPaymentWallet = $this->oPDO->prepare('INSERT INTO bo_payline_wallet SET UID=:UID, walletId=:walletId, createDate=:createDate, lastName=:lastName, firstName=:firstName, email=:email, result_code=:result_code, result_shortMessage=:result_shortMessage, result_longMessage=:result_longMessage, shippingAddress_name=:shippingAddress_name, shippingAddress_street1=:shippingAddress_street1, shippingAddress_zipCode=:shippingAddress_zipCode, shippingAddress_cityName=:shippingAddress_cityName, shippingAddress_country=:shippingAddress_country, shippingAddress_phone=:shippingAddress_phone');
         $oPaymentWallet->bindValue(':UID', $_SESSION['iUID']);
         $oPaymentWallet->bindValue(':walletId', $_SESSION['iUID']);
         $oPaymentWallet->bindValue(':createDate', date('Y-m-d'));
         $oPaymentWallet->bindValue(':lastName', $_SESSION['aUserInfo']['nom']);
         $oPaymentWallet->bindValue(':firstName', $_SESSION['aUserInfo']['prenom']);
         $oPaymentWallet->bindValue(':email', $_SESSION['aUser']['mail']);
         $oPaymentWallet->bindValue(':result_code', $aWebWallet['result']['code']);
         $oPaymentWallet->bindValue(':result_shortMessage', $aWebWallet['result']['shortMessage']);
         $oPaymentWallet->bindValue(':result_longMessage', $aWebWallet['result']['longMessage']);
         $oPaymentWallet->bindValue(':shippingAddress_name', 'Facturation');
         $oPaymentWallet->bindValue(':shippingAddress_street1', $_SESSION['aUserAdresse']['adresse']);
         $oPaymentWallet->bindValue(':shippingAddress_zipCode', $_SESSION['aUserAdresse']['zipcode']);
         $oPaymentWallet->bindValue(':shippingAddress_country', 'France');
         $oPaymentWallet->bindValue(':shippingAddress_cityName', $_SESSION['aUserAdresse']['ville']);
         $oPaymentWallet->bindValue(':shippingAddress_phone', $_SESSION['aUser']['portable']);
         $oPaymentWallet->execute();
         $this->oPDO->query('INSERT INTO bo_payline_token SET UID="' . $_SESSION['iUID'] . '", token="' . $aWebWallet['token'] . '"');
         /*
          * Supprime toutes les variables de session qui ne sont plus nécéssaire une fois à ce stade
          */
         unset($_SESSION['iUID']);
         unset($_SESSION['aUser']);
         unset($_SESSION['aUserInfo']);
         unset($_SESSION['aUserAdresse']);
         unset($_SESSION['aUserRib']);
         unset($_SESSION['aProduct']);
         // Envoie le retour
         $aReturn['sPaymentUrl'] = $aWebWallet['redirectURL'];
     } else {
         /*
          * La création du portefeuille à  échoué, on supprime toutes les données de 
          * l'utilisateur et on lui renvoie un message d'erreur
          */
         $this->oPDO->query('DELETE FROM bo_user_rib WHERE UID="' . $_SESSION['iUID'] . '"');
         $this->oPDO->query('DELETE FROM bo_user_adresse WHERE UID="' . $_SESSION['iUID'] . '"');
         $this->oPDO->query('DELETE FROM bo_user_info WHERE UID="' . $_SESSION['iUID'] . '"');
         $this->oPDO->query('DELETE FROM bo_user WHERE UID="' . $_SESSION['iUID'] . '"');
         unset($_SESSION['iUID']);
         unset($_SESSION['aUser']);
         unset($_SESSION['aUserInfo']);
         unset($_SESSION['aUserAdresse']);
         unset($_SESSION['aUserRib']);
         unset($_SESSION['aProduct']);
         $aReturn['sPaymentUrl'] = '0';
     }
     return $aReturn;
 }