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

PayPal Payment Gateway-integration i Laravel

24

Nyligen publicerade jag en artikel om PayPal Payment Gateway Integration i PHP. I den artikeln frågade en av våra läsare om att integrera PayPal-betalningsporten i Laravel. Även om Laravel är byggt med PHP har de sina egna standarder att följa. Du måste justera din vanliga PHP-kod enligt Laravel-flöde. I den här artikeln visar jag dig hur du accepterar betalning på din Laravel-webbplats med PayPal Rest API.

PayPal är ett av de mest betrodda varumärkena som accepterar onlinebetalning. PayPal erbjuder olika sätt att integrera sitt betalningssystem i webbapplikationer. En av tjänsterna är PayPal Rest API som vi kommer att använda för denna handledning. För att komma igång måste du först ta tag i ditt klient-id och klienthemlighet.

Gå över till ditt PayPal-utvecklarkonto och logga in på det. Klicka på menyn ‘Mina appar och referenser’ i instrumentpanelen för utvecklare. Klicka sedan på knappen "Skapa app" under avsnittet REST API-appar.

Följ stegen enligt uppmaningen så får du din sandlåda och live-referenser. För nu, kopiera klient-id och klienthemlighet i sandbox-läge.

PayPal Payment Gateway-integration i Laravel

Grundläggande installation i Laravel för att acceptera betalning med PayPal

När kunderna gör betalningen på din webbplats måste du spara betalningsinformationen för senare användning. Skapa en ‘betalningstabell’ i databasen för att lagra betalningsinformationen. Skapa en migrering för tabellen ‘betalningar’ med kommandot:

php artisan make:migration create_payments_table

Öppna migreringsfilen och ändra kolumnerna enligt följande.

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

Kör ovanstående migrering med kommandot nedan.

php artisan migrate

Detta kommando skapar en "betalningstabell" i din databas. Skapa sedan en modell som motsvarar tabellen ‘betalningar’.

php artisan make:model Payment

Efter detta, lägg till PayPal-referenser i din .envfil.

PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID
PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET
PAYPAL_CURRENCY=USD

Rensa konfigurationscachen med kommandot:

php artisan config:cache

Jag har klarat "USD" -valutan. Användaren kan ändra det enligt kraven.

Låt oss definiera de rutter som vi kommer att behöva i nästa steg.

rutter / 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 i Laravel

Att integrera API för betalningsgateways i applikationen är ganska komplicerat. Lyckligtvis gjorde Omnipay-biblioteket utvecklarnas liv lätt. Omnipay är det mest populära betalningshanteringsbiblioteket för PHP. Det ger en enkel och ren kod för att integrera olika betalningsportaler. Installera Omnipay-biblioteket med kommandot:

composer require league/omnipay omnipay/paypal

Skapa nu en styrenhet PaymentControlleroch definiera de metoder som nämns i ruttfilen.

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

I ovanstående kontroller hämtar vi beloppet från HTML-formuläret och skickar en användare till PayPal för betalning. Vid den lyckade betalningen lagrar vi alla transaktionsuppgifter i tabellen ‘betalningar’.

Slutligen skapa en bladfil som heter payment.blade.phpoch lägg till kod nedan i den.

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

När vi skickar det här formuläret går kontrollen till chargefunktionen i PaymentControllerstyrenheten och behandlar resten betalningsflödet.

Skicka produktinformation till PayPal

I de föregående stegen skickar vi beloppet att betala på PayPal. Du kanske också vill skicka produktinformation. Användaren kan se denna produktinformation på betalningssidan innan han gör en betalning.

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

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

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

Jag hoppas att du fick veta om PayPal-betalningsgatewayintegration i Laravel. Dela dina tankar och 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