...
✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Integracja PayPal Payment Gateway w PHP za pomocą PayPal REST API

321

PayPal to jedna z najbardziej zaufanych bramek płatniczych w Internecie. Jest szeroko stosowany na stronach internetowych do przyjmowania płatności online. Jednak dokumentacja API PayPal nie jest łatwa do zrozumienia. Dla programisty, który zamierza zintegrować bramkę płatności PayPal po raz pierwszy, odniesienie sukcesu zajmie wiele godzin. Spędziłem szaloną ilość godzin czytając dokumentację API PayPal. A później zdaj sobie sprawę, że nie ma potrzeby szczegółowego czytania dokumentacji Paypal, aby ją zintegrować.

W tym artykule dowiemy się, jak zintegrować bramkę płatności PayPal za pomocą PayPal REST API. Będziemy korzystać z biblioteki GitHub dostarczonej przez Omnipay. Omnipay zapewnia czysty i łatwy sposób na integrację różnych bramek płatności w Twojej aplikacji internetowej. Ich struktura kodu jest również przejrzysta i wydajna. Deweloperzy to pokochają.

Uzyskaj identyfikator klienta PayPal i tajny klucz klienta

Aby zintegrować PayPal z witryną, musisz najpierw utworzyć aplikację REST API na koncie programisty PayPal. Po utworzeniu aplikacji otrzymasz identyfikator klienta i tajny klucz klienta, które będą wymagane w kolejnych krokach.

Aby stworzyć aplikację REST API, przejdź do swojego konta programisty PayPal i zaloguj się do pulpitu nawigacyjnego.

W panelu programisty kliknij menu „Moje aplikacje i poświadczenia". Kliknij przycisk „Utwórz aplikację” w sekcji Aplikacje REST API.

W następnym kroku wypełnij nazwę aplikacji, a otrzymasz swój identyfikator klienta i klucz klienta. W moim przypadku na poniższym zrzucie ekranu widzę poświadczenia piaskownicy. W twoim przypadku mogą to być dane uwierzytelniające na żywo. Możesz też spróbować z poświadczeniami piaskownicy.

Integracja PayPal Payment Gateway w PHP za pomocą PayPal REST API

Instalacja biblioteki i konfiguracja podstawowa

Jak już wspomniałem, do integracji PayPal REST API użyjemy Omnipay. Musimy najpierw zainstalować ich biblioteki za pomocą Composera. Uruchom poniższe polecenie, aby zainstalować biblioteki.

composer require league/omnipay omnipay/paypal

Po zainstalowaniu biblioteki utwórz plik konfiguracyjny, w którym przechowujemy nasze poświadczenia API, zapisujemy połączenie DB i inicjujemy bramę.

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

Tutaj przekazałem parametr ‘Paypal_Rest’ do metody tworzenia Omnipay. Omnipay w tle wywołuje PayPal REST API podczas dokonywania płatności za jego pośrednictwem.

Następnie utwórz prosty formularz, w którym użytkownik może wprowadzić kwotę. Dla celów demonstracyjnych zachowuję tylko jedno pole w formularzu. Możesz rozszerzyć formularz zgodnie z wymaganiami.

formularz.html

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

Po zakończeniu płatności powinniśmy zapisać szczegóły transakcji w tabeli bazy danych. Utwórz tabelę bazy danych, uruchamiając poniższe zapytanie SQL.

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;

Ta tabela nie zawiera klucza obcego, ponieważ służy tylko do celów demonstracyjnych. Użytkownik może dodać kolumnę user_id w tej tabeli, aby odnieść się do płatności z użytkownikiem.

Integracja PayPal Payment Gateway w PHP za pomocą PayPal REST API

Korzystając z PayPal REST API, użytkownik przekieruje do PayPal, aby dokończyć płatność. Po dokonaniu płatności użytkownik przekieruje z powrotem do naszej aplikacji na podstawie statusu sukcesu lub niepowodzenia. Zdefiniowaliśmy te adresy URL w config.phppowyższym pliku.

Gdy użytkownik przekieruje z powrotem do naszej aplikacji z odpowiedzią powodzenia, musimy wykonać płatność w naszym pliku PHP, co jest success.phpw naszym przypadku. Przechowujemy również informacje o płatności po wykonaniu płatności za pomocą PayPal REST API. Więc nasz kod będzie wyglądał następująco.

opłata.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();
    }
}

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

anuluj.php

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

Wyślij informacje o produkcie do PayPal

W powyższym kodzie wysyłamy kwotę do zapłaty na PayPal. Możesz również wysłać informacje o produkcie. Twoi klienci mogą zobaczyć te szczegóły produktu na stronie płatności przed dokonaniem płatności.

Aby wysłać informacje o produkcie, musisz przekazać tablicę ‘items’ do purchase metody w następujący sposób.

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

Tutaj przekazałem dane produktu statycznie. Powinieneś nadać mu dynamikę w zależności od produktu.

Mam nadzieję, że wiesz już o integracji PayPal Payment Gateway w PHP. Chciałbym usłyszeć Twoje przemyślenia lub sugestie w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów