{"id":26378,"date":"2021-06-21T10:30:00","date_gmt":"2021-06-21T07:30:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26378"},"modified":"2021-10-18T02:58:58","modified_gmt":"2021-10-17T23:58:58","slug":"integrazione-del-gateway-di-pagamento-paypal-in-php-utilizzando-l-api-rest-di-paypal","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/it\/integrazione-del-gateway-di-pagamento-paypal-in-php-utilizzando-l-api-rest-di-paypal\/","title":{"rendered":"Integrazione del gateway di pagamento PayPal in PHP utilizzando l&#8217;API REST di PayPal"},"content":{"rendered":"<p>PayPal \u00e8 uno dei gateway di pagamento pi\u00f9 affidabili su Internet. \u00c8 ampiamente utilizzato sui siti Web per accettare pagamenti online. Tuttavia, la documentazione dell&#8217;API PayPal non \u00e8 di facile comprensione. Per uno sviluppatore che integrer\u00e0 per la prima volta il gateway di pagamento PayPal, ci vorranno molte ore per riuscirci. Ho passato una quantit\u00e0 folle di ore a leggere la documentazione dell&#8217;API PayPal. E poi rendersi conto che non \u00e8 necessario leggere a fondo la documentazione di Paypal per integrarla.<\/p>\n<p>In questo articolo, studiamo come integrare un gateway di pagamento PayPal utilizzando PayPal REST API. Useremo la libreria GitHub fornita da Omnipay. Omnipay fornisce un modo semplice e pulito per integrare diversi gateway di pagamento nella tua applicazione web. Anche la loro struttura del codice \u00e8 pulita ed efficiente. Gli sviluppatori lo adorerebbero.<\/p>\n<h3>Ottieni l&#8217;ID cliente PayPal e il segreto cliente<\/h3>\n<p>Per l&#8217;integrazione di PayPal nel sito Web, devi prima creare un&#8217;app API REST su un account sviluppatore PayPal. Una volta creata l&#8217;app, otterrai l&#8217;ID client e il segreto client che richiederanno nei passaggi successivi.<\/p>\n<p>Per creare l&#8217;app API REST, vai al tuo <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">account sviluppatore PayPal<\/a> e accedi alla dashboard.<\/p>\n<p>Nella dashboard dello sviluppatore, fai clic sul menu &quot;Le mie app e credenziali&quot;. Fare clic sul pulsante &quot;Crea app&quot; nella sezione delle app dell&#8217;API REST.<\/p>\n<p>Nel passaggio successivo, inserisci il nome dell&#8217;app e otterrai l&#8217;ID cliente e il segreto del cliente. Nel mio caso, nello screenshot qui sotto posso vedere le credenziali della sandbox. Possono essere credenziali live nel tuo caso. Oppure puoi provare anche con le tue credenziali 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=\"Integrazione del gateway di pagamento PayPal in PHP utilizzando l&#039;API REST di PayPal\" ><\/a><\/p>\n<h3>Installazione della libreria e configurazione di base<\/h3>\n<p>Come ho detto, utilizzeremo <a href=\"https:\/\/github.com\/thephpleague\/omnipay-paypal\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a> per l&#8217;integrazione dell&#8217;API REST di PayPal. Dobbiamo prima installare le loro librerie usando il Composer. Esegui il comando seguente per installare le librerie.<\/p>\n<pre><code>composer require league\/omnipay omnipay\/paypal<\/code><\/pre>\n<p>Dopo aver installato la libreria, creare un file di configurazione in cui archiviare le nostre credenziali API, scrivere la connessione DB e inizializzare il gateway.<\/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>Qui, ho passato il parametro &quot;Paypal_Rest&quot; al metodo di creazione di Omnipay. Omnipay in background chiama l&#8217;API REST di PayPal mentre effettua il pagamento attraverso di essa.<\/p>\n<p>Quindi, crea un semplice modulo in cui un utente pu\u00f2 inserire l&#8217;importo. A scopo dimostrativo, mantengo solo un campo nel modulo. Puoi estendere il modulo secondo le tue esigenze.<\/p>\n<p><strong>form.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>Quando il pagamento viene completato, dovremmo salvare i dettagli della transazione nella tabella del database. Crea una tabella di database eseguendo la query SQL seguente.<\/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>Questa tabella non contiene chiavi esterne in quanto \u00e8 solo a scopo dimostrativo. L&#8217;utente pu\u00f2 aggiungere una colonna user_id in questa tabella per fare riferimento al pagamento con l&#8217;utente.<\/p>\n<h3>Integrazione del gateway di pagamento PayPal in PHP utilizzando l&#8217;API REST di PayPal<\/h3>\n<p>Quando si utilizza PayPal REST API, l&#8217;utente reindirizzer\u00e0 a PayPal per completare il pagamento. Dopo aver effettuato il pagamento, l&#8217;utente reindirizzer\u00e0 alla nostra applicazione in base allo stato di successo o fallimento. Abbiamo definito questi URL nel <code>config.php<\/code>file sopra.<\/p>\n<p>Una volta, l&#8217;utente reindirizza alla nostra applicazione con risposta positiva, dobbiamo eseguire il pagamento nel nostro file PHP che \u00e8 <code>success.php<\/code>nel nostro caso. Archiviamo anche le informazioni di pagamento dopo aver eseguito il pagamento utilizzando l&#8217;API REST di PayPal. Quindi il nostro codice sar\u00e0 il seguente.<\/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>success.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>cancella.php<\/strong><\/p>\n<pre><code>&lt;h3&gt;User is canceled the payment.&lt;\/h3&gt;<\/code><\/pre>\n<h3>Invia le informazioni sul prodotto a PayPal<\/h3>\n<p>Nel codice sopra, stiamo inviando l&#8217;importo da pagare su PayPal. Potresti anche voler inviare informazioni sul prodotto. I tuoi clienti possono vedere questi dettagli del prodotto nella pagina di pagamento prima di effettuare un pagamento.<\/p>\n<p>Per inviare le informazioni sul prodotto, \u00e8 necessario passare l&#8217;array &quot;items&quot; al <code>purchase<\/code>\u00a0metodo come segue.<\/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>Qui ho passato staticamente i dettagli del prodotto. Dovresti renderlo dinamico a seconda del tuo prodotto.<\/p>\n<p>Spero che tu abbia avuto modo di conoscere l&#8217;integrazione del gateway di pagamento PayPal in PHP. Mi piacerebbe sentire i tuoi pensieri o suggerimenti nella sezione commenti qui sotto.<\/p>\n<h4>articoli Correlati<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/accetta-pagamenti-con-carta-di-credito-utilizzando-paypal-payments-pro-in-php\/\" title=\"Accetta pagamenti con carta di credito utilizzando PayPal Payments Pro in PHP\">Accetta pagamenti con carta di credito utilizzando PayPal Payments Pro in PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/accetta-pagamenti-con-carta-di-credito-utilizzando-il-gateway-di-pagamento-authorize-net-in-php\/\" title=\"Accetta pagamenti con carta di credito utilizzando il gateway di pagamento Authorize.net in PHP\">Accetta pagamenti con carta di credito utilizzando il gateway di pagamento Authorize.net in PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/una-guida-per-l-integrazione-di-stripe-nel-sito-web-con-php\/\" title=\"Una guida per l&#039;integrazione di Stripe nel sito Web con PHP\">Una guida per l&#8217;integrazione di Stripe nel sito Web con PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo post, mostriamo come integrare il gateway di pagamento PayPal in PHP utilizzando PayPal REST API. Utilizzando PayPal, puoi accettare pagamenti online dai tuoi clienti<\/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":[276],"tags":[846],"class_list":["post-26378","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-7","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/26378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/comments?post=26378"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/26378\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media\/20134"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media?parent=26378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/categories?post=26378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/tags?post=26378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}