monetico-paiement/Phase2Back.php
2024-10-22 12:10:19 +02:00

198 lines
9.0 KiB
PHP

<?php
/*****************************************************************************
*
* "Open source" kit for Monetico Paiement(TM).
* Process Monetico Paiement. Sample RFC2104 compliant with PHP4 skeleton.
*
* File "Phase2Back.php":
*
* Author : Euro-Information/e-Commerce
* Version : 4.0
* Date : 05/06/2014
*
* Copyright: (c) 2014 Euro-Information. All rights reserved.
* License : see attached document "Licence.txt".
*
*****************************************************************************/
header("Pragma: no-cache");
header("Content-type: text/plain");
// =============================================================================================================================================================
// SECTION INCLUDE : Cette section ne doit pas être modifié.
// Attention !! MoneticoPaiement_Config contient la clé, vous devez protéger ce fichier avec tous les mécanismes disponibles dans votre environnement de développement.
// Vous pouvez pour l'instance mettre ce fichier dans un autre répertoire et/ou changer son nom. Dans ce cas, n'oubliez pas d'adapter le chemin d'inclusion ci-dessous.
//
// INCLUDE SECTION : This section must not be modified
// Warning !! MoneticoPaiement_Config contains the key, you have to protect this file with all the mechanism available in your development environment.
// You may for instance put this file in another directory and/or change its name. If so, don't forget to adapt the include path below.
// =============================================================================================================================================================
require_once("MoneticoPaiement_Config.php");
// --- PHP implementation of RFC2104 hmac sha1 ---
require_once("MoneticoPaiement_Ept.inc.php");
// =============================================================================================================================================================
// FIN SECTION INCLUDE
//
// END INCLUDE SECTION
// =============================================================================================================================================================
// =============================================================================================================================================================
// SECTION CODE : Cette section ne doit pas être modifiée
//
// CODE SECTION : This section must not be modified
// =============================================================================================================================================================
// Begin Main : Retrieve Variables posted by Monetico Paiement Server
$MoneticoPaiement_bruteVars = getMethode();
// TPE init variables
$oEpt = new MoneticoPaiement_Ept();
$oHmac = new MoneticoPaiement_Hmac($oEpt);
function computeHmacSource($source, $oEpt)
{
$anomalies = null;
if( array_key_exists('TPE', $source) )
$anomalies = $source["TPE"] != $oEpt->sNumero ? ":TPE" : null;
if( array_key_exists('version', $source) )
$anomalies .= $source["version"] == $oEpt->sVersion ? ":version" : null;
// sole field to exclude from the MAC computation
if( array_key_exists('MAC', $source) )
unset($source['MAC']);
else
$anomalies .= ":MAC";
if($anomalies != null)
return "anomaly_detected" . $anomalies;
// order by key is mandatory
ksort($source);
// map entries to "key=value" to match the target format
array_walk($source, function(&$a, $b) { $a = "$b=$a"; });
// join all entries using asterisk as separator
return implode( '*', $source);
}
// Message Authentication
$MAC_source = computeHmacSource($MoneticoPaiement_bruteVars, $oEpt);
$computed_MAC = $oHmac->computeHmac($MAC_source);
$congruent_MAC = array_key_exists('MAC', $MoneticoPaiement_bruteVars) &&
$computed_MAC == strtolower($MoneticoPaiement_bruteVars['MAC']);
if ($congruent_MAC)
{
// =============================================================================================================================================================
// FIN SECTION CODE
//
// END CODE SECTION
// =============================================================================================================================================================
// =============================================================================================================================================================
// SECTION IMPLEMENTATION : Vous devez modifier ce code afin d'y mettre votre propre logique métier
//
// IMPLEMENTATION SECTION : You must adapt this code with your own application logic.
// =============================================================================================================================================================
switch($MoneticoPaiement_bruteVars['code-retour']) {
case "Annulation" :
// Paiement refusé
// Insérez votre code ici (envoi d'email / mise à jour base de données)
// Attention : une autorisation peut toujours être délivrée pour ce paiement
//
// Payment has been refused
// put your code here (email sending / Database update)
// Attention : an authorization may still be delivered for this payment
break;
case "payetest":
// Paiement accepté sur le serveur de test
// Insérez votre code ici (envoi d'email / mise à jour base de données)
//
// Payment has been accepted on the test server
// put your code here (email sending / Database update)
break;
case "paiement":
// Paiement accepté sur le serveur de production
// Insérez votre code ici (envoi d'email / mise à jour base de données)
//
// Payment has been accepted on the productive server
// put your code here (email sending / Database update)
break;
/*** SEULEMENT POUR LES PAIEMENTS FRACTIONNES ***/
/*** ONLY FOR MULTIPART PAYMENT ***/
case "paiement_pf2":
case "paiement_pf3":
case "paiement_pf4":
// Paiement accepté sur le serveur de production pour l'échéance #N
// Le code de retour est du type paiement_pf[#N]
// Insérez votre code ici (envoi d'email / mise à jour base de données)
// Le montant du paiement pour cette échéance se trouve dans $MoneticoPaiement_bruteVars['montantech']
//
// Payment has been accepted on the productive server for the part #N
// return code is like paiement_pf[#N]
// put your code here (email sending / Database update)
// You have the amount of the payment part in $MoneticoPaiement_bruteVars['montantech']
break;
case "Annulation_pf2":
case "Annulation_pf3":
case "Annulation_pf4":
// Paiement refusé sur le serveur de production pour l'échéance #N
// Le code de retour est du type Annulation_pf[#N]
// Insérez votre code ici (envoi d'email / mise à jour base de données)
// Le montant du paiement pour cette échéance se trouve dans $MoneticoPaiement_bruteVars['montantech']
//
// Payment has been refused on the productive server for the part #N
// return code is like Annulation_pf[#N]
// put your code here (email sending / Database update)
// You have the amount of the payment part in $MoneticoPaiement_bruteVars['montantech']
break;
}
// =============================================================================================================================================================
// FIN SECTION IMPLEMENTATION
//
// END IMPLEMENTATION SECTION
// =============================================================================================================================================================
// =============================================================================================================================================================
// SECTION CODE 2 : Cette section ne doit pas être modifiée
//
// CODE SECTION 2 : This section must not be modified
// =============================================================================================================================================================
$receipt = MONETICOPAIEMENT_PHASE2BACK_MACOK;
}
else
{
// traitement en cas de HMAC incorrect
// your code if the HMAC doesn't match
$receipt = MONETICOPAIEMENT_PHASE2BACK_MACNOTOK.$computed_MAC.
"\n$MAC_source";
;
}
// =============================================================================================================================================================
// FIN SECTION CODE 2
//
// END CODE SECTION 2
// =============================================================================================================================================================
//-----------------------------------------------------------------------------
// Send receipt to Monetico Paiement server
//-----------------------------------------------------------------------------
printf (MONETICOPAIEMENT_PHASE2BACK_RECEIPT, $receipt);
// Copyright (c) 2014 Euro-Information
// All rights reserved. ---
?>