Add Eboutic user guides and reference examples
@ -0,0 +1,124 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// --------------- VARIABLES A MODIFIER ---------------
|
||||||
|
|
||||||
|
// Ennonciation de variables
|
||||||
|
$pbx_site = '1520411'; //variable de test 1999888
|
||||||
|
$pbx_rang = '001'; //variable de test 32
|
||||||
|
$pbx_identifiant = '650995411'; //variable de test 3
|
||||||
|
$pbx_cmd = 'CMD_1'; //variable de test cmd_test1
|
||||||
|
$pbx_porteur = 'skia@git.an'; //variable de test test@test.fr
|
||||||
|
$pbx_total = '510'; //variable de test 100
|
||||||
|
// Suppression des points ou virgules dans le montant
|
||||||
|
$pbx_total = str_replace(",", "", $pbx_total);
|
||||||
|
$pbx_total = str_replace(".", "", $pbx_total);
|
||||||
|
|
||||||
|
// Paramétrage des urls de redirection après paiement
|
||||||
|
$pbx_effectue = 'http://www.votre-site.extention/page-de-confirmation';
|
||||||
|
$pbx_annule = 'http://www.votre-site.extention/page-d-annulation';
|
||||||
|
$pbx_refuse = 'http://www.votre-site.extention/page-de-refus';
|
||||||
|
// Paramétrage de l'url de retour back office site
|
||||||
|
$pbx_repondre_a = 'http://www.votre-site.extention/page-de-back-office-site';
|
||||||
|
// Paramétrage du retour back office site
|
||||||
|
$pbx_retour = 'Amount:M;BasketID:R;Auto:A;Error:E;Sig:K';
|
||||||
|
|
||||||
|
// Connection à la base de données
|
||||||
|
// mysql_connect...
|
||||||
|
// On récupère la clé secrète HMAC (stockée dans une base de données par exemple) et que l’on renseigne dans la variable $keyTest;
|
||||||
|
//$keyTest = '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF';
|
||||||
|
$keyTest = '2d21b1f0d5b64bce056b342b5259db312dfc0176dcafb33eb804b6aaaa3acc07320742954ef3b052f36942b09f86ccb9d24c8814586c1a0d24319fd8985c19e5';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// --------------- TESTS DE DISPONIBILITE DES SERVEURS ---------------
|
||||||
|
|
||||||
|
/*
|
||||||
|
$serveurs = array('tpeweb.paybox.com', //serveur primaire
|
||||||
|
'tpeweb1.paybox.com'); //serveur secondaire
|
||||||
|
$serveurOK = "";
|
||||||
|
//phpinfo(); <== voir paybox
|
||||||
|
foreach($serveurs as $serveur){
|
||||||
|
$doc = new DOMDocument();
|
||||||
|
$doc->loadHTMLFile('https://'.$serveur.'/load.html');
|
||||||
|
$server_status = "";
|
||||||
|
$element = $doc->getElementById('server_status');
|
||||||
|
if($element){
|
||||||
|
$server_status = $element->textContent;}
|
||||||
|
if($server_status == "OK"){
|
||||||
|
// Le serveur est prêt et les services opérationnels
|
||||||
|
$serveurOK = $serveur;
|
||||||
|
break;}
|
||||||
|
// else : La machine est disponible mais les services ne le sont pas.
|
||||||
|
}
|
||||||
|
//curl_close($ch); <== voir paybox
|
||||||
|
if(!$serveurOK){
|
||||||
|
die("Erreur : Aucun serveur n'a été trouvé");}
|
||||||
|
// Activation de l'univers de préproduction
|
||||||
|
//$serveurOK = 'preprod-tpeweb.paybox.com';
|
||||||
|
|
||||||
|
//Création de l'url cgi paybox
|
||||||
|
$serveurOK = 'https://'.$serveurOK.'/cgi/MYchoix_pagepaiement.cgi';
|
||||||
|
// echo $serveurOK;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// --------------- TRAITEMENT DES VARIABLES ---------------
|
||||||
|
|
||||||
|
// On récupère la date au format ISO-8601
|
||||||
|
$dateTime = date("c");
|
||||||
|
$dateTime = "2016-07-26T15:38:11+02:00";
|
||||||
|
|
||||||
|
// On crée la chaîne à hacher sans URLencodage
|
||||||
|
$msg = "PBX_SITE=".$pbx_site.
|
||||||
|
"&PBX_RANG=".$pbx_rang.
|
||||||
|
"&PBX_IDENTIFIANT=".$pbx_identifiant.
|
||||||
|
"&PBX_TOTAL=".$pbx_total.
|
||||||
|
"&PBX_DEVISE=978".
|
||||||
|
"&PBX_CMD=".$pbx_cmd.
|
||||||
|
"&PBX_PORTEUR=".$pbx_porteur.
|
||||||
|
// "&PBX_REPONDRE_A=".$pbx_repondre_a.
|
||||||
|
"&PBX_RETOUR=".$pbx_retour.
|
||||||
|
// "&PBX_EFFECTUE=".$pbx_effectue.
|
||||||
|
// "&PBX_ANNULE=".$pbx_annule.
|
||||||
|
// "&PBX_REFUSE=".$pbx_refuse.
|
||||||
|
"&PBX_HASH=SHA512".
|
||||||
|
"&PBX_TIME=".$dateTime;
|
||||||
|
// echo $msg;
|
||||||
|
|
||||||
|
// Si la clé est en ASCII, On la transforme en binaire
|
||||||
|
$binKey = pack("H*", $keyTest);
|
||||||
|
|
||||||
|
// On calcule l’empreinte (à renseigner dans le paramètre PBX_HMAC) grâce à la fonction hash_hmac et //
|
||||||
|
// la clé binaire
|
||||||
|
// On envoi via la variable PBX_HASH l'algorithme de hachage qui a été utilisé (SHA512 dans ce cas)
|
||||||
|
// Pour afficher la liste des algorithmes disponibles sur votre environnement, décommentez la ligne //
|
||||||
|
// suivante
|
||||||
|
// print_r(hash_algos());
|
||||||
|
echo $msg, "\n\n";
|
||||||
|
var_dump($binKey);
|
||||||
|
$hmac = strtoupper(hash_hmac('sha512', $msg, $binKey));
|
||||||
|
|
||||||
|
// La chaîne sera envoyée en majuscule, d'où l'utilisation de strtoupper()
|
||||||
|
// On crée le formulaire à envoyer
|
||||||
|
// ATTENTION : l'ordre des champs est extrêmement important, il doit
|
||||||
|
// correspondre exactement à l'ordre des champs dans la chaîne hachée
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!------------------ ENVOI DES INFORMATIONS A PAYBOX (Formulaire) ------------------>
|
||||||
|
<form method="POST" action="<?php echo $serveurOK; ?>">
|
||||||
|
<input type="hidden" name="PBX_SITE" value="<?php echo $pbx_site; ?>">
|
||||||
|
<input type="hidden" name="PBX_RANG" value="<?php echo $pbx_rang; ?>">
|
||||||
|
<input type="hidden" name="PBX_IDENTIFIANT" value="<?php echo $pbx_identifiant; ?>">
|
||||||
|
<input type="hidden" name="PBX_TOTAL" value="<?php echo $pbx_total; ?>">
|
||||||
|
<input type="hidden" name="PBX_DEVISE" value="978">
|
||||||
|
<input type="hidden" name="PBX_CMD" value="<?php echo $pbx_cmd; ?>">
|
||||||
|
<input type="hidden" name="PBX_PORTEUR" value="<?php echo $pbx_porteur; ?>">
|
||||||
|
<input type="hidden" name="PBX_RETOUR" value="<?php echo $pbx_retour; ?>">
|
||||||
|
<input type="hidden" name="PBX_HASH" value="SHA512">
|
||||||
|
<input type="hidden" name="PBX_TIME" value="<?php echo $dateTime; ?>">
|
||||||
|
<input type="hidden" name="PBX_HMAC" value="<?php echo $hmac; ?>">
|
||||||
|
<input type="submit" value="Envoyer">
|
||||||
|
</form>
|
@ -0,0 +1,63 @@
|
|||||||
|
package signver;
|
||||||
|
|
||||||
|
import java.security.interfaces.RSAPublicKey;
|
||||||
|
import java.security.Signature;
|
||||||
|
import java.security.KeyFactory;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import org.apache.commons.codec.net.URLCodec;
|
||||||
|
|
||||||
|
public class SignVer {
|
||||||
|
|
||||||
|
// verification signature RSA des donnees avec cle publique
|
||||||
|
|
||||||
|
private static boolean verify( byte[] dataBytes, byte[] sigBytes, String sigAlg, RSAPublicKey pubKey) throws Exception
|
||||||
|
{
|
||||||
|
Signature sig = Signature.getInstance(sigAlg);
|
||||||
|
sig.initVerify(pubKey);
|
||||||
|
sig.update(dataBytes);
|
||||||
|
return sig.verify(sigBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// chargement de la cle AU FORMAT der :
|
||||||
|
// openssl rsa -inform PEM -in pbx_pubkey.pem -outform DER -pubin -out /tmp/pubkey.der
|
||||||
|
|
||||||
|
private static RSAPublicKey getPubKey(String pubKeyFile) throws Exception
|
||||||
|
{
|
||||||
|
FileInputStream fis = new FileInputStream(pubKeyFile);
|
||||||
|
DataInputStream dis = new DataInputStream(fis);
|
||||||
|
byte[] pubKeyBytes = new byte[fis.available()];
|
||||||
|
dis.readFully(pubKeyBytes);
|
||||||
|
fis.close();
|
||||||
|
dis.close();
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||||
|
// extraction cle
|
||||||
|
X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubKeyBytes);
|
||||||
|
RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(pubSpec);
|
||||||
|
return pubKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
// exemple de verification de la signature
|
||||||
|
|
||||||
|
public static void main(String[] unused) throws Exception {
|
||||||
|
|
||||||
|
String sData = ""; // donnees signees URL encodees
|
||||||
|
String sSig = ""; // signature Base64 et URL encodee
|
||||||
|
|
||||||
|
// decodage ...
|
||||||
|
byte[] dataBytes = URLCodec.decodeUrl(sData.getBytes());
|
||||||
|
byte[] sigBytes = Base64.decodeBase64( URLCodec.decodeUrl(sSig.getBytes()));
|
||||||
|
|
||||||
|
// lecture de la cle publique
|
||||||
|
RSAPublicKey pubK = getPubKey("/tmp/pubkey.der");
|
||||||
|
|
||||||
|
// verification signature
|
||||||
|
boolean result = verify(dataBytes, sigBytes, "SHA1withRSA", pubK);
|
||||||
|
|
||||||
|
// affichage resultat
|
||||||
|
System.out.println("Resultat de la verification de signature : " + result);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIICXAIBAAKBgQCvDYKaLH2xz4goZYXZWoHo6wyMb24A1iF7s70tB/g3XthEVS+/
|
||||||
|
Wov+ZGqNTMLc0L+HZAJjcEc9h8Br5jPLR4VhaoKi+rezDxTQweaC24ydJWFKRhyX
|
||||||
|
Bhm2Wfnhppgzv9EqZKOrFaTlLQHu0F+KWEd7LngP4xcW9qjt19MfEmk0swIDAQAB
|
||||||
|
AoGABqXztNlFuNAR8r7QU43tayQqKNc+jUeUo/cSkzg/RBMVEZtOoezVbkbwCQfG
|
||||||
|
Ss6ex4yTzqT//6U9OJvYkbrYpOdq2BinuRv9n/NlKhCJ/Ym9s/DS8D6xdEX/R5lg
|
||||||
|
mIURQYl9uHS6VVnLq79j38BsjIhDAvjuSzZGZUa4v0iBTHkCQQDWp4iPqv2jUzBW
|
||||||
|
UgDP6C+QFqLgYKuYxF+yyBCXO0XzaHaEJUBuxuvTU/kuIifk3lhXnV5r0sXJd2Ax
|
||||||
|
aQkoJXc1AkEA0MU+4SSYPYADQm1gcXXuR4Kjb0/QhIGRiotxVu2nLGS7aULe1D8p
|
||||||
|
XoLpSQCv3j5amtXVx1yTWuaEYZqHVeQxRwJAdOprh1UrMXpuKZYgux1MSr8JmA0P
|
||||||
|
afYL6eTupHC0eQ+8/d0Ma0oNyN1EK8yOzioNFCuy8ierc0CCNGdxhVxiwQJAP/cv
|
||||||
|
fOwpeS5v0TqSAjGQAHkWelSKHw9T+I8g+vF19zQl9+p1O7LeigayU5vSRtX0DNzX
|
||||||
|
022Z+JAIn58pODfioQJBALQGN2kFCSk935VnMUJ4X5qFCKiXBgebuARUSw6tDEpY
|
||||||
|
gFdqyJE4WQ4uWVz0D9M27lCa8wj7pYrOhB/UiMKbuqY=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
@ -0,0 +1,6 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvDYKaLH2xz4goZYXZWoHo6wyM
|
||||||
|
b24A1iF7s70tB/g3XthEVS+/Wov+ZGqNTMLc0L+HZAJjcEc9h8Br5jPLR4VhaoKi
|
||||||
|
+rezDxTQweaC24ydJWFKRhyXBhm2Wfnhppgzv9EqZKOrFaTlLQHu0F+KWEd7LngP
|
||||||
|
4xcW9qjt19MfEmk0swIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
$montant=$_GET['montant'];
|
||||||
|
$ref_com=$_GET['ref'];
|
||||||
|
$auto=$_GET['auto'];
|
||||||
|
$trans=$_GET['trans'];
|
||||||
|
print ("<center><b><h2>Votre transaction a été acceptée</h2></center></b><br>");
|
||||||
|
print ("<br><b>MONTANT : </b>$montant\n");
|
||||||
|
print ("<br><b>REFERENCE : </b>$ref_com\n");
|
||||||
|
print ("<br><b>AUTO : </b>$auto\n");
|
||||||
|
print ("<br><b>TRANS : </b>$trans\n");
|
||||||
|
?>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
$montant=$_GET['montant'];
|
||||||
|
$ref_com=$_GET['ref'];
|
||||||
|
#$auto=$_GET['auto'];
|
||||||
|
$trans=$_GET['trans'];
|
||||||
|
print ("<center><b><h2>Votre transaction a été annulée</h2></center></b><br>");
|
||||||
|
print ("<br><b>MONTANT : </b>$montant\n");
|
||||||
|
print ("<br><b>REFERENCE : </b>$ref_com\n");
|
||||||
|
#print ("<br><b>AUTO : </b>$auto\n");
|
||||||
|
print ("<br><b>TRANS : </b>$trans\n");
|
||||||
|
?>
|
@ -0,0 +1,79 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<title>Exemple_mail_ticket_client</title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
<!--
|
||||||
|
/* Font Definitions */
|
||||||
|
@font-face
|
||||||
|
{font-family:"Bernard MT Condensed";
|
||||||
|
panose-1:0 0 0 0 0 0 0 0 0 0;}
|
||||||
|
/* Style Definitions */
|
||||||
|
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||||||
|
{margin:0cm;
|
||||||
|
margin-bottom:.0001pt;
|
||||||
|
font-size:12.0pt;
|
||||||
|
font-family:"Times New Roman";}
|
||||||
|
a:link, span.MsoHyperlink
|
||||||
|
{color:blue;
|
||||||
|
text-decoration:underline;}
|
||||||
|
a:visited, span.MsoHyperlinkFollowed
|
||||||
|
{color:purple;
|
||||||
|
text-decoration:underline;}
|
||||||
|
p
|
||||||
|
{font-size:12.0pt;
|
||||||
|
font-family:"Times New Roman";}
|
||||||
|
p.style1, li.style1, div.style1
|
||||||
|
{margin-right:0cm;
|
||||||
|
margin-left:0cm;
|
||||||
|
font-size:9.0pt;
|
||||||
|
font-family:"Bernard MT Condensed";}
|
||||||
|
@page Section1
|
||||||
|
{size:595.3pt 841.9pt;
|
||||||
|
margin:70.85pt 70.85pt 70.85pt 70.85pt;}
|
||||||
|
div.Section1
|
||||||
|
{page:Section1;}
|
||||||
|
-->
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body lang=FR link=blue vlink=purple>
|
||||||
|
|
||||||
|
<div class=Section1>
|
||||||
|
|
||||||
|
<p class=style1 align=center style='text-align:center'><b><i><span
|
||||||
|
style='font-size:10.0pt;font-family:Arial;color:#333399'>Merci de votre
|
||||||
|
commande</span></i></b></p>
|
||||||
|
|
||||||
|
<p class=style1 align=center style='text-align:center'><b><i><span
|
||||||
|
style='font-size:10.0pt;font-family:Arial;color:#333399'>Celle-ci sera traitée
|
||||||
|
dans les meilleurs délais</span></i></b></p>
|
||||||
|
|
||||||
|
<p class=style1 align=center style='text-align:center'><b><i><span
|
||||||
|
style='font-size:10.0pt;font-family:Arial;color:#333399'>Cordialement,</span></i></b></p>
|
||||||
|
|
||||||
|
<p align=center style='text-align:center'><img width=200 height=50
|
||||||
|
src="Boutique.fr/Images/votre_logo.jpg" alt="Votre Enseigne"></p>
|
||||||
|
|
||||||
|
<p align=center style='margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;
|
||||||
|
margin-left:0cm;text-align:center'><b><span style='font-size:8.0pt;font-family:
|
||||||
|
Arial;color:#FF9900'>Gardez les références de votre commande et n'hésitez pas à
|
||||||
|
nous contacter si vous avez des questions :</span></b></p>
|
||||||
|
|
||||||
|
<p align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center'><b><span
|
||||||
|
style='font-size:8.0pt;font-family:Arial;color:#FF9900'>tel : 00 00 00 00 00</span></b></p>
|
||||||
|
|
||||||
|
<p align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center'><b><span
|
||||||
|
style='font-size:8.0pt;font-family:Arial;color:#FF9900'>courriel : <a
|
||||||
|
href="mailto:contact@maboutique.fr"><span style='color:#FF9900;text-decoration:
|
||||||
|
none'>contact@maboutique.fr</span></a></span></b></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,6 @@
|
|||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe+hkicNP7ROHUssGNtHwiT2Ew
|
||||||
|
HFrSk/qwrcq8v5metRtTTFPE/nmzSkRnTs3GMpi57rBdxBBJW5W9cpNyGUh0jNXc
|
||||||
|
VrOSClpD5Ri2hER/GcNrxVRP7RlWOqB1C03q4QYmwjHZ+zlM4OUhCCAtSWflB4wC
|
||||||
|
Ka1g88CjFwRw/PB9kwIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
$montant=$_GET['montant'];
|
||||||
|
$ref_com=$_GET['ref'];
|
||||||
|
#$auto=$_GET['auto'];
|
||||||
|
$trans=$_GET['trans'];
|
||||||
|
print ("<center><b><h2>Votre transaction a été refusée</h2></center></b><br>");
|
||||||
|
print ("<br><b>MONTANT : </b>$montant\n");
|
||||||
|
print ("<br><b>REFERENCE : </b>$ref_com\n");
|
||||||
|
#print ("<br><b>AUTO : </b>$auto\n");
|
||||||
|
print ("<br><b>TRANS : </b>$trans\n");
|
||||||
|
?>
|
@ -0,0 +1,102 @@
|
|||||||
|
|
||||||
|
///// script PHP de vérification de la signature Paybox.
|
||||||
|
///// Ce code peut s'executer dans un contexte Apache/PHP.
|
||||||
|
///// Il affiche alors une page web qui permet de vérifier et signer des données.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>formulaire d'exemple pour test signature</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$status = "GUY";
|
||||||
|
|
||||||
|
function LoadKey( $keyfile, $pub=true, $pass='' ) { // chargement de la clé (publique par défaut)
|
||||||
|
|
||||||
|
$fp = $filedata = $key = FALSE; // initialisation variables
|
||||||
|
$fsize = filesize( $keyfile ); // taille du fichier
|
||||||
|
if( !$fsize ) return FALSE; // si erreur on quitte de suite
|
||||||
|
$fp = fopen( $keyfile, 'r' ); // ouverture fichier
|
||||||
|
if( !$fp ) return FALSE; // si erreur ouverture on quitte
|
||||||
|
$filedata = fread( $fp, $fsize ); // lecture contenu fichier
|
||||||
|
fclose( $fp ); // fermeture fichier
|
||||||
|
if( !$filedata ) return FALSE; // si erreur lecture, on quitte
|
||||||
|
if( $pub )
|
||||||
|
$key = openssl_pkey_get_public( $filedata ); // recuperation de la cle publique
|
||||||
|
else // ou recuperation de la cle privee
|
||||||
|
$key = openssl_pkey_get_private( array( $filedata, $pass ));
|
||||||
|
return $key; // renvoi cle ( ou erreur )
|
||||||
|
}
|
||||||
|
|
||||||
|
// comme precise la documentation Paybox, la signature doit être
|
||||||
|
// obligatoirement en dernière position pour que cela fonctionne
|
||||||
|
|
||||||
|
function GetSignedData( $qrystr, &$data, &$sig ) { // renvoi les donnes signees et la signature
|
||||||
|
|
||||||
|
$pos = strrpos( $qrystr, '&' ); // cherche dernier separateur
|
||||||
|
$data = substr( $qrystr, 0, $pos ); // et voila les donnees signees
|
||||||
|
$pos= strpos( $qrystr, '=', $pos ) + 1; // cherche debut valeur signature
|
||||||
|
$sig = substr( $qrystr, $pos ); // et voila la signature
|
||||||
|
$sig = base64_decode( urldecode( $sig )); // decodage signature
|
||||||
|
}
|
||||||
|
|
||||||
|
// $querystring = chaine entière retournée par Paybox lors du retour au site (méthode GET)
|
||||||
|
// $keyfile = chemin d'accès complet au fichier de la clé publique Paybox
|
||||||
|
|
||||||
|
function PbxVerSign( $qrystr, $keyfile ) { // verification signature Paybox
|
||||||
|
|
||||||
|
$key = LoadKey( $keyfile ); // chargement de la cle
|
||||||
|
if( !$key ) return -1; // si erreur chargement cle
|
||||||
|
// penser à openssl_error_string() pour diagnostic openssl si erreur
|
||||||
|
GetSignedData( $qrystr, $data, $sig ); // separation et recuperation signature et donnees
|
||||||
|
return openssl_verify( $data, $sig, $key ); // verification : 1 si valide, 0 si invalide, -1 si erreur
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !isset( $_POST['data'] )) // pour alimentation par defaut quand premier affichage du formulaire
|
||||||
|
$_POST['data'] = 'arg1=aaaa&arg2=bbbb&arg3=cccc&arg4=dddd';
|
||||||
|
|
||||||
|
if( isset( $_POST['signer']) ) { // si on a demande la signature
|
||||||
|
|
||||||
|
$key = LoadKey( 'TestK004.prv.pem', false ); // chargement de la cle prive (de test, sans mot de passe)
|
||||||
|
if( $key ) {
|
||||||
|
openssl_sign( $_POST['data'], $signature, $key ); // generation de la signature
|
||||||
|
openssl_free_key( $key ); // liberation ressource (confidentialite cle prive)
|
||||||
|
$status = "OK";
|
||||||
|
}
|
||||||
|
else $status = openssl_error_string(); // diagnostic erreur
|
||||||
|
|
||||||
|
$_POST['signeddata'] = $_POST['data']; // construction chaine data + signature
|
||||||
|
$_POST['signeddata'] .= '&sig=';
|
||||||
|
$_POST['signeddata'] .= urlencode( base64_encode( $signature ));
|
||||||
|
}
|
||||||
|
if( isset( $_POST['verifier']) ) { // si on a demande la verification
|
||||||
|
|
||||||
|
$CheckSig = PbxVerSign( $_POST['signeddata'], 'TestK004.pub.pem' );
|
||||||
|
|
||||||
|
if( $CheckSig == 1 ) $status = "Signature valide";
|
||||||
|
else if( $CheckSig == 0 ) $status = "Signature invalide : donnees alterees ou signature falsifiee";
|
||||||
|
else $status = "Erreur lors de la vérification de la signature";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<form action="testsign.php" method="POST">
|
||||||
|
<table border="0" cellpadding="3" cellspacing="0" align="center">
|
||||||
|
<tr>
|
||||||
|
<td>status = <?php echo $status; ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="data" size="80"value="<?= $_POST['data'] ?>"></td>
|
||||||
|
<td><input type="submit" name="signer" value="signer"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="signeddata" size="80"value="<?= $_POST['signeddata'] ?>"></td>
|
||||||
|
<td><input type="submit" name="verifier" value="verifier"/></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 5.6 KiB |
BIN
doc/Kit_E-transactions_internet_premium_PHP/Pack Logos CA/ca.png
Normal file
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,206 @@
|
|||||||
|
/* CSS Document */
|
||||||
|
|
||||||
|
/* feuille de style par d?faut pour les pages
|
||||||
|
de choix de paiement et de paiement
|
||||||
|
paybox system*/
|
||||||
|
|
||||||
|
th { /* headers de tables (dans choix paiement les ent?tes de table en bleu )*/
|
||||||
|
color: black;
|
||||||
|
background-color: #2890D6;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {/* cellules */
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {/*le texte 'paiement de' et '?'*/
|
||||||
|
margin:0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx_table_logo td {/*les cellules de la table logo (la table a la classe "pbx_table_logo")*/
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx_h1{/* le premier bloc de texte dans choixpaiement */
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: verdana;
|
||||||
|
font-weight:normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.pbx_h2{/* le second bloc de texte dans choixpaiement (choisisseze un moyen...)*/
|
||||||
|
font-family: verdana;
|
||||||
|
font-size:12px;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx_h3{/* l'ent?te reprenant le libell? du type de moyen de paiement*/
|
||||||
|
font-family: verdana;
|
||||||
|
font-size:12;
|
||||||
|
font-weight:normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx_h4{/* nom d'enseigne, en page de paiement*/
|
||||||
|
color:#444;
|
||||||
|
display: block;
|
||||||
|
margin: 8px 0 0 0;
|
||||||
|
padding: 0;
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
padding: 5px;
|
||||||
|
display: block;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
height: 35px;
|
||||||
|
line-height: 35px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: normal;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx_copyright h5{/*mention paybox en bas de page (choix et paiement)*/
|
||||||
|
font-size:10px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color : gray;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: italic;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabledevises {
|
||||||
|
color: #AAA;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color : #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
body { color: #555555;
|
||||||
|
font-family: arial,verdana,sans-serif;
|
||||||
|
padding : 0px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#idframe_pay {
|
||||||
|
border-color: #CCCCCC;
|
||||||
|
border-radius: 6px 6px 6px 6px;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
margin: 20px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idframe_pay table {
|
||||||
|
border-spacing:0;
|
||||||
|
border-collapse:collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idframe_pay h2 {
|
||||||
|
width: 100%;
|
||||||
|
background: url("main_header_background.png") repeat scroll 0 0 transparent;
|
||||||
|
border-color: #CCCCCC;
|
||||||
|
border-radius: 5px 5px 0 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 0 1px 0;
|
||||||
|
box-shadow: 1px 1px 0 0 #888888 inset;
|
||||||
|
color: #EEEEEE;
|
||||||
|
font-weight: bold;
|
||||||
|
text-shadow: 1px 1px 1px #444444;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
padding: 8px 0 0 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
#idframe_pay td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.pbx-align-center {
|
||||||
|
text-align: center;
|
||||||
|
padding: 20px 10px;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-align-right {
|
||||||
|
text-align: right;
|
||||||
|
padding: 2px 10px;
|
||||||
|
width: 50%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-align-button-right img {
|
||||||
|
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-align-left {
|
||||||
|
text-align: left;
|
||||||
|
padding: 2px 10px;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-align-left img {
|
||||||
|
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-align-very-left {
|
||||||
|
text-align: left;
|
||||||
|
padding: 2px 10px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-no-padding {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-align-button-right {
|
||||||
|
text-align: right;
|
||||||
|
padding: 2px 10px;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pbx-align-button-left {
|
||||||
|
text-align: left;
|
||||||
|
padding: 2px 10px;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#Devises{
|
||||||
|
left:0px;
|
||||||
|
top:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pbx-numero-carte, #pbx-numero-carte-input {
|
||||||
|
padding-top: 30px
|
||||||
|
}
|
||||||
|
|
||||||
|
#pbx-maxicheque-vide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pbx-maxicheque-frame {
|
||||||
|
padding: 0 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#blocCarte1 {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#zoneResultConsult {
|
||||||
|
border: 1px solid #CCCCCC;
|
||||||
|
border-radius: 10px 10px 10px 10px;
|
||||||
|
display: block;
|
||||||
|
margin: 20px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|