Intégration de la passerelle de paiement PayPal dans PHP à l’aide de l’API REST PayPal
PayPal est l’une des passerelles de paiement les plus fiables sur Internet. Il est largement utilisé sur les sites Web pour accepter les paiements en ligne. Cependant, la documentation de l’API PayPal n’est pas facile à comprendre. Pour un développeur qui va intégrer la passerelle de paiement PayPal pour la première fois, il faudra de longues heures pour y arriver. J’ai passé un nombre insensé d’heures à lire la documentation de l’API PayPal. Et réalisez plus tard qu’il n’est pas nécessaire de lire la documentation Paypal en profondeur pour l’intégrer.
Dans cet article, nous étudions comment intégrer une passerelle de paiement PayPal à l’aide de l’API REST PayPal. Nous allons utiliser la bibliothèque GitHub fournie par Omnipay. Omnipay fournit un moyen simple et propre d’intégrer différentes passerelles de paiement sur votre application Web. Leur structure de code est également propre et efficace. Les développeurs adoreraient.
Obtenir l’identifiant client PayPal et le secret client
Pour l’intégration de PayPal dans le site Web, vous devez d’abord créer une application API REST sur un compte de développeur PayPal. Une fois l’application créée, vous obtiendrez l’identifiant client et le secret client qui seront nécessaires dans les étapes suivantes.
Pour créer une application API REST, accédez à votre compte de développeur PayPal et connectez-vous au tableau de bord.
Dans le tableau de bord du développeur, cliquez sur le menu "Mes applications et informations d’identification". Cliquez sur le bouton « Créer une application » dans la section des applications de l’API REST.
À l’étape suivante, remplissez le nom de l’application et vous obtiendrez votre identifiant client et votre secret client. Dans mon cas, dans la capture d’écran ci-dessous, je peux voir les informations d’identification du bac à sable. Il peut s’agir d’informations d’identification en direct dans votre cas. Ou vous pouvez également essayer avec vos informations d’identification sandbox.
Installation de la bibliothèque et configuration de base
Comme je l’ai dit, nous utiliserons Omnipay pour l’intégration de l’API REST PayPal. Nous devons d’abord installer leurs bibliothèques à l’aide de Composer. Exécutez la commande ci-dessous pour installer les bibliothèques.
composer require league/omnipay omnipay/paypal
Après avoir installé la bibliothèque, créez un fichier de configuration dans lequel nous stockons nos informations d’identification API, écrivons la connexion DB et initialisons la passerelle.
config.php
<?php
require_once "vendor/autoload.php";
use OmnipayOmnipay;
define('CLIENT_ID', 'PAYPAL_CLIENT_ID_HERE');
define('CLIENT_SECRET', 'PAYPAL_CLIENT_SECRET_HERE');
define('PAYPAL_RETURN_URL', 'YOUR_SITE_URL/success.php');
define('PAYPAL_CANCEL_URL', 'YOUR_SITE_URL/cancel.php');
define('PAYPAL_CURRENCY', 'USD'); // set your currency here
// Connect with the database
$db = new mysqli('localhost', 'MYSQL_DB_USERNAME', 'MYSQL_DB_PASSWORD', 'MYSQL_DB_NAME');
if ($db->connect_errno) {
die("Connect failed: ". $db->connect_error);
}
$gateway = Omnipay::create('PayPal_Rest');
$gateway->setClientId(CLIENT_ID);
$gateway->setSecret(CLIENT_SECRET);
$gateway->setTestMode(true); //set it to 'false' when go live
Ici, j’ai passé le paramètre ‘Paypal_Rest’ à la méthode de création d’Omnipay. Omnipay en arrière-plan appelle l’API REST PayPal tout en effectuant le paiement via celle-ci.
Ensuite, créez un formulaire simple où un utilisateur peut entrer le montant. À des fins de démonstration, je ne garde qu’un champ dans le formulaire. Vous pouvez étendre le formulaire selon vos besoins.
formulaire.html
<form action="charge.php" method="post">
<input type="text" name="amount" value="20.00" />
<input type="submit" name="submit" value="Pay Now">
</form>
Lorsque le paiement est terminé, nous devons enregistrer les détails de la transaction dans la table de la base de données. Créez une table de base de données en exécutant la requête SQL ci-dessous.
CREATE TABLE `payments` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`payment_id` varchar(255) NOT NULL,
`payer_id` varchar(255) NOT NULL,
`payer_email` varchar(255) NOT NULL,
`amount` float(10,2) NOT NULL,
`currency` varchar(255) NOT NULL,
`payment_status` varchar(255) NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Cette table ne contient aucune clé étrangère car elle sert uniquement à des fins de démonstration. L’utilisateur peut ajouter une colonne user_id dans cette table pour référencer le paiement avec l’utilisateur.
Intégration de la passerelle de paiement PayPal dans PHP à l’aide de l’API REST PayPal
Lors de l’utilisation de l’API REST PayPal, l’utilisateur sera redirigé vers PayPal pour effectuer le paiement. Après avoir effectué le paiement, l’utilisateur sera redirigé vers notre application en fonction du statut de réussite ou d’échec. Nous avons défini ces URL dans le config.php
fichier ci-dessus.
Une fois que l’utilisateur est redirigé vers notre application avec une réponse réussie, nous devons exécuter le paiement dans notre fichier PHP, ce qui est success.php
dans notre cas. Nous stockons également les informations de paiement après l’exécution du paiement à l’aide de l’API REST PayPal. Notre code sera donc le suivant.
charge.php
<?php
require_once 'config.php';
if (isset($_POST['submit'])) {
try {
$response = $gateway->purchase(array(
'amount' => $_POST['amount'],
'currency' => PAYPAL_CURRENCY,
'returnUrl' => PAYPAL_RETURN_URL,
'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();
if ($response->isRedirect()) {
$response->redirect(); // this will automatically forward the customer
} else {
// not successful
echo $response->getMessage();
}
} catch(Exception $e) {
echo $e->getMessage();
}
}
succès.php
<?php
require_once 'config.php';
// Once the transaction has been approved, we need to complete it.
if (array_key_exists('paymentId', $_GET) && array_key_exists('PayerID', $_GET)) {
$transaction = $gateway->completePurchase(array(
'payer_id' => $_GET['PayerID'],
'transactionReference' => $_GET['paymentId'],
));
$response = $transaction->send();
if ($response->isSuccessful()) {
// The customer has successfully paid.
$arr_body = $response->getData();
$payment_id = $arr_body['id'];
$payer_id = $arr_body['payer']['payer_info']['payer_id'];
$payer_email = $arr_body['payer']['payer_info']['email'];
$amount = $arr_body['transactions'][0]['amount']['total'];
$currency = PAYPAL_CURRENCY;
$payment_status = $arr_body['state'];
// Insert transaction data into the database
$isPaymentExist = $db->query("SELECT * FROM payments WHERE payment_id = '".$payment_id."'");
if($isPaymentExist->num_rows == 0) {
$insert = $db->query("INSERT INTO payments(payment_id, payer_id, payer_email, amount, currency, payment_status) VALUES('". $payment_id ."', '". $payer_id ."', '". $payer_email ."', '". $amount ."', '". $currency ."', '". $payment_status ."')");
}
echo "Payment is successful. Your transaction id is: ". $payment_id;
} else {
echo $response->getMessage();
}
} else {
echo 'Transaction is declined';
}
annuler.php
<h3>User is canceled the payment.</h3>
Envoyer des informations sur le produit à PayPal
Dans le code ci-dessus, nous envoyons le montant à payer sur PayPal. Vous pouvez également envoyer des informations sur le produit. Vos clients peuvent voir les détails de ces produits sur la page de paiement avant d’effectuer un paiement.
Pour envoyer les informations sur le produit, vous devez transmettre le tableau ‘items’ à la purchase
méthode comme suit.
$response = $gateway->purchase(array(
'amount' => $_POST['amount'],
'items' => array(
array(
'name' => 'Course Subscription',
'price' => $_POST['amount'],
'description' => 'Get access to premium courses.',
'quantity' => 1
),
),
'currency' => PAYPAL_CURRENCY,
'returnUrl' => PAYPAL_RETURN_URL,
'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();
Ici, j’ai passé les détails du produit de manière statique. Vous devez le rendre dynamique en fonction de votre produit.
J’espère que vous avez entendu parler de l’intégration de la passerelle de paiement PayPal en PHP. J’aimerais entendre vos pensées ou vos suggestions dans la section des commentaires ci-dessous.
Articles Liés
- Acceptez les paiements par carte de crédit en utilisant PayPal Payments Pro en PHP
- Accepter le paiement par carte de crédit à l’aide de la passerelle de paiement Authorize.net en PHP
- Un guide pour l’intégration de Stripe dans un site Web avec PHP