{"id":29793,"date":"2021-06-21T10:10:00","date_gmt":"2021-06-21T07:10:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29793"},"modified":"2021-10-17T04:13:05","modified_gmt":"2021-10-17T01:13:05","slug":"paypal-payment-gateway-integration-i-php-med-paypal-rest-api","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/paypal-payment-gateway-integration-i-php-med-paypal-rest-api\/","title":{"rendered":"PayPal Payment Gateway-integration i PHP med PayPal REST API"},"content":{"rendered":"<p>PayPal \u00e4r en av de mest betrodda betalningsportarna p\u00e5 internet. Det anv\u00e4nds ofta p\u00e5 webbplatser f\u00f6r att acceptera betalning online. PayPal API-dokumentation \u00e4r dock inte l\u00e4tt att f\u00f6rst\u00e5. F\u00f6r en utvecklare som ska integrera PayPal-betalningsgatewayen f\u00f6rsta g\u00e5ngen tar det l\u00e5nga timmar att lyckas med den. Jag tillbringade en vansinnig m\u00e4ngd timmar med att l\u00e4sa PayPal API-dokumentation. Och senare inser att det inte finns n\u00e5got behov av att l\u00e4sa Paypal-dokumentationen f\u00f6r att integrera den.<\/p>\n<p>I den h\u00e4r artikeln studerar vi hur man integrerar en PayPal-betalningsgateway med PayPal REST API. Vi ska anv\u00e4nda GitHub-biblioteket fr\u00e5n Omnipay. Omnipay erbjuder ett enkelt och enkelt s\u00e4tt att integrera olika betalningsgateway i din webbapplikation. Deras kodstruktur \u00e4r ocks\u00e5 ren och effektiv. Utvecklare skulle \u00e4lska det.<\/p>\n<h3>F\u00e5 PayPal-klient-ID och klienthemlighet<\/h3>\n<p>F\u00f6r PayPal-integration p\u00e5 webbplatsen m\u00e5ste du f\u00f6rst skapa en REST API-app p\u00e5 ett PayPal-utvecklarkonto. N\u00e4r du har skapat appen f\u00e5r du klient-id och klienthemlighet som kr\u00e4vs i n\u00e4sta steg.<\/p>\n<p>F\u00f6r att skapa REST API-appen, g\u00e5 till ditt <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PayPal-utvecklarkonto<\/a> och logga in p\u00e5 instrumentpanelen.<\/p>\n<p>Klicka p\u00e5 menyn &quot;Mina appar och referenser&quot; i utvecklarens instrumentpanel. Klicka p\u00e5 knappen &#8217;Skapa app&#8217; under avsnittet REST API-appar.<\/p>\n<p>I n\u00e4sta steg fyller du i appnamnet s\u00e5 f\u00e5r du ditt klient-id och klienthemlighet. I mitt fall, i sk\u00e4rmdumpen nedan kan jag se sandbox-referenser. Det kan vara direktuppgifter i ditt fall. Eller s\u00e5 kan du ocks\u00e5 prova med dina sandl\u00e5dauppgifter.<\/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 i PHP med PayPal REST API\" ><\/a><\/p>\n<h3>Biblioteksinstallation och grundl\u00e4ggande installation<\/h3>\n<p>Som jag sa kommer vi att anv\u00e4nda <a href=\"https:\/\/github.com\/thephpleague\/omnipay-paypal\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a> f\u00f6r PayPal REST API-integration. Vi m\u00e5ste f\u00f6rst installera deras bibliotek med Composer. K\u00f6r kommandot nedan f\u00f6r att installera biblioteken.<\/p>\n<pre><code>composer require league\/omnipay omnipay\/paypal<\/code><\/pre>\n<p>N\u00e4r du har installerat biblioteket skapar du en konfigurationsfil d\u00e4r vi lagrar v\u00e5ra API-referenser, skriver DB-anslutning och initierar gatewayen.<\/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>H\u00e4r skickade jag parametern &#8217;Paypal_Rest&#8217; till skapningsmetoden f\u00f6r Omnipay. Omnipay i bakgrunden ringer till PayPal REST API medan du g\u00f6r betalningen genom det.<\/p>\n<p>Skapa sedan ett enkelt formul\u00e4r d\u00e4r en anv\u00e4ndare kan ange beloppet. F\u00f6r demo\u00e4ndam\u00e5l h\u00e5ller jag bara ett f\u00e4lt i formul\u00e4ret. Du kan ut\u00f6ka formul\u00e4ret enligt dina krav.<\/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>N\u00e4r betalningen \u00e4r klar b\u00f6r vi spara transaktionsuppgifterna i databastabellen. Skapa en databastabell genom att k\u00f6ra SQL-fr\u00e5gan nedan.<\/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>Denna tabell inneh\u00e5ller ingen fr\u00e4mmande nyckel eftersom den bara \u00e4r f\u00f6r demo\u00e4ndam\u00e5l. Anv\u00e4ndaren kan l\u00e4gga till en kolumn user_id i denna tabell f\u00f6r att referera till betalningen med anv\u00e4ndaren.<\/p>\n<h3>PayPal Payment Gateway-integration i PHP med PayPal REST API<\/h3>\n<p>N\u00e4r du anv\u00e4nder PayPal REST API omdirigerar anv\u00e4ndaren till PayPal f\u00f6r att slutf\u00f6ra betalningen. Efter betalning kommer anv\u00e4ndaren att omdirigera tillbaka till v\u00e5r applikation baserat p\u00e5 status f\u00f6r framg\u00e5ng eller misslyckande. Vi definierade dessa webbadresser i <code>config.php<\/code>filen ovan.<\/p>\n<p>En g\u00e5ng omdirigerar anv\u00e4ndaren tillbaka till v\u00e5r applikation med framg\u00e5ngssvar, vi m\u00e5ste utf\u00f6ra betalningen i v\u00e5r PHP-fil, vilket \u00e4r <code>success.php<\/code>i v\u00e5rt fall. Vi lagrar ocks\u00e5 betalningsinformationen efter betalningen med PayPal REST API. S\u00e5 v\u00e5r kod kommer att vara som f\u00f6ljer.<\/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>cancel.php<\/strong><\/p>\n<pre><code>&lt;h3&gt;User is canceled the payment.&lt;\/h3&gt;<\/code><\/pre>\n<h3>Skicka produktinformation till PayPal<\/h3>\n<p>I ovanst\u00e5ende kod skickar vi beloppet att betala p\u00e5 PayPal. Du kanske ocks\u00e5 vill skicka produktinformation. Dina kunder kan se denna produktinformation p\u00e5 betalningssidan innan de g\u00f6r en betalning.<\/p>\n<p>F\u00f6r att skicka produktinformationen m\u00e5ste du skicka &quot;objekt&quot; -arrayen till <code>purchase<\/code>\u00a0metoden enligt f\u00f6ljande.<\/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>H\u00e4r har jag skickat produktinformationen statiskt. Du b\u00f6r g\u00f6ra den dynamisk beroende p\u00e5 din produkt.<\/p>\n<p>Jag hoppas att du fick veta om PayPal Payment Gateway Integration i PHP. Jag skulle vilja h\u00f6ra dina tankar eller f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/acceptera-kreditkortsbetalningar-med-paypal-payments-pro-i-php\/\" title=\"Acceptera kreditkortsbetalningar med PayPal Payments Pro i PHP\">Acceptera kreditkortsbetalningar med PayPal Payments Pro i PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/acceptera-kreditkortsbetalning-med-authorize-net-payment-gateway-i-php\/\" title=\"Acceptera kreditkortsbetalning med Authorize.net Payment Gateway i PHP\">Acceptera kreditkortsbetalning med Authorize.net Payment Gateway i PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/en-guide-for-randintegrering-pa-webbplats-med-php\/\" title=\"En guide f\u00f6r randintegrering p\u00e5 webbplats med PHP\">En guide f\u00f6r randintegrering p\u00e5 webbplats med PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I det h\u00e4r inl\u00e4gget visar vi hur man integrerar PayPal-betalningsgateway i PHP med PayPal REST API. Med PayPal kan du acceptera betalning online fr\u00e5n dina kunder<\/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":[279],"tags":[850],"class_list":["post-29793","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29793"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29793\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20134"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}