Créer un bouton de paiement Paypal avec PHP et MySQL (2014)

Je ne sais pas vous, mais quand je dois refaire un bouton paypal, soit ça change, soit ça ne marche plus, soit je ne sais pas…
J’ai donc encore une fois galéré afin de mettre en place un bouton de paiement tout con. Comme c’était vraiment chiant de chercher dans tous les recoins comment faire, je souhaite vous épargner cette peine et vous donner le code et les explications.

Créer et ajouter un bouton de paiement Paypal avec PHP et MySQL

1. Get Ready

Avant de vous jeter sur le copié collé du code, assurez-vous d’avoir votre (un) compte Paypal Business, vérifié.
Ouvrez ensuite la page des variables Paypal. En gros c’est la liste des input hidden que vous pouvez mettre dans votre formulaire

2. Le HTML

Voici le formulaire tout débile que vous allez copier et proposer à vos futur acheteurs. Lisez bien les input et ajoutez / supprimez comme vous le souhaitez. je vais juste détailler ceux qui sont ci-dessous.

<form id= »paypal_form » class= »paypal » action= »checkout.php » method= »post »>
<input name= »cmd » type= »hidden » value= »_xclick » />
<input name= »no_note » type= »hidden » value= »1″ />
<input name= »lc » type= »hidden » value= »FR » />
<input name= »currency_code » type= »hidden » value= »EUR » />
<input name= »bn » type= »hidden » value= »PP-BuyNowBF:btn_buynow_LG.gif:NonHostedGuest » />
<input name= »first_name » type= »hidden » value= »Le prenom du client » />
<input name= »last_name » type= »hidden » value= »Le nom du client » />
<input name= »payer_email » type= »hidden » value= »le@mail.duclient » />
<input name= »custom » type= »hidden » value= »un truc n’importe, son ID si c’est un membre » />
<input name= »item_number » type= »hidden » value= »42″ />
<input type= »submit » value= »Submit Payment » class= »button » />
</form>

cmd : Le type de bouton. Voir la liste
no_note : si 1, ne permet pas d’envoyer un message pendant l’achat
lc : le pays du bouton (et pas de Candy)
currency_code : La monnaie utilisée
bn : Les paramètres du bouton. Un truc pas vraiment utile en fait.
first_name : Sérieux ? Liste des options possibles
payer_email : Le mail de l’acheteur
custom : ce que vous voulez
item_number : Le numéro de série de ce que vous vendez

Donc une fois que c’est fait, le formulaire envoie sur checkout.php

3. checkout.php

C’est du PHP oui.

<?
//Connexion a ton serveur MySQL
$mysqli = new mysqli(« serveur », « base de donnée », « mot de passe », « nom de ta table »);

// PayPal settings
$paypal_email = ’email@depaypal.fr’; //ton mail ou tu reçois les paiements
$return_url = ‘http://www.tonsite.com/success.php’; // l’adresse après le paiement
$cancel_url = ‘http://www.tonsite.com/pourquoitannules.php’; // l’adresse si le mec annule
$notify_url = ‘http://www.onenregistre.com/checkout.php’; // L’enregistrement dans ta base de donnée (OUI C’EST CHECKOUT.PHP, la même page que celle la !)

$item_name = ‘Credits’; // le nom de ton objet à vendre
$item_amount = 10; // le prix de ton objet à vendre (tu m’fais une reduc?)

//les fonctions

//elle verifie ce que tu veux… $tnxid c’est la valeur que tu lui donnes via le formulaire.
function check_txnid($tnxid){
global $mysqli;
return true;

}

// Cette fonction vérifie le prix, si ça n’a pas été modif d’une quelconque manière. (bon mais c’est a toi de remplir hein ! )
function check_price($price, $id){
GLOBAL $mysqli;

return true;
}

// Celle la enregistre dans ta base de donnée si tout est bon
function updatePayments($data){

global $mysqli;
if(is_array($data)){
$requete = $mysqli->query(« INSERT INTO tabase_des_commandes »);
$UID = $mysqli->insert_id;
return $UID;
}
}

// Si paypal a bien comprit qu’il faut aller sur checkout.php
if (!isset($_POST[« txn_id »]) && !isset($_POST[« txn_type »])){

// Tu fais ton url avec tes $_POST
$querystring .= « ?business= ».urlencode($paypal_email). »& »;
$querystring .= « item_name= ».urlencode($item_name). »& »;
$querystring .= « amount= ».urlencode($item_amount). »& »;

// Et tu fais ton foreach, foreach $_POST
foreach($_POST as $key => $value){
$value = urlencode(stripslashes($value));
$querystring .= « $key=$value& »;
}

// Les adresses pour Paypal
$querystring .= « return= ».urlencode(stripslashes($return_url)). »& »;
$querystring .= « cancel_return= ».urlencode(stripslashes($cancel_url)). »& »;
$querystring .= « notify_url= ».urlencode($notify_url);

// On retourne sur Paypal (tavu c’est sandbox la. enlève sandbox. pour plus être en sandbox.
header(‘location:https://www.sandbox.paypal.com/cgi-bin/webscr’.$querystring);
exit();

}else{

// On traite la reponse de Paypal
$req = ‘cmd=_notify-validate’;
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$value = preg_replace(‘/(.*[^%^0^D])(%0A)(.*)/i’,’${1}%0D%0A${3}’,$value);// IPN fix
$req .= « &$key=$value »;
}

// On récupère les données
$data[‘item_name’] = $_POST[‘item_name’];
$data[‘item_number’] = $_POST[‘item_number’];
$data[‘payment_status’] = $_POST[‘payment_status’];
$data[‘payment_amount’] = $_POST[‘mc_gross’];
$data[‘payment_currency’] = $_POST[‘mc_currency’];
$data[‘txn_id’] = $_POST[‘txn_id’];
$data[‘receiver_email’] = $_POST[‘receiver_email’];
$data[‘payer_email’] = $_POST[‘payer_email’];
$data[‘custom’] = $_POST[‘custom’];

// On renvoi à Paypal (quand je dis que c’est dla merde)
$header .= « POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= « Content-Length:  » . strlen($req) . « \r\n »;
$header .= « Content-Type: application/x-www-form-urlencoded\r\n »;
$header .= « Host: www.sandbox.paypal.com\r\n »;
$header .= « Connection: close\r\n\r\n »;

$fp = fsockopen (‘ssl://www.sandbox.paypal.com’, 443, $errno, $errstr, 30);

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets($fp, 1024);
//$res=stream_get_contents($fp, 1024);
if (strcmp (trim($res), « VERIFIED ») == 0) {

// On appelle les fonctions
$valid_txnid = check_txnid($data[‘txn_id’]);
$valid_price = check_price($data[‘payment_amount’], $data[‘item_number’]);

// Et si ca marche :
if($valid_txnid AND $valid_price){
$orderid = updatePayments($data);
if($orderid){
// Bravo t’as reçu tes sous et en plus c’est dans ta database.

}else{
// Ho ho ho… Ca marche pas si t’es ici
}
}else{
// Ca marche pas non plus si t’es là, mais c’est pire vu que tu sais pas pourquoi
}

}else if (strcmp (trim($res), « INVALID ») == 0) {

/ Ho ho ho… Ça marche pas si t’es la aussi.

}
}
fclose ($fp);
}
}
?>

4. Conclusion

Pour que le code fonctionne, il faut me payer un café ! 😀

Sinon tu peux partager, lâcher un com etc.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

7jE8uk

Please type the text above: