...
✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

PayPal Payment Gateway-Integration in Laravel

93

Kürzlich habe ich einen Artikel über die Integration von PayPal Payment Gateway in PHP veröffentlicht. In diesem Artikel fragte einer unserer Leser nach der Integration des PayPal-Zahlungsgateways in Laravel. Obwohl Laravel mit PHP erstellt wurde, müssen sie ihren eigenen Standards folgen. Sie müssen Ihren einfachen PHP-Code gemäß Laravel-Flow anpassen. In diesem Artikel zeige ich Ihnen, wie Sie Zahlungen auf Ihrer Laravel-Website mit der PayPal Rest API akzeptieren.

PayPal ist eine der vertrauenswürdigsten Marken, die Online-Zahlungen akzeptiert. PayPal bietet verschiedene Möglichkeiten, sein Zahlungssystem in Webanwendungen zu integrieren. Einer der Dienste ist die PayPal Rest API, die wir für dieses Tutorial verwenden werden. Um zu beginnen, müssen Sie zuerst Ihre Client-ID und Ihr Client-Geheimnis abrufen.

Gehen Sie zu Ihrem PayPal-Entwicklerkonto und melden Sie sich dort an. Klicken Sie im Entwickler-Dashboard auf das Menü "Meine Apps & Zugangsdaten". Klicken Sie dann im Abschnitt REST-API-Apps auf die Schaltfläche "App erstellen".

Befolgen Sie die Anweisungen, und Sie erhalten Ihre Sandbox- und Live-Anmeldeinformationen. Kopieren Sie zunächst die Client-ID und das Client-Geheimnis des Sandbox-Modus.

PayPal Payment Gateway-Integration in Laravel

Grundlegende Einrichtung in Laravel, um Zahlungen mit PayPal zu akzeptieren

Wenn Kunden die Zahlung auf Ihrer Website vornehmen, müssen Sie die Zahlungsdaten zur späteren Verwendung speichern. Erstellen Sie in der Datenbank eine Tabelle "Zahlungen", um die Zahlungsdetails zu speichern. Erstellen Sie eine Migration für die Tabelle "Zahlungen" mit dem Befehl:

php artisan make:migration create_payments_table

Öffnen Sie die Migrationsdatei und ändern Sie die Spalten wie folgt.

<?php
...
...
public function up()
{
    Schema::create('payments', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('payment_id');
        $table->string('payer_id');
        $table->string('payer_email');
        $table->float('amount', 10, 2);
        $table->string('currency');
        $table->string('payment_status');
        $table->timestamps();
    });
}

Führen Sie die obige Migration mit dem folgenden Befehl aus.

php artisan migrate

Dieser Befehl erstellt eine Tabelle "Zahlungen" in Ihrer Datenbank. Erstellen Sie als Nächstes ein Modell, das der Tabelle "Zahlungen" entspricht.

php artisan make:model Payment

Fügen Sie anschließend die PayPal-Anmeldeinformationen in Ihre .envDatei ein.

PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID
PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET
PAYPAL_CURRENCY=USD

Löschen Sie den Konfigurationscache mit dem Befehl:

php artisan config:cache

Ich habe die Währung ‘USD’ bestanden. Der Benutzer kann es nach Bedarf ändern.

Lassen Sie uns die Routen definieren, die wir in den nächsten Schritten benötigen.

routen/web.php

<?php
...
...
Route::get('payment', 'PaymentController@index');
Route::post('charge', 'PaymentController@charge');
Route::get('paymentsuccess', 'PaymentController@payment_success');
Route::get('paymenterror', 'PaymentController@payment_error');

PayPal Payment Gateway-Integration in Laravel

Die Integration der API für Zahlungsgateways in die Anwendung ist ziemlich komplex. Glücklicherweise hat die Omnipay-Bibliothek den Entwicklern das Leben leicht gemacht. Omnipay ist die beliebteste Zahlungsverarbeitungsbibliothek für PHP. Es gibt einen einfachen und sauberen Code für die Integration verschiedener Zahlungsgateways. Installieren Sie die Omnipay-Bibliothek mit dem Befehl:

composer require league/omnipay omnipay/paypal

Erstellen Sie nun einen Controller PaymentControllerund definieren Sie die in der Routendatei genannten Methoden.

php artisan make:controller PaymentController

PaymentController.php

<?php
  
namespace AppHttpControllers;
  
use IlluminateHttpRequest;
use OmnipayOmnipay;
use AppPayment;
  
class PaymentController extends Controller
{
  
