✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

PayPal Payment Gateway-integration i PHP med PayPal REST API

47

PayPal är en av de mest betrodda betalningsportarna på internet. Det används ofta på webbplatser för att acceptera betalning online. PayPal API-dokumentation är dock inte lätt att förstå. För en utvecklare som ska integrera PayPal-betalningsgatewayen första gången tar det långa timmar att lyckas med den. Jag tillbringade en vansinnig mängd timmar med att läsa PayPal API-dokumentation. Och senare inser att det inte finns något behov av att läsa Paypal-dokumentationen för att integrera den.

I den här artikeln studerar vi hur man integrerar en PayPal-betalningsgateway med PayPal REST API. Vi ska använda GitHub-biblioteket från Omnipay. Omnipay erbjuder ett enkelt och enkelt sätt att integrera olika betalningsgateway i din webbapplikation. Deras kodstruktur är också ren och effektiv. Utvecklare skulle älska det.

Få PayPal-klient-ID och klienthemlighet

För PayPal-integration på webbplatsen måste du först skapa en REST API-app på ett PayPal-utvecklarkonto. När du har skapat appen får du klient-id och klienthemlighet som krävs i nästa steg.

För att skapa REST API-appen, gå till ditt PayPal-utvecklarkonto och logga in på instrumentpanelen.

Klicka på menyn "Mina appar och referenser" i utvecklarens instrumentpanel. Klicka på knappen ‘Skapa app’ under avsnittet REST API-appar.

I nästa steg fyller du i appnamnet så får du ditt klient-id och klienthemlighet. I mitt fall, i skärmdumpen nedan kan jag se sandbox-referenser. Det kan vara direktuppgifter i ditt fall. Eller så kan du också prova med dina sandlådauppgifter.

PayPal Payment Gateway-integration i PHP med PayPal REST API

Biblioteksinstallation och grundläggande installation

Som jag sa kommer vi att använda Omnipay för PayPal REST API-integration. Vi måste först installera deras bibliotek med Composer. Kör kommandot nedan för att installera biblioteken.

composer require league/omnipay omnipay/paypal

När du har installerat biblioteket skapar du en konfigurationsfil där vi lagrar våra API-referenser, skriver DB-anslutning och initierar gatewayen.

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

Här skickade jag parametern ‘Paypal_Rest’ till skapningsmetoden för Omnipay. Omnipay i bakgrunden ringer till PayPal REST API medan du gör betalningen genom det.

Skapa sedan ett enkelt formulär där en användare kan ange beloppet. För demoändamål håller jag bara ett fält i formuläret. Du kan utöka formuläret enligt dina krav.

form.html

<form action="charge.php" method="post">
    <input type="text" name="amount" value="20.00" />
    <input type="submit" name="submit" value="Pay Now">
</form>

När betalningen är klar bör vi spara transaktionsuppgifterna i databastabellen. Skapa en databastabell genom att köra SQL-frågan nedan.

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;

Denna tabell innehåller ingen främmande nyckel eftersom den bara är för demoändamål. Användaren kan lägga till en kolumn user_id i denna tabell för att referera till betalningen med användaren.

PayPal Payment Gateway-integration i PHP med PayPal REST API

När du använder PayPal REST API omdirigerar användaren till PayPal för att slutföra betalningen. Efter betalning kommer användaren att omdirigera tillbaka till vår applikation baserat på status för framgång eller misslyckande. Vi definierade dessa webbadresser i config.phpfilen ovan.

En gång omdirigerar användaren tillbaka till vår applikation med framgångssvar, vi måste utföra betalningen i vår PHP-fil, vilket är success.phpi vårt fall. Vi lagrar också betalningsinformationen efter betalningen med PayPal REST API. Så vår kod kommer att vara som följer.

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();
    }
}

success.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';
}

cancel.php

<h3>User is canceled the payment.</h3>

Skicka produktinformation till PayPal

I ovanstående kod skickar vi beloppet att betala på PayPal. Du kanske också vill skicka produktinformation. Dina kunder kan se denna produktinformation på betalningssidan innan de gör en betalning.

För att skicka produktinformationen måste du skicka "objekt" -arrayen till purchase metoden enligt följande.

$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();

Här har jag skickat produktinformationen statiskt. Du bör göra den dynamisk beroende på din produkt.

Jag hoppas att du fick veta om PayPal Payment Gateway Integration i PHP. Jag skulle vilja höra dina tankar eller förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer