{"id":26151,"date":"2021-06-21T10:57:00","date_gmt":"2021-06-21T07:57:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26151"},"modified":"2021-10-18T02:02:37","modified_gmt":"2021-10-17T23:02:37","slug":"integration-de-la-passerelle-de-paiement-paypal-dans-php-a-l-aide-de-l-api-rest-paypal","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/integration-de-la-passerelle-de-paiement-paypal-dans-php-a-l-aide-de-l-api-rest-paypal\/","title":{"rendered":"Int\u00e9gration de la passerelle de paiement PayPal dans PHP \u00e0 l&rsquo;aide de l&rsquo;API REST PayPal"},"content":{"rendered":"<p>PayPal est l&rsquo;une des passerelles de paiement les plus fiables sur Internet. Il est largement utilis\u00e9 sur les sites Web pour accepter les paiements en ligne. Cependant, la documentation de l&rsquo;API PayPal n&rsquo;est pas facile \u00e0 comprendre. Pour un d\u00e9veloppeur qui va int\u00e9grer la passerelle de paiement PayPal pour la premi\u00e8re fois, il faudra de longues heures pour y arriver. J&rsquo;ai pass\u00e9 un nombre insens\u00e9 d&rsquo;heures \u00e0 lire la documentation de l&rsquo;API PayPal. Et r\u00e9alisez plus tard qu&rsquo;il n&rsquo;est pas n\u00e9cessaire de lire la documentation Paypal en profondeur pour l&rsquo;int\u00e9grer.<\/p>\n<p>Dans cet article, nous \u00e9tudions comment int\u00e9grer une passerelle de paiement PayPal \u00e0 l&rsquo;aide de l&rsquo;API REST PayPal. Nous allons utiliser la biblioth\u00e8que GitHub fournie par Omnipay. Omnipay fournit un moyen simple et propre d&rsquo;int\u00e9grer diff\u00e9rentes passerelles de paiement sur votre application Web. Leur structure de code est \u00e9galement propre et efficace. Les d\u00e9veloppeurs adoreraient.<\/p>\n<h3>Obtenir l&rsquo;identifiant client PayPal et le secret client<\/h3>\n<p>Pour l&rsquo;int\u00e9gration de PayPal dans le site Web, vous devez d&rsquo;abord cr\u00e9er une application API REST sur un compte de d\u00e9veloppeur PayPal. Une fois l&rsquo;application cr\u00e9\u00e9e, vous obtiendrez l&rsquo;identifiant client et le secret client qui seront n\u00e9cessaires dans les \u00e9tapes suivantes.<\/p>\n<p>Pour cr\u00e9er une application API REST, acc\u00e9dez \u00e0 votre <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">compte de d\u00e9veloppeur PayPal<\/a> et connectez-vous au tableau de bord.<\/p>\n<p>Dans le tableau de bord du d\u00e9veloppeur, cliquez sur le menu &quot;Mes applications et informations d&rsquo;identification&quot;. Cliquez sur le bouton \u00ab\u00a0Cr\u00e9er une application\u00a0\u00bb dans la section des applications de l&rsquo;API REST.<\/p>\n<p>\u00c0 l&rsquo;\u00e9tape suivante, remplissez le nom de l&rsquo;application et vous obtiendrez votre identifiant client et votre secret client. Dans mon cas, dans la capture d&rsquo;\u00e9cran ci-dessous, je peux voir les informations d&rsquo;identification du bac \u00e0 sable. Il peut s&rsquo;agir d&rsquo;informations d&rsquo;identification en direct dans votre cas. Ou vous pouvez \u00e9galement essayer avec vos informations d&rsquo;identification sandbox.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20133-6081c0b5d3a93.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20133-6081c0b5d3a93.png\" alt=\"Int\u00e9gration de la passerelle de paiement PayPal dans PHP \u00e0 l&#039;aide de l&#039;API REST PayPal\" ><\/a><\/p>\n<h3>Installation de la biblioth\u00e8que et configuration de base<\/h3>\n<p>Comme je l&rsquo;ai dit, nous utiliserons <a href=\"https:\/\/github.com\/thephpleague\/omnipay-paypal\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a> pour l&rsquo;int\u00e9gration de l&rsquo;API REST PayPal. Nous devons d&rsquo;abord installer leurs biblioth\u00e8ques \u00e0 l&rsquo;aide de Composer. Ex\u00e9cutez la commande ci-dessous pour installer les biblioth\u00e8ques.<\/p>\n<pre><code>composer require league\/omnipay omnipay\/paypal<\/code><\/pre>\n<p>Apr\u00e8s avoir install\u00e9 la biblioth\u00e8que, cr\u00e9ez un fichier de configuration dans lequel nous stockons nos informations d&rsquo;identification API, \u00e9crivons la connexion DB et initialisons la passerelle.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\nuse OmnipayOmnipay;\n\u00a0\ndefine('CLIENT_ID', 'PAYPAL_CLIENT_ID_HERE');\ndefine('CLIENT_SECRET', 'PAYPAL_CLIENT_SECRET_HERE');\n\u00a0\ndefine('PAYPAL_RETURN_URL', 'YOUR_SITE_URL\/success.php');\ndefine('PAYPAL_CANCEL_URL', 'YOUR_SITE_URL\/cancel.php');\ndefine('PAYPAL_CURRENCY', 'USD'); \/\/ set your currency here\n\u00a0\n\/\/ Connect with the database\n$db = new mysqli('localhost', 'MYSQL_DB_USERNAME', 'MYSQL_DB_PASSWORD', 'MYSQL_DB_NAME'); \n\u00a0\nif ($db-&gt;connect_errno) {\n\u00a0\u00a0\u00a0\u00a0die(\"Connect failed: \". $db-&gt;connect_error);\n}\n\u00a0\n$gateway = Omnipay::create('PayPal_Rest');\n$gateway-&gt;setClientId(CLIENT_ID);\n$gateway-&gt;setSecret(CLIENT_SECRET);\n$gateway-&gt;setTestMode(true); \/\/set it to 'false' when go live<\/code><\/pre>\n<p>Ici, j&rsquo;ai pass\u00e9 le param\u00e8tre &lsquo;Paypal_Rest&rsquo; \u00e0 la m\u00e9thode de cr\u00e9ation d&rsquo;Omnipay. Omnipay en arri\u00e8re-plan appelle l&rsquo;API REST PayPal tout en effectuant le paiement via celle-ci.<\/p>\n<p>Ensuite, cr\u00e9ez un formulaire simple o\u00f9 un utilisateur peut entrer le montant. \u00c0 des fins de d\u00e9monstration, je ne garde qu&rsquo;un champ dans le formulaire. Vous pouvez \u00e9tendre le formulaire selon vos besoins.<\/p>\n<p><strong>formulaire.html<\/strong><\/p>\n<pre><code>&lt;form action=\"charge.php\" method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"text\" name=\"amount\" value=\"20.00\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Pay Now\"&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Lorsque le paiement est termin\u00e9, nous devons enregistrer les d\u00e9tails de la transaction dans la table de la base de donn\u00e9es. Cr\u00e9ez une table de base de donn\u00e9es en ex\u00e9cutant la requ\u00eate SQL ci-dessous.<\/p>\n<pre><code>CREATE TABLE `payments` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`payment_id` varchar(255) NOT NULL,\n\u00a0`payer_id` varchar(255) NOT NULL,\n\u00a0`payer_email` varchar(255) NOT NULL,\n\u00a0`amount` float(10,2) NOT NULL,\n\u00a0`currency` varchar(255) NOT NULL,\n\u00a0`payment_status` varchar(255) NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;<\/code><\/pre>\n<p>Cette table ne contient aucune cl\u00e9 \u00e9trang\u00e8re car elle sert uniquement \u00e0 des fins de d\u00e9monstration. L&rsquo;utilisateur peut ajouter une colonne user_id dans cette table pour r\u00e9f\u00e9rencer le paiement avec l&rsquo;utilisateur.<\/p>\n<h3>Int\u00e9gration de la passerelle de paiement PayPal dans PHP \u00e0 l&rsquo;aide de l&rsquo;API REST PayPal<\/h3>\n<p>Lors de l&rsquo;utilisation de l&rsquo;API REST PayPal, l&rsquo;utilisateur sera redirig\u00e9 vers PayPal pour effectuer le paiement. Apr\u00e8s avoir effectu\u00e9 le paiement, l&rsquo;utilisateur sera redirig\u00e9 vers notre application en fonction du statut de r\u00e9ussite ou d&rsquo;\u00e9chec. Nous avons d\u00e9fini ces URL dans le <code>config.php<\/code>fichier ci-dessus.<\/p>\n<p>Une fois que l&rsquo;utilisateur est redirig\u00e9 vers notre application avec une r\u00e9ponse r\u00e9ussie, nous devons ex\u00e9cuter le paiement dans notre fichier PHP, ce qui est <code>success.php<\/code>dans notre cas. Nous stockons \u00e9galement les informations de paiement apr\u00e8s l&rsquo;ex\u00e9cution du paiement \u00e0 l&rsquo;aide de l&rsquo;API REST PayPal. Notre code sera donc le suivant.<\/p>\n<p><strong>charge.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $gateway-&gt;purchase(array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'amount' =&gt; $_POST['amount'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'currency' =&gt; PAYPAL_CURRENCY,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'returnUrl' =&gt; PAYPAL_RETURN_URL,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'cancelUrl' =&gt; PAYPAL_CANCEL_URL,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0))-&gt;send();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isRedirect()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response-&gt;redirect(); \/\/ this will automatically forward the customer\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ not successful\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $response-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p><strong>succ\u00e8s.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\n\/\/ Once the transaction has been approved, we need to complete it.\nif (array_key_exists('paymentId', $_GET) &amp;&amp; array_key_exists('PayerID', $_GET)) {\n\u00a0\u00a0\u00a0\u00a0$transaction = $gateway-&gt;completePurchase(array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'payer_id'\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 =&gt; $_GET['PayerID'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'transactionReference' =&gt; $_GET['paymentId'],\n\u00a0\u00a0\u00a0\u00a0));\n\u00a0\u00a0\u00a0\u00a0$response = $transaction-&gt;send();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isSuccessful()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ The customer has successfully paid.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_body = $response-&gt;getData();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment_id = $arr_body['id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payer_id = $arr_body['payer']['payer_info']['payer_id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payer_email = $arr_body['payer']['payer_info']['email'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$amount = $arr_body['transactions'][0]['amount']['total'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$currency = PAYPAL_CURRENCY;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment_status = $arr_body['state'];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Insert transaction data into the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$isPaymentExist = $db-&gt;query(\"SELECT * FROM payments WHERE payment_id = '\".$payment_id.\"'\");\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($isPaymentExist-&gt;num_rows == 0) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$insert = $db-&gt;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 .\"')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Payment is successful. Your transaction id is: \". $payment_id;\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $response-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n} else {\n\u00a0\u00a0\u00a0\u00a0echo 'Transaction is declined';\n}<\/code><\/pre>\n<p><strong>annuler.php<\/strong><\/p>\n<pre><code>&lt;h3&gt;User is canceled the payment.&lt;\/h3&gt;<\/code><\/pre>\n<h3>Envoyer des informations sur le produit \u00e0 PayPal<\/h3>\n<p>Dans le code ci-dessus, nous envoyons le montant \u00e0 payer sur PayPal. Vous pouvez \u00e9galement envoyer des informations sur le produit. Vos clients peuvent voir les d\u00e9tails de ces produits sur la page de paiement avant d&rsquo;effectuer un paiement.<\/p>\n<p>Pour envoyer les informations sur le produit, vous devez transmettre le tableau &lsquo;items&rsquo; \u00e0 la <code>purchase<\/code>\u00a0m\u00e9thode comme suit.<\/p>\n<pre><code>$response = $gateway-&gt;purchase(array(\n\u00a0\u00a0\u00a0\u00a0'amount' =&gt; $_POST['amount'],\n\u00a0\u00a0\u00a0\u00a0'items' =&gt; array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name' =&gt; 'Course Subscription',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'price' =&gt; $_POST['amount'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'description' =&gt; 'Get access to premium courses.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'quantity' =&gt; 1\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\n\u00a0\u00a0\u00a0\u00a0),\n\u00a0\u00a0\u00a0\u00a0'currency' =&gt; PAYPAL_CURRENCY,\n\u00a0\u00a0\u00a0\u00a0'returnUrl' =&gt; PAYPAL_RETURN_URL,\n\u00a0\u00a0\u00a0\u00a0'cancelUrl' =&gt; PAYPAL_CANCEL_URL,\n))-&gt;send();<\/code><\/pre>\n<p>Ici, j&rsquo;ai pass\u00e9 les d\u00e9tails du produit de mani\u00e8re statique. Vous devez le rendre dynamique en fonction de votre produit.<\/p>\n<p>J&rsquo;esp\u00e8re que vous avez entendu parler de l&rsquo;int\u00e9gration de la passerelle de paiement PayPal en PHP. J&rsquo;aimerais entendre vos pens\u00e9es ou vos suggestions dans la section des commentaires ci-dessous.<\/p>\n<h4>Articles Li\u00e9s<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/acceptez-les-paiements-par-carte-de-credit-en-utilisant-paypal-payments-pro-en-php\/\" title=\"Acceptez les paiements par carte de cr\u00e9dit en utilisant PayPal Payments Pro en PHP\">Acceptez les paiements par carte de cr\u00e9dit en utilisant PayPal Payments Pro en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/acceptez-le-paiement-par-carte-de-credit-en-utilisant-la-passerelle-de-paiement-authorize-net-en-php\/\" title=\"Accepter le paiement par carte de cr\u00e9dit \u00e0 l&#039;aide de la passerelle de paiement Authorize.net en PHP\">Accepter le paiement par carte de cr\u00e9dit \u00e0 l&rsquo;aide de la passerelle de paiement Authorize.net en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/un-guide-pour-l-integration-de-stripe-dans-un-site-web-avec-php\/\" title=\"Un guide pour l&#039;int\u00e9gration de Stripe dans un site Web avec PHP\">Un guide pour l&rsquo;int\u00e9gration de Stripe dans un site Web avec PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, nous montrons comment int\u00e9grer la passerelle de paiement PayPal dans PHP \u00e0 l&rsquo;aide de l&rsquo;API REST PayPal. En utilisant PayPal, vous pouvez accepter le paiement en ligne de vos clients<\/p>\n","protected":false},"author":1,"featured_media":20134,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[273],"tags":[844],"class_list":["post-26151","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/26151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/comments?post=26151"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/26151\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/20134"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=26151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=26151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=26151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}