PayPal-maksuyhdyskäytävän integrointi Laravelissa
Julkaisin äskettäin artikkelin PayPal Payment Gateway Integrationista PHP: ssä. Tässä artikkelissa yksi lukijoistamme kysyi PayPal-maksuyhdyskäytävän integroinnista Laraveliin. Vaikka Laravel on rakennettu PHP: llä, heillä on omat standardinsa. Sinun on säädettävä tavallinen PHP-koodisi Laravel-vuon mukaan. Tässä artikkelissa näytän sinulle, kuinka hyväksyä maksu Laravel-verkkosivustollasi PayPal Rest -sovellusliittymän avulla.
PayPal on yksi luotettavimmista tuotemerkeistä, joka hyväksyy verkkomaksun. PayPal tarjoaa erilaisia tapoja integroida maksujärjestelmänsä verkkosovelluksiin. Yksi palveluista on PayPal Rest -sovellusliittymä, jota käytämme tässä opetusohjelmassa. Aloittamiseksi sinun on ensin napattava asiakastunnuksesi ja asiakassalaisuutesi.
Siirry PayPal-kehittäjätilillesi ja kirjaudu sisään. Napsauta kehittäjän hallintapaneelissa Omat sovellukset ja kirjautumistiedot -valikkoa. Napsauta sitten REST API -sovelluksen alla olevaa Luo sovellus -painiketta.
Noudata kehotusten mukaisia vaiheita ja saat hiekkalaatikkosi ja live-kirjautumistiedot. Kopioi toistaiseksi hiekkalaatikkotilan asiakastunnus ja asiakassalaisuus.
Perusasetukset Laravelissa maksun hyväksymiseksi PayPalin avulla
Kun asiakkaat suorittavat maksun verkkosivustollasi, sinun on tallennettava maksutiedot myöhempää käyttöä varten. Luo tietokantaan ” maksutaulukko ” maksutietojen tallentamiseksi. Luo siirto maksutaulukolle komennolla:
php artisan make:migration create_payments_table
Avaa siirtotiedosto ja muokkaa sarakkeita seuraavasti.
<?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();
});
}
Suorita yllä mainittu siirto alla olevan komennon avulla.
php artisan migrate
Tämä komento luo tietokantaan maksutaulukon. Luo seuraavaksi maksu-taulukkoa vastaava malli.
php artisan make:model Payment
Lisää tämän jälkeen .env
tiedostoon PayPal-kirjautumistiedot .
PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID
PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET
PAYPAL_CURRENCY=USD
Tyhjennä määritysvälimuisti komennolla:
php artisan config:cache
Olen läpäissyt USD-valuutan. Käyttäjä voi muuttaa sitä vaatimusten mukaisesti.
Määritetään reitit, joita tarvitsemme seuraavissa vaiheissa.
reitit / 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-maksuyhdyskäytävän integrointi Laravelissa
Maksuyhdyskäytävien sovellusliittymän integrointi sovellukseen on melko monimutkaista. Onneksi Omnipay-kirjasto helpotti kehittäjien elämää. Omnipay on suosituin PHP-maksujen käsittelykirjasto. Se antaa helpon ja puhtaan koodin eri maksuyhdyskäytävien integroimiseksi. Asenna Omnipay-kirjasto komennolla:
composer require league/omnipay omnipay/paypal
Luo nyt ohjain PaymentController
ja määritä reittitiedostossa mainitut menetelmät.
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.';
}
}
Yllä olevassa ohjaimessa tartumme summaan HTML-lomakkeesta ja lähetämme käyttäjän PayPaliin maksua varten. Onnistuneen maksun yhteydessä tallennamme kaikki tapahtuman yksityiskohdat maksutaulukkoon.
Luo lopuksi korttitiedosto nimeltä payment.blade.php
ja lisää koodi sen alle.
<form action="{{ url('charge') }}" method="post">
<input type="text" name="amount" />
{{ csrf_field() }}
<input type="submit" name="submit" value="Pay Now">
</form>
Kun lähetämme tämän lomakkeen, ohjaus siirtyy charge
funktioon PaymentController
ja ohjain käsittelee loput maksuvirrat.
Lähetä tuotetiedot PayPalille
Edellisissä vaiheissa lähetämme maksettavan summan PayPalilla. Voit myös lähettää tuotetietoja. Käyttäjä voi nähdä nämä tuotetiedot maksusivulla ennen maksun suorittamista.
Tuotetietojen lähettäminen edellyttää, että välität ” tavarat ” purchase
-menetelmän seuraavasti.
$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();
Tässä välitän tuotetiedot staattisesti. Sinun tulisi tehdä siitä dynaaminen tuotteestasi riippuen.
Toivon, että sait tietää PayPal-maksuyhdyskäytävän integroinnista Laravelissa. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.