...
✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Integrazione del gateway di pagamento PayPal in Laravel

219

Recentemente ho pubblicato un articolo sull’integrazione del gateway di pagamento PayPal in PHP. In quell’articolo, uno dei nostri lettori ha chiesto di integrare il gateway di pagamento PayPal in Laravel. Sebbene Laravel sia costruito utilizzando PHP, hanno i propri standard da seguire. Devi modificare il tuo semplice codice PHP secondo il flusso di Laravel. In questo articolo, ti mostro come accettare pagamenti sul tuo sito web Laravel utilizzando PayPal Rest API.

PayPal è uno dei marchi più affidabili per accettare pagamenti online. PayPal offre diversi modi per integrare il proprio sistema di pagamento nelle applicazioni web. Uno dei servizi è PayPal Rest API che utilizzeremo per questo tutorial. Per iniziare, devi prima prendere il tuo ID cliente e il tuo segreto cliente.

Vai al tuo account sviluppatore PayPal e accedi ad esso. Nella dashboard dello sviluppatore, fai clic sul menu "Le mie app e credenziali". Quindi fare clic sul pulsante "Crea app" nella sezione delle app dell’API REST.

Segui i passaggi come richiesto e otterrai la sandbox e le credenziali live. Per ora, copia l’ID client e il segreto client della modalità sandbox.

Integrazione del gateway di pagamento PayPal in Laravel

Configurazione di base in Laravel per accettare pagamenti tramite PayPal

Quando i clienti effettuano il pagamento sul tuo sito web, devi memorizzare i dettagli di pagamento per un uso successivo. Crea una tabella "pagamenti" nel database per memorizzare i dettagli del pagamento. Crea una migrazione per la tabella "pagamenti" utilizzando il comando:

php artisan make:migration create_payments_table

Aprire il file di migrazione e modificare le colonne come segue.

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

Eseguire la migrazione precedente utilizzando il comando seguente.

php artisan migrate

Questo comando creerà una tabella "pagamenti" nel tuo database. Quindi, crea un modello corrispondente alla tabella "pagamenti".

php artisan make:model Payment

Successivamente, aggiungi le credenziali PayPal nel tuo .envfile.

PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID
PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET
PAYPAL_CURRENCY=USD

Svuota la cache di configurazione usando il comando:

php artisan config:cache

Ho superato la valuta "USD". L’utente può modificarlo secondo i requisiti.

Definiamo i percorsi di cui avremo bisogno nei prossimi passi.

route/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');

Integrazione del gateway di pagamento PayPal in Laravel

L’integrazione dell’API dei gateway di pagamento nell’applicazione è una cosa piuttosto complessa. Fortunatamente, la libreria Omnipay ha semplificato la vita degli sviluppatori. Omnipay è la libreria di elaborazione dei pagamenti più popolare per PHP. Fornisce un codice semplice e pulito per l’integrazione di diversi gateway di pagamento. Installa la libreria Omnipay usando il comando:

composer require league/omnipay omnipay/paypal

Ora, crea un controller PaymentControllere definisci i metodi menzionati nel file di route.

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

Nel controller sopra, prendiamo l’importo dal modulo HTML e inviamo un utente a PayPal per il pagamento. Se il pagamento è andato a buon fine, memorizziamo tutti i dettagli della transazione nella tabella "pagamenti".

Infine, crea un file blade chiamato payment.blade.phpe aggiungi il codice di seguito.

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

Quando inviamo questo modulo, il controllo va alla chargefunzione PaymentControllere il controller elabora il flusso di pagamento rimanente.

Invia le informazioni sul prodotto a PayPal

Nei passaggi precedenti, stiamo inviando l’importo da pagare su PayPal. Potresti anche voler inviare informazioni sul prodotto. L’utente può vedere questi dettagli del prodotto nella pagina di pagamento prima di effettuare un pagamento.

Per inviare le informazioni sul prodotto, è necessario passare l’array "items" al purchasemetodo come segue.

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

Qui sto passando i dettagli del prodotto in modo statico. Dovresti renderlo dinamico a seconda del tuo prodotto.

Spero che tu sappia dell’integrazione del gateway di pagamento PayPal in Laravel. Per favore condividi i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.

articoli Correlati

Fonte di registrazione: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More