1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| <?php
#Scrypt traduit et modifie par maniT4c
#Retrouvez le scrypt d'origine sur http://www.stellarwebsolutions.com/en/articles/paypal_button_encryption_php.php
#Defini le chemin de la racine pour OpenSSL
putenv("HOME=~");
# chemin vers la clef privee
$MY_KEY_FILE = "paypal/*-prvkey.pem";
# chemin vers le certificat public
$MY_CERT_FILE = "paypal/*-pubcert.pem";
# chemin vers le certificat public de paypal
$PAYPAL_CERT_FILE = "paypal/cert_key_pem.txt";
# chemin vers openssl sur votre serveur
# pensez a verifier que openssl est active sur votre serveur avec la commande phpinfo()
$OPENSSL = "/usr/bin/openssl";
$form = array('cmd' => '_xclick',//indique a paypal qu'il s'agit d'un bouton payer maintenant
'business' => 'vendeur@domaine.com',//adresse du vendeur (qui doit recevoir le paiement)
'item_name' => '5 kilo de mandarine', //nom de la commande
'item_number' => '1', //numero de la commande
'currency_code' => 'EUR', //Devise
'amount' => '10', //montant a payer
'lc' => 'FR', //langue de l'interface paypal
'cert_id' => 'xxxxxxxxxxxx', //identifiant de certificat donné par paypal
'custom' => 'mes valeurs utiles pour le traitement',//variable permettant de recevoir diverses informations sur la page de retour
'invoice' => '1',//valeur unique empechant les paiements accidentels (doit être differente pour chaque paiement)
'charset' => 'utf-8',//Definit le charset utilisez
'no_shipping' => '1', //Le client n'est pas invite a rentrer son adresse
'cpp_header_image' => 'http://www.domaine.com/logo.jpg',//Adresse de l'image se trouvant en haut de la page de paiement (750x90px maxi) dans l'ideal cette image soit se trouver sur un serveur securisé pour eviter d'avoir un message indiquant que certaine parti de la page ne sont pas écurisée.
'return' => 'boutique.php',//Adresse de retour lorsque l'utilisateur clique sur retouner a la boutique
'cancel_return' => 'annule.php',//Adresse de retour pour les annulations
'no_note' => '1',//Empeche l'utilisateur de rajouter des commentaires a son paiement.
'notify_url' => 'réussi.php'//Url appelee par paypal lors du paiement, cette page permettra le traitement des commandes payees.
);
//on enregistre le formulaire crypte dans une variable
$encrypted = paypal_encrypt($form);
//Cette fonction encrypte le formulaire il n'est pas necessaire de comprendre son fonctionnement
function paypal_encrypt($hash){
global $MY_KEY_FILE;
global $MY_CERT_FILE;
global $PAYPAL_CERT_FILE;
global $OPENSSL;
if (!file_exists($MY_KEY_FILE)) {
echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found <br/>";
}
if (!file_exists($MY_CERT_FILE)) {
echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found<br/>";
}
if (!file_exists($PAYPAL_CERT_FILE)) {
echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found<br/>";
}
if (!file_exists($OPENSSL)) {
echo "ERROR: OPENSSL $OPENSSL not found<br/>";
}
//Assign Build Notation for PayPal Support
$hash['bn']= 'StellarWebSolutions.PHP_EWP';
$openssl_cmd = "$OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE " .
"-outform der -nodetach -binary | $OPENSSL smime -encrypt " .
"-des3 -binary -outform pem $PAYPAL_CERT_FILE";
$descriptors = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
);
$process = proc_open($openssl_cmd, $descriptors, $pipes);
if (is_resource($process)) {
foreach ($hash as $key => $value) {
if ($value != "") {
//echo "Adding to blob: $key=$value\n<br />";
fwrite($pipes[0], "$key=$value\n");
}
}
fflush($pipes[0]);
fclose($pipes[0]);
$output = "";
while (!feof($pipes[1])) {
$output .= fgets($pipes[1]);
}
//echo "outpout=".$output;
fclose($pipes[1]);
$return_value = proc_close($process);
return $output;
}
return "ERROR";
};
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Paiement Paypal</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="fr" />
</head>
<body>
<!-- l'attribut action du formulaire doit rediriger vers www.sandbox.paypal.com pour la phase de test et vers www.paypal.com pour le réel -->
<form target="paypal" action="https://www.sandbox.paypal.com/fr/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<!-- on affiche le formulaire crypté -->
<input type="hidden" name="encrypted" value="
<?php echo $encrypted; ?>">
<!-- Indique la source de l'image du bouton payer maintenant -->
<input type="image" src="http://images.paypal.com/images/x-click-but01.gif"
name="submit" alt="Effectuez vos paiements via PayPal : une solution rapide, gratuite
et sécurisée">
</form>
</body>
</html> |
Partager