Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Intégration de la passerelle de paiement PayPal dans Laravel

731

Récemment, j’ai publié un article sur l’ intégration de la passerelle de paiement PayPal en PHP. Dans cet article, l’un de nos lecteurs a posé des questions sur l’intégration de la passerelle de paiement PayPal dans Laravel. Bien que Laravel soit construit en PHP, ils ont leurs propres normes à suivre. Vous devez ajuster votre code PHP brut selon le flux Laravel. Dans cet article, je vous montre comment accepter le paiement sur votre site Web Laravel à l’aide de l’API PayPal Rest.

PayPal est l’une des marques les plus fiables pour accepter les paiements en ligne. PayPal propose différentes manières d’intégrer son système de paiement dans des applications Web. L’un des services est l’API PayPal Rest que nous utiliserons pour ce didacticiel. Pour commencer, vous devez d’abord récupérer votre identifiant client et votre secret client.

Rendez-vous sur votre compte développeur PayPal et connectez-vous. Dans le tableau de bord du développeur, cliquez sur le menu "Mes applications et informations d’identification". Cliquez ensuite sur le bouton « Créer une application » dans la section des applications de l’API REST.

Suivez les étapes demandées et vous obtiendrez votre bac à sable et vos informations d’identification en direct. Pour l’instant, copiez l’ID client et le secret client du mode sandbox.

Intégration de la passerelle de paiement PayPal dans Laravel

Configuration de base dans Laravel pour accepter le paiement via PayPal

Lorsque les clients effectuent le paiement sur votre site Web, vous devez stocker les détails du paiement pour une utilisation ultérieure. Créez une table « paiements » dans la base de données pour stocker les détails du paiement. Créez une migration pour la table ‘paiements’ à l’aide de la commande :

php artisan make:migration create_payments_table

Ouvrez le fichier de migration et modifiez les colonnes comme suit.

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

Exécutez la migration ci-dessus à l’aide de la commande ci-dessous.

php artisan migrate

Cette commande créera une table ‘paiements’ dans votre base de données. Ensuite, créez un modèle correspondant à la table ‘paiements’.

php artisan make:model Payment

Après cela, ajoutez les informations d’identification PayPal dans votre .envfichier.

PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID
PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET
PAYPAL_CURRENCY=USD

Videz le cache de configuration à l’aide de la commande :

php artisan config:cache

J’ai passé la devise ‘USD’. L’utilisateur peut le modifier selon les besoins.

Définissons les routes dont nous aurons besoin dans les prochaines étapes.

itinéraires/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');

Intégration de la passerelle de paiement PayPal dans Laravel

L’intégration de l’API des passerelles de paiement dans l’application est assez complexe. Heureusement, la bibliothèque Omnipay a facilité la vie des développeurs. Omnipay est la bibliothèque de traitement des paiements la plus populaire pour PHP. Il donne un code simple et propre pour intégrer différentes passerelles de paiement. Installez la bibliothèque Omnipay à l’aide de la commande :

composer require league/omnipay omnipay/paypal

Maintenant, créez un contrôleur PaymentControlleret définissez les méthodes mentionnées dans le fichier de route.

php artisan make:controller PaymentController

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

Dans le contrôleur ci-dessus, nous saisissons le montant du formulaire HTML et envoyons un utilisateur à PayPal pour paiement. En cas de paiement réussi, nous stockons tous les détails de la transaction dans le tableau « paiements ».

Enfin, créez un fichier blade appelé payment.blade.phpet ajoutez-y le code ci-dessous.

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

Lorsque nous soumettons ce formulaire, le contrôle passe à la chargefonction dans le PaymentControlleret le contrôleur traite le reste du flux de paiement.

Envoyer des informations sur le produit à PayPal

Dans les étapes précédentes, nous envoyons le montant à payer sur PayPal. Vous pouvez également envoyer des informations sur le produit. L’utilisateur peut voir ces détails de produit sur la page de paiement avant d’effectuer un paiement.

Pour envoyer les informations sur le produit, vous devez transmettre le tableau ‘items’ à la purchaseméthode comme suit.

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

Ici, je passe les détails du produit de manière statique. Vous devez le rendre dynamique en fonction de votre produit.

J’espère que vous avez entendu parler de l’intégration de la passerelle de paiement PayPal dans Laravel. S’il vous plaît partager vos pensées et suggestions dans la section commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails