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