Intégration de la passerelle de paiement PayPal dans Laravel
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.
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 .env
fichier.
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 PaymentController
et 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.php
et 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 charge
fonction dans le PaymentController
et 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 purchase
mé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
- Intégration de la passerelle de paiement Authorize.Net dans Laravel
- Intégration de la passerelle de paiement Stripe dans Laravel
- Intégration de la passerelle de paiement PayKun dans Laravel