PayPal Payment Gateway-integration i Laravel
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.
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 .env
fil.
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 PaymentController
och 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.php
och 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 charge
funktionen i PaymentController
styrenheten 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 purchase
metoden 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
- Authorize.Net Payment Gateway Integration i Laravel
- Stripe Payment Gateway-integration i Laravel
- PayKun Payment Gateway-integration i Laravel