    public $gateway;
  
    public function __construct()
    {
        $this->gateway = Omnipay::create('PayPal_Rest');
        $this->gateway->setClientId(env('PAYPAL_CLIENT_ID'));
        $this->gateway->setSecret(env('PAYPAL_CLIENT_SECRET'));
        $this->gateway->setTestMode(true); //set it to 'false' when go live
    }
  
    public function index()
    {
        return view('payment');
    }
  
    public function charge(Request $request)
    {
        if($request->input('submit'))
        {
            try {
                $response = $this->gateway->purchase(array(
                    'amount' => $request->input('amount'),
                    'currency' => env('PAYPAL_CURRENCY'),
                    'returnUrl' => url('paymentsuccess'),
                    'cancelUrl' => url('paymenterror'),
                ))->send();
           
                if ($response->isRedirect()) {
                    $response->redirect(); // this will automatically forward the customer
                } else {
                    // not successful
                    return $response->getMessage();
                }
            } catch(Exception $e) {
                return $e->getMessage();
            }
        }
    }
  
    public function payment_success(Request $request)
    {
        // Once the transaction has been approved, we need to complete it.
        if ($request->input('paymentId') && $request->input('PayerID'))
        {
            $transaction = $this->gateway->completePurchase(array(
                'payer_id'             => $request->input('PayerID'),
                'transactionReference' => $request->input('paymentId'),
            ));
            $response = $transaction->send();
          
            if ($response->isSuccessful())
            {
                // The customer has successfully paid.
                $arr_body = $response->getData();
          
                // Insert transaction data into the database
                $isPaymentExist = Payment::where('payment_id', $arr_body['id'])->first();
          
                if(!$isPaymentExist)
                {
                    $payment = new Payment;
                    $payment->payment_id = $arr_body['id'];
                    $payment->payer_id = $arr_body['payer']['payer_info']['payer_id'];
                    $payment->payer_email = $arr_body['payer']['payer_info']['email'];
                    $payment->amount = $arr_body['transactions'][0]['amount']['total'];
                    $payment->currency = env('PAYPAL_CURRENCY');
                    $payment->payment_status = $arr_body['state'];
                    $payment->save();
                }
          
                return "Payment is successful. Your transaction id is: ". $arr_body['id'];
            } else {
                return $response->getMessage();
            }
        } else {
            return 'Transaction is declined';
        }
    }
  
    public function payment_error()
    {
        return 'User is canceled the payment.';
    }
  
}

Im obigen Controller holen wir den Betrag aus dem HTML-Formular und senden einen Benutzer zur Zahlung an PayPal. Bei erfolgreicher Zahlung speichern wir alle Transaktionsdetails in der Tabelle "Zahlungen".

Erstellen Sie schließlich eine Blade-Datei mit dem Namen payment.blade.phpund fügen Sie den folgenden Code hinzu.

<form action="{{ url('charge') }}" method="post">
    <input type="text" name="amount" />
    {{ csrf_field() }}
    <input type="submit" name="submit" value="Pay Now">
</form>

Wenn wir dieses Formular absenden, geht die Kontrolle an die chargeFunktion in der PaymentControllerund der Controller verarbeitet den Restzahlungsfluss.

Produktinformationen an PayPal senden

In den vorherigen Schritten senden wir den zu zahlenden Betrag an PayPal. Sie können auch Produktinformationen senden. Der Benutzer kann diese Produktdetails auf der Zahlungsseite sehen, bevor er eine Zahlung tätigt.

Um die Produktinformationen zu senden, müssen Sie das Array ‘items’ purchasewie folgt an die Methode übergeben.

$response = $this->gateway->purchase(array(
    'amount' => $request->input('amount'),
    'items' => array(
        array(
            'name' => 'Course Subscription',
            'price' => $request->input('amount'),
            'description' => 'Get access to premium courses.',
            'quantity' => 1
        ),
    ),
    'currency' => env('PAYPAL_CURRENCY'),
    'returnUrl' => url('paymentsuccess'),
    'cancelUrl' => url('paymenterror'),
))->send();

Hier übergebe ich die Produktdetails statisch. Sie sollten es abhängig von Ihrem Produkt dynamisch gestalten.

Ich hoffe, Sie haben die Integration des PayPal-Zahlungsgateways in Laravel kennengelernt. Bitte teilen Sie Ihre Gedanken und Vorschläge im Kommentarbereich unten mit.

Zum Thema passende Artikel

Aufnahmequelle: artisansweb.net

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen