{"id":26336,"date":"2021-06-21T10:17:00","date_gmt":"2021-06-21T07:17:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26336"},"modified":"2021-10-18T02:27:45","modified_gmt":"2021-10-17T23:27:45","slug":"paypal-payment-gateway-integration-in-php-uber-die-paypal-rest-api","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/paypal-payment-gateway-integration-in-php-uber-die-paypal-rest-api\/","title":{"rendered":"PayPal Payment Gateway-Integration in PHP \u00fcber die PayPal REST API"},"content":{"rendered":"<p>PayPal ist eines der vertrauensw\u00fcrdigsten Zahlungsgateways im Internet. Es wird h\u00e4ufig auf Websites verwendet, um Online-Zahlungen zu akzeptieren. Die Dokumentation der PayPal-API ist jedoch nicht leicht zu verstehen. F\u00fcr einen Entwickler, der das PayPal-Zahlungsgateway zum ersten Mal integrieren wird, wird es viele Stunden dauern, bis es erfolgreich ist. Ich habe wahnsinnig viele Stunden damit verbracht, die PayPal-API-Dokumentation zu lesen. Und stellen Sie sp\u00e4ter fest, dass Sie die Paypal-Dokumentation nicht gr\u00fcndlich lesen m\u00fcssen, um sie zu integrieren.<\/p>\n<p>In diesem Artikel untersuchen wir, wie Sie ein PayPal-Zahlungsgateway mithilfe der PayPal-REST-API integrieren. Wir werden die von Omnipay bereitgestellte GitHub-Bibliothek verwenden. Omnipay bietet eine saubere und einfache M\u00f6glichkeit, verschiedene Zahlungsgateways in Ihre Webanwendung zu integrieren. Auch ihre Codestruktur ist sauber und effizient. Entwickler w\u00fcrden es lieben.<\/p>\n<h3>Holen Sie sich die PayPal-Kunden-ID und das Kundengeheimnis<\/h3>\n<p>F\u00fcr die PayPal-Integration in die Website m\u00fcssen Sie zun\u00e4chst eine REST-API-App auf einem PayPal-Entwicklerkonto erstellen. Sobald Sie die App erstellt haben, erhalten Sie die Client-ID und das Client-Geheimnis, die in den n\u00e4chsten Schritten ben\u00f6tigt werden.<\/p>\n<p>Um eine REST-API-App zu erstellen, gehen Sie zu Ihrem <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PayPal-Entwicklerkonto<\/a> und melden Sie sich beim Dashboard an.<\/p>\n<p>Klicken Sie im Entwickler-Dashboard auf das Men\u00fc \u201eMeine Apps &#038; Zugangsdaten&#8220;. Klicken Sie im Abschnitt REST-API-Apps auf die Schaltfl\u00e4che &quot;App erstellen&quot;.<\/p>\n<p>Geben Sie im n\u00e4chsten Schritt den App-Namen ein und Sie erhalten Ihre Client-ID und Ihr Client-Geheimnis. In meinem Fall kann ich im folgenden Screenshot Sandbox-Anmeldeinformationen sehen. In Ihrem Fall kann es sich um Live-Anmeldeinformationen handeln. Oder Sie k\u00f6nnen es auch mit Ihren Sandbox-Anmeldeinformationen versuchen.<\/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=\"PayPal Payment Gateway-Integration in PHP \u00fcber die PayPal REST API\" ><\/a><\/p>\n<h3>Bibliotheksinstallation und grundlegende Einrichtung<\/h3>\n<p>Wie gesagt, wir werden <a href=\"https:\/\/github.com\/thephpleague\/omnipay-paypal\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a> f\u00fcr die PayPal REST API-Integration verwenden. Wir m\u00fcssen zuerst ihre Bibliotheken mit dem Composer installieren. F\u00fchren Sie den folgenden Befehl aus, um die Bibliotheken zu installieren.<\/p>\n<pre><code>composer require league\/omnipay omnipay\/paypal<\/code><\/pre>\n<p>Erstellen Sie nach der Installation der Bibliothek eine Konfigurationsdatei, in der wir unsere API-Anmeldeinformationen speichern, eine DB-Verbindung schreiben und das Gateway initialisieren.<\/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>Hier habe ich den Parameter &#8218;Paypal_Rest&#8216; an die Methode create von Omnipay \u00fcbergeben. Omnipay ruft im Hintergrund die PayPal-REST-API auf, w\u00e4hrend die Zahlung dar\u00fcber ausgef\u00fchrt wird.<\/p>\n<p>Erstellen Sie als N\u00e4chstes ein einfaches Formular, in das ein Benutzer den Betrag eingeben kann. Zu Demozwecken behalte ich nur ein Feld im Formular. Sie k\u00f6nnen das Formular nach Ihren W\u00fcnschen erweitern.<\/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>Wenn die Zahlung abgeschlossen ist, sollten wir die Transaktionsdetails in der Datenbanktabelle speichern. Erstellen Sie eine Datenbanktabelle, indem Sie die folgende SQL-Abfrage ausf\u00fchren.<\/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>Diese Tabelle enth\u00e4lt keinen Fremdschl\u00fcssel, da sie nur zu Demozwecken dient. Der Benutzer kann in dieser Tabelle eine Spalte user_id hinzuf\u00fcgen, um auf die Zahlung mit dem Benutzer zu verweisen.<\/p>\n<h3>PayPal Payment Gateway-Integration in PHP \u00fcber die PayPal REST API<\/h3>\n<p>Bei Verwendung der PayPal REST API wird der Benutzer zu PayPal umgeleitet, um die Zahlung abzuschlie\u00dfen. Nach der Zahlung wird der Benutzer basierend auf dem Erfolgs- oder Fehlerstatus zu unserer Anwendung zur\u00fcckgeleitet. Wir haben diese URLs in der <code>config.php<\/code>obigen Datei definiert .<\/p>\n<p>Sobald der Benutzer mit erfolgreicher Antwort zu unserer Anwendung zur\u00fcckkehrt, m\u00fcssen wir die Zahlung in unserer PHP-Datei ausf\u00fchren, was <code>success.php<\/code>in unserem Fall der Fall ist. Wir speichern die Zahlungsinformationen auch nach Ausf\u00fchrung der Zahlung \u00fcber die PayPal REST API. Unser Code wird also wie folgt aussehen.<\/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>erfolg.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>abbrechen.php<\/strong><\/p>\n<pre><code>&lt;h3&gt;User is canceled the payment.&lt;\/h3&gt;<\/code><\/pre>\n<h3>Produktinformationen an PayPal senden<\/h3>\n<p>Im obigen Code senden wir den Betrag zur Zahlung an PayPal. Sie k\u00f6nnen auch Produktinformationen senden. Ihre Kunden k\u00f6nnen diese Produktdetails auf der Zahlungsseite sehen, bevor sie eine Zahlung vornehmen.<\/p>\n<p>Um die Produktinformationen zu senden, m\u00fcssen Sie das Array &#8218;items&#8216; <code>purchase<\/code>wie folgt an die Methode \u00fcbergeben.<\/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>Hier habe ich die Produktdetails statisch \u00fcbergeben. Sie sollten es abh\u00e4ngig von Ihrem Produkt dynamisch gestalten.<\/p>\n<p>Ich hoffe, Sie haben die Integration von PayPal Payment Gateway in PHP kennengelernt. Ich w\u00fcrde gerne Ihre Gedanken oder Vorschl\u00e4ge im Kommentarbereich unten h\u00f6ren.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/akzeptieren-sie-kreditkartenzahlungen-mit-paypal-payments-pro-in-php\/\" title=\"Akzeptieren Sie Kreditkartenzahlungen mit PayPal Payments Pro in PHP\">Akzeptieren Sie Kreditkartenzahlungen mit PayPal Payments Pro in PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/akzeptieren-sie-kreditkartenzahlungen-mit-authorize-net-payment-gateway-in-php\/\" title=\"Akzeptieren Sie Kreditkartenzahlungen mit Authorize.net Payment Gateway in PHP\">Akzeptieren Sie Kreditkartenzahlungen mit Authorize.net Payment Gateway in PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/eine-anleitung-fuer-die-stripe-integration-in-eine-website-mit-php\/\" title=\"Eine Anleitung f\u00fcr die Stripe-Integration in eine Website mit PHP\">Eine Anleitung f\u00fcr die Stripe-Integration in eine Website mit PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <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 diesem Beitrag zeigen wir, wie Sie das PayPal-Zahlungsgateway mithilfe der PayPal-REST-API in PHP integrieren. Mit PayPal k\u00f6nnen Sie Zahlungen von Ihren Kunden online akzeptieren<\/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":[272],"tags":[845],"class_list":["post-26336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-3","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/26336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=26336"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/26336\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/20134"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=26336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=26336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=26336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}