diff --git a/application/configs/application.ini b/application/configs/application.ini
index 0a89cad..7ce6924 100644
--- a/application/configs/application.ini
+++ b/application/configs/application.ini
@@ -35,6 +35,9 @@ profil.db.sdv1.params.password=bj10sx
profil.db.sdv1.params.dbname=partner
profil.db.sdv1.params.driver_options.MYSQLI_INIT_COMMAND = "SET NAMES utf8"
+profil.report.username=partner144
+profil.report.password=yY2Uhp0mf5
+
[staging : production]
resources.frontController.params.displayExceptions = 1
diff --git a/application/controllers/ReportController.php b/application/controllers/ReportController.php
index 2ba85e9..0357f30 100644
--- a/application/controllers/ReportController.php
+++ b/application/controllers/ReportController.php
@@ -33,7 +33,10 @@ class ReportController extends Zend_Controller_Action
if (intval($siren)>100) {
//Vérifier que le SIREN existe en base
require_once 'Scores/WsScores.php';
- $ws = new WsScores('mricois', 'ju2loh6o');
+ $c = Zend_Registry::get('config');
+ $login = $c->profil->report->username;
+ $password = $c->profil->report->password;
+ $ws = new WsScores($login, $password);
$response = $ws->getIdentiteLight($siren);
if ($response !== false) {
@@ -127,21 +130,17 @@ class ReportController extends Zend_Controller_Action
//Passage à la page suivante
$url = $this->view->url(array(
- 'controller'=>'report',
- 'action'=>'paiement', //deliver
+ 'controller' => 'report',
+ 'action' => 'deliver', //paiement
'id' => $form->getValue('cmdId'),
), null, true);
$this->redirect($url);
-
- //=> Aller à la page de paiement
-
-
} catch (Zend_Db_Adapter_Exception $e) {
$this->view->msg = "Impossible de passer la commande.";
}
}
- } /*else {
+ } else {
//Write the state to the session
$cmdState = 1;
@@ -184,7 +183,7 @@ class ReportController extends Zend_Controller_Action
}
- }*/
+ }
//Test
$session = new Zend_Session_Namespace('Cmd');
@@ -212,10 +211,10 @@ class ReportController extends Zend_Controller_Action
$cmdId = $request->getParam('id');
//Write the state to the session
- $cmdState = 4;
+ $cmdState = 3;
$session = new Zend_Session_Namespace('Cmd');
- /*if ( $session->state > $cmdState || $session->CmdID != $cmdId ) {
+ if ( $session->state > $cmdState || $session->CmdID != $cmdId ) {
$url = $this->view->url(array(
'controller' => 'report',
'action' => 'index',
@@ -224,12 +223,12 @@ class ReportController extends Zend_Controller_Action
$this->redirect($url);
} else {
$session->state = $cmdState;
- }*/
+ }
$this->view->CmdID = $session->CmdID;
+ //$cmdId = '525ffc4501a4d';
+ //$this->view->CmdID = $cmdId;
- $cmdId = '525ffc4501a4d';
- $this->view->CmdID = $cmdId;
$this->view->Siren = $session->CmdSiren;
$this->view->RaisonSociale = $session->CmdRaisonSociale;
$this->view->AdresseL1 = $session->CmdAdresseL1;
@@ -249,15 +248,13 @@ class ReportController extends Zend_Controller_Action
$paybox->setUrlParameters();
$paybox->calculateHMAC();
- //Set PBX_EFFECTUE, PBX_REFUSE, PBX_ANNULE, PBX_ATTENTE, PBX_REPONDRE_A
+ //@todo : Set PBX_EFFECTUE, PBX_REFUSE, PBX_ANNULE, PBX_ATTENTE, PBX_REPONDRE_A
$this->view->PayboxUrl = $paybox->getFormUrl();
$this->view->PayboxValues = $paybox->getFormParameters();
}
-
-
}
/**
@@ -268,75 +265,67 @@ class ReportController extends Zend_Controller_Action
$this->_helper->layout()->disableLayout();
$request = $this->getRequest();
+ $params = $request->getParams();
- //PBX_RETOUR
/*
+ * PBX_RETOUR
+ * mt:M => Montant de la transaction
* eta:E
- * ref:R => Référence commande (précisée dans PBX_CMD)
+ * id:R => Référence commande (précisée dans PBX_CMD)
* auto:A => numéro d'Autorisation (numéro remis par le centre d’autorisation)
* type:P => Type de Paiement retenu (cf. PBX_TYPEPAIEMENT)
- * transaction:S => Numéro de TranSaction Paybox
- * pays:Y => Code paYs de la banque émettrice de la carte. Format : ISO 3166 (alphabétique)
- * sign:K => Signature sur les variables de l’URL. Format : url-encodé
+ * idtrans:S => Numéro de TranSaction Paybox
+ * sign:K => Signature sur les variables de l'URL. Format : url-encodé (toujours en dernier)
*/
- /* Code retour eta:E
-00000
-Opération réussie.
-00001
-La connexion au centre d’autorisation a échoué ou une erreur interne est survenue. Dans ce cas, il est souhaitable de faire une tentative sur le site secondaire : tpeweb1.paybox.com.
-001xx
-Paiement refusé par le centre d’autorisation [voir §12.1 Codes réponses du centre d’autorisation].
-En cas d’autorisation de la transaction par le centre d’autorisation de la banque ou de l’établissement financier privatif, le code erreur “00100” sera en fait remplacé directement par “00000”.
-=> Liste des codes erreurs
+ $verify = new Paybox_Response();
+ $verify->setData($params);
+ if ( $verify->checkData() === false ) {
-00003
-Erreur Paybox. Dans ce cas, il est souhaitable de faire une tentative sur le site secondaire FQDN tpeweb1.paybox.com.
-00004
-Numéro de porteur ou cryptogramme visuel invalide.
-00006
-Accès refusé ou site/rang/identifiant incorrect.
-00008
-Date de fin de validité incorrecte.
-00009
-Erreur de création d’un abonnement.
-00010
-Devise inconnue.
-00011
-Montant incorrect.
-00015
-Paiement déjà effectué.
-00016
-Abonné déjà existant (inscription nouvel abonné). Valeur ‘U’ de la variable PBX_RETOUR.
-00021
-Carte non autorisée.
-00029
-Carte non conforme. Code erreur renvoyé lors de la documentation de la variable « PBX_EMPREINTE ».
-00030
-Temps d’attente > 15 mn par l’internaute/acheteur au niveau de la page de paiements.
-00031
-Réservé
-00032
-Réservé
-00033
-Code pays de l’adresse IP du navigateur de l’acheteur non autorisé.
-00040
-Opération sans authentification 3-DSecure, bloquée par le filtre.
-99999
-Opération en attente de validation par l’émetteur du moyen de paiement.
- */
+ $error = $verify->getError();
+ $this->view->PaiementError = $error->label;
+ } else {
- //Get cmd id
- $eta = $request->getParam('eta');
+ $cmdState = 4;
+ $session = new Zend_Session_Namespace('Cmd');
+ if ( $session->state > $cmdState || $session->CmdID != $cmdId ) {
+ $url = $this->view->url(array(
+ 'controller' => 'report',
+ 'action' => 'index',
+ 'siren' => $session->CmdSiren,
+ ), null, true);
+ $this->redirect($url);
+ } else {
+ $session->state = $cmdState;
+ }
+ $cmdId = $request->getParam('id');
- //Request PAYBOX to validate the payment
- //Valider les bons de commande
-
+ //Vérification que la commande existe
+ $commandM = new Application_Model_Command();
+ $row = $commandM->fetchRow('cmdId="'.$cmdId.'"');
+ if ($row !== null) {
+ //Enregistrement des valeurs de paiement
+ $data = array(
+ 'eta' => $params['eta'],
+ 'auto' => $params['auto'],
+ 'type' => $params['type'],
+ 'idtrans' => $params['idtrans'],
+ );
+ $commandM->update($data, 'id='.$row->id);
+ //Génération de l'url de livraison
+ $deliveryUrl = $this->view->url(array(
+ 'controller'=>'report',
+ 'action'=>'deliver',
+ 'id' => $row->cmdId
+ ));
+ $this->view->deliveryUrl = $deliveryUrl;
+ }
+ }
}
@@ -347,18 +336,13 @@ Opération en attente de validation par l’émetteur du moyen de paiement.
$request = $this->getRequest();
- //Get the response from PAYBOX
-
-
-
$c = Zend_Registry::get('config');
$pathCmd = $c->profil->path->data;
//Commande ID
$cmdId = $request->getParam('id');
- //Write the state to the session
- $cmdState = 3;
+ $cmdState = 5;
$session = new Zend_Session_Namespace('Cmd');
if ( $session->state > $cmdState || $session->CmdID != $cmdId ) {
diff --git a/application/views/scripts/report/retour.phtml b/application/views/scripts/report/retour.phtml
index b3d9bbc..a2c064c 100644
--- a/application/views/scripts/report/retour.phtml
+++ b/application/views/scripts/report/retour.phtml
@@ -1 +1,40 @@
-
+
+
+
+
+
+Kompass - Achat Bilan Financier
+
+
+
+
+
+
+
+
+
+
+ PaiementError ) {?>
+
+
Erreur ! =$this->PaiementError?>
+
+
+
+
+
+
+
+
+
+
+
+
+ inlineScript(); ?>
+
+
\ No newline at end of file
diff --git a/library/Paybox/Response.php b/library/Paybox/Response.php
index 9ddeea1..9120fa0 100644
--- a/library/Paybox/Response.php
+++ b/library/Paybox/Response.php
@@ -1,7 +1,176 @@
setSign($values['sign']);
+ unset($values['sign']);
+
+ //Concat datas with &
+ $this->data = '';
+ $i = 0;
+ $max = count($values);
+ foreach( $values as $key => $val ) {
+ $this->data.= $key."=".urlencode($val);
+ $i++;
+ if ( $i<$max ) {
+ $this->data.= '&';
+ }
+ }
+ }
+
+ /**
+ * Défini la signature
+ * @param string $value
+ */
+ protected function setSign($value)
+ {
+ $this->sign = base64_decode(urldecode($value));
+ }
+
+ /**
+ *
+ */
+ protected function isDataSign()
+ {
+ $fp = fopen(__DIR__ . '/pubkey.pem', 'r');
+ $cert = fread($fp, 8192);
+ fclose($fp);
+
+ $pubkeyid = openssl_get_publickey($cert);
+
+ // state whether signature is okay or not
+ $ok = openssl_verify($this->data, $this->sign, $pubkeyid);
+
+ // free the key from memory
+ openssl_free_key($pubkeyid);
+
+ if ($ok == 1) {
+ return true;
+ } elseif ($ok == 0) {
+ return false;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Vérifie le code retour
+ * @param string $code
+ * @return boolean
+ */
+ protected function checkEta($code)
+ {
+ if ( intval($code) == 0 ) {
+ return true;
+ }
+
+ switch($code) {
+ /*
+ 00000
+ Opération réussie.
+ 00001
+ La connexion au centre d’autorisation a échoué ou une erreur interne est survenue. Dans ce cas, il est souhaitable de faire une tentative sur le site secondaire : tpeweb1.paybox.com.
+ 001xx
+ Paiement refusé par le centre d’autorisation [voir §12.1 Codes réponses du centre d’autorisation].
+ En cas d’autorisation de la transaction par le centre d’autorisation de la banque ou de l’établissement financier privatif, le code erreur “00100” sera en fait remplacé directement par “00000”.
+ => Liste des codes erreurs
+
+ 00003
+ Erreur Paybox. Dans ce cas, il est souhaitable de faire une tentative sur le site secondaire FQDN tpeweb1.paybox.com.
+ 00004
+ Numéro de porteur ou cryptogramme visuel invalide.
+ 00006
+ Accès refusé ou site/rang/identifiant incorrect.
+ 00008
+ Date de fin de validité incorrecte.
+ 00009
+ Erreur de création d’un abonnement.
+ 00010
+ Devise inconnue.
+ 00011
+ Montant incorrect.
+ 00015
+ Paiement déjà effectué.
+ 00016
+ Abonné déjà existant (inscription nouvel abonné). Valeur ‘U’ de la variable PBX_RETOUR.
+ 00021
+ Carte non autorisée.
+ 00029
+ Carte non conforme. Code erreur renvoyé lors de la documentation de la variable « PBX_EMPREINTE ».
+ 00030
+ Temps d’attente > 15 mn par l’internaute/acheteur au niveau de la page de paiements.
+ 00031
+ Réservé
+ 00032
+ Réservé
+ 00033
+ Code pays de l’adresse IP du navigateur de l’acheteur non autorisé.
+ 00040
+ Opération sans authentification 3-DSecure, bloquée par le filtre.
+ 99999
+ Opération en attente de validation par l’émetteur du moyen de paiement.
+ */
+ default:
+ $this->errCode = 0;
+ $this->errLabel = 'Echec';
+ }
+ return false;
+ }
+
+
+ /**
+ *
+ * @return boolean
+ */
+ public function checkData()
+ {
+ //Vérification de la signature
+ if ( $this->isDataSign() === false ) {
+ return false;
+ }
+
+ //Vérifier le retour des données
+ $vars = array('eta');
+ foreach ( $vars as $var ) {
+ if ( method_exists($this, 'check'.ucfirst($var)) ) {
+ if ( $this->{'check'.ucfirst($var)}() === false ) {
+ return false;
+ }
+ }
+ }
+
+ //eta:E;id:R;type:P;pays:Y;mt:M;auto:A;idtrans:S;sign:K
+
+ }
+
+ /**
+ * Get error message
+ * @return stdClass
+ */
+ public function getError()
+ {
+ $return = new stdClass();
+ $return->code = $this->errCode;
+ $return->label = $this->errLabel;
+ return $return;
+ }
}
\ No newline at end of file
diff --git a/library/Paybox/System.php b/library/Paybox/System.php
index 771540a..7da5b81 100644
--- a/library/Paybox/System.php
+++ b/library/Paybox/System.php
@@ -99,9 +99,19 @@ class Paybox_System extends Paybox_Config
/**
* Configuration de la réponse
* Chaine : concaténé par ;
+ * mt:M => Montant de la transaction
+ * eta:E
+ * Liste des erreurs possible
+ *
+ * id:R => Référence commande (précisée dans PBX_CMD)
+ * auto:A => numéro d'Autorisation (numéro remis par le centre d’autorisation)
+ * type:P => Type de Paiement retenu (cf. PBX_TYPEPAIEMENT)
+ * idtrans:S => Numéro de TranSaction Paybox
+ * pays:Y => Code paYs de la banque émettrice de la carte. Format : ISO 3166 (alphabétique)
+ * sign:K => Signature sur les variables de l'URL. Format : url-encodé (toujours en dernier)
* @var string
*/
- protected $PBX_RETOUR;
+ protected $PBX_RETOUR = 'eta:E;id:R;type:P;mt:M;auto:A;idtrans:S;sign:K';
/**
* Langue de la page de paiement
diff --git a/library/Paybox/pubkey.pem b/library/Paybox/pubkey.pem
new file mode 100644
index 0000000..310d1eb
--- /dev/null
+++ b/library/Paybox/pubkey.pem
@@ -0,0 +1,6 @@
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe+hkicNP7ROHUssGNtHwiT2Ew
+HFrSk/qwrcq8v5metRtTTFPE/nmzSkRnTs3GMpi57rBdxBBJW5W9cpNyGUh0jNXc
+VrOSClpD5Ri2hER/GcNrxVRP7RlWOqB1C03q4QYmwjHZ+zlM4OUhCCAtSWflB4wC
+Ka1g88CjFwRw/PB9kwIDAQAB
+-----END PUBLIC KEY-----
diff --git a/scripts/build/_sql/command.sql b/scripts/build/_sql/command.sql
new file mode 100644
index 0000000..864bf23
--- /dev/null
+++ b/scripts/build/_sql/command.sql
@@ -0,0 +1,20 @@
+CREATE TABLE IF NOT EXISTS `command` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `cmdId` varchar(15) NOT NULL COMMENT 'Identifiant unique de commande',
+ `siren` varchar(9) NOT NULL COMMENT 'Siren de l''entreprise',
+ `email` varchar(50) DEFAULT NULL COMMENT 'Email de la personne',
+ `rs` varchar(200) DEFAULT NULL COMMENT 'Raison sociale de la personne',
+ `nom` varchar(100) DEFAULT NULL COMMENT 'Nom de la personne',
+ `prenom` varchar(100) DEFAULT NULL COMMENT 'Prenom de la personne',
+ `adresse` varchar(100) DEFAULT NULL COMMENT 'Adresse de la personne',
+ `cp` varchar(5) DEFAULT NULL COMMENT 'CP de la personne',
+ `ville` varchar(100) DEFAULT NULL COMMENT 'Ville de la personne',
+ `tel` varchar(50) DEFAULT NULL COMMENT 'Téléphone de la personne',
+ `mobile` varchar(50) DEFAULT NULL COMMENT 'Téléphone portable de la personne',
+ `eta` int(5) DEFAULT NULL COMMENT 'Code réponse de la transaction',
+ `auto` varchar(100) NOT NULL COMMENT 'Numéro d''autorisation remis par le centre d’autorisation',
+ `type` varchar(100) NOT NULL COMMENT 'Type de paiement retenu',
+ `idtrans` varchar(100) NOT NULL COMMENT 'Numéro de transaction Paybox',
+ `dateInsert` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date d''insertion de la commande',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Listing des commandes' AUTO_INCREMENT=4 ;
\ No newline at end of file
diff --git a/scripts/build/local/application.ini b/scripts/build/local/application.ini
new file mode 100644
index 0000000..7ce6924
--- /dev/null
+++ b/scripts/build/local/application.ini
@@ -0,0 +1,51 @@
+[production]
+phpSettings.date.timezone = "Europe/Paris"
+phpSettings.display_startup_errors = 0
+phpSettings.display_errors = 0
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+appnamespace = "Application"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+resources.frontController.params.displayExceptions = 0
+resources.layout.layout = "layout"
+resources.layout.layoutPath = APPLICATION_PATH "/views"
+resources.view.basePath = APPLICATION_PATH "/views"
+autoloaderNamespaces[] = "Application_"
+autoloaderNamespaces[] = "Scores_"
+autoloaderNamespaces[] = "Paybox_"
+
+; Scores configuration
+profil.server.name = local
+profil.webservice.location = sdsrvdev01
+profil.mail.method = smtp
+profil.mail.smtp_host = smtp.free.fr
+profil.mail.email.support = supportdev@scores-decisions.com
+profil.mail.email.supportdev = supportdev@scores-decisions.com
+profil.mail.email.contact = supportdev@scores-decisions.com
+profil.mail.email.production = supportdev@scores-decisions.com
+profil.path.cache = APPLICATION_PATH "/../data/cache"
+profil.path.files = APPLICATION_PATH "/../data/files"
+profil.path.pages = APPLICATION_PATH "/../data/pages"
+profil.path.data = "c:\Users\mricois\www\data\partner"
+profil.wkhtmltopdf.path = "c:\Users\mricois\www\data\wkhtml\windows\wkhtmltopdf.exe"
+profil.db.sdv1.adapter=mysqli
+profil.db.sdv1.params.host=127.0.0.1
+profil.db.sdv1.params.username=root
+profil.db.sdv1.params.password=bj10sx
+profil.db.sdv1.params.dbname=partner
+profil.db.sdv1.params.driver_options.MYSQLI_INIT_COMMAND = "SET NAMES utf8"
+
+profil.report.username=partner144
+profil.report.password=yY2Uhp0mf5
+
+[staging : production]
+resources.frontController.params.displayExceptions = 1
+
+[development : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+resources.frontController.params.displayExceptions = 1
+
+[testing : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
\ No newline at end of file
diff --git a/scripts/build/sd-46528/application.ini b/scripts/build/sd-46528/application.ini
new file mode 100644
index 0000000..b43792e
--- /dev/null
+++ b/scripts/build/sd-46528/application.ini
@@ -0,0 +1,51 @@
+[production]
+phpSettings.date.timezone = "Europe/Paris"
+phpSettings.display_startup_errors = 0
+phpSettings.display_errors = 0
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+appnamespace = "Application"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+resources.frontController.params.displayExceptions = 0
+resources.layout.layout = "layout"
+resources.layout.layoutPath = APPLICATION_PATH "/views"
+resources.view.basePath = APPLICATION_PATH "/views"
+autoloaderNamespaces[] = "Application_"
+autoloaderNamespaces[] = "Scores_"
+autoloaderNamespaces[] = "Paybox_"
+
+; Scores configuration
+profil.server.name = local
+profil.webservice.location = sdsrvdev01
+profil.mail.method = smtp
+profil.mail.smtp_host = smtp.free.fr
+profil.mail.email.support = supportdev@scores-decisions.com
+profil.mail.email.supportdev = supportdev@scores-decisions.com
+profil.mail.email.contact = supportdev@scores-decisions.com
+profil.mail.email.production = supportdev@scores-decisions.com
+profil.path.cache = APPLICATION_PATH "/../data/cache"
+profil.path.files = APPLICATION_PATH "/../data/files"
+profil.path.pages = APPLICATION_PATH "/../data/pages"
+profil.path.data = "c:\Users\mricois\www\data\partner"
+profil.wkhtmltopdf.path = "c:\Users\mricois\www\data\wkhtml\windows\wkhtmltopdf.exe"
+profil.db.sdv1.adapter=mysqli
+profil.db.sdv1.params.host=localhost
+profil.db.sdv1.params.username=extranet
+profil.db.sdv1.params.password=bGPZ9qYZQFHMYCnJ
+profil.db.sdv1.params.dbname=partner
+profil.db.sdv1.params.driver_options.MYSQLI_INIT_COMMAND = "SET NAMES utf8"
+
+profil.report.username=partner144
+profil.report.password=yY2Uhp0mf5
+
+[staging : production]
+resources.frontController.params.displayExceptions = 1
+
+[development : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+resources.frontController.params.displayExceptions = 1
+
+[testing : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
\ No newline at end of file