PayPali makselüüsi integreerimine Laravelis
Hiljuti avaldasin artikli PayPali makselüüsi integreerimise kohta PHP-s. Selles artiklis küsis üks meie lugejatest PayPali makselüüsi integreerimise kohta Laravelisse. Kuigi Laravel on ehitatud PHP abil, on neil järgida oma standardeid. Peate oma tavalist PHP-koodi kohandama vastavalt Laraveli voogule. Selles artiklis näitan teile, kuidas maksta oma Laraveli veebisaidil PayPal Rest API abil.
PayPal on üks kõige usaldusväärsemaid veebimakseid aktsepteerivaid kaubamärke. PayPal pakub erinevaid võimalusi oma maksesüsteemi integreerimiseks veebirakendustesse. Üks teenustest on PayPal Rest API, mida kasutame selle õpetuse jaoks. Alustamiseks peate kõigepealt haarama oma kliendi ID ja kliendi saladuse.
Minge oma PayPali arendajakontole ja logige sisse. Klõpsake arendaja juhtpaneelil menüül „Minu rakendused ja mandaadid". Seejärel klõpsake REST API rakenduste jaotises nuppu Loo rakendus.
Järgige palutud juhiseid ja saate oma liivakasti ja reaalajas volitused. Praegu kopeerige liivakasti režiimi kliendi ID ja kliendisaladus.
Laraveli põhiseadistamine PayPali abil makse aktsepteerimiseks
Kui kliendid teevad teie veebisaidil makse, peate hilisemaks kasutamiseks salvestama makse üksikasjad. Makse üksikasjade salvestamiseks looge andmebaasis tabel ‘maksed’. Looge tabeli „maksed” üleviimine käsuga:
php artisan make:migration create_payments_table
Avage migratsioonifail ja muutke veerge järgmiselt.
<?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äivitage ülaltoodud migreerimine alloleva käsu abil.
php artisan migrate
See käsk loob teie andmebaasi tabeli ‘maksed’. Järgmisena looge tabelile „maksed” vastav mudel.
php artisan make:model Payment
Pärast seda lisage oma .env
faili PayPali mandaat .
PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID
PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET
PAYPAL_CURRENCY=USD
Tühjendage konfiguratsioonivahemälu käsuga:
php artisan config:cache
Olen läbinud valuuta USD. Kasutaja saab seda vastavalt vajadustele muuta.
Määratleme marsruudid, mida me järgmistes sammudes vajame.
marsruudid / 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');
PayPali makselüüsi integreerimine Laravelis
Makselüüside API integreerimine rakendusse on üsna keeruline asi. Õnneks tegi Omnipay raamatukogu arendaja elu lihtsaks. Omnipay on PHP jaoks kõige populaarsem maksete töötlemise kogu. See annab lihtsa ja puhta koodi erinevate makselüüside integreerimiseks. Installige Omnipay teek käsuga:
composer require league/omnipay omnipay/paypal
Nüüd looge kontroller PaymentController
ja määrake marsruudifailis mainitud meetodid.
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.';
}
}
Haarame ülaltoodud kontrolleris summa HTML-vormilt ja saadame kasutaja PayPali maksmiseks. Eduka makse korral salvestame kõik tehingu üksikasjad tabelisse „maksed”.
Lõpuks looge nimega labafail payment.blade.php
ja lisage selles kood allpool.
<form action="{{ url('charge') }}" method="post">
<input type="text" name="amount" />
{{ csrf_field() }}
<input type="submit" name="submit" value="Pay Now">
</form>
Selle vormi esitamisel läheb kontroll charge
funktsioonile PaymentController
ja kontroller töötleb ülejäänud maksevoogu.
Saatke tooteinfo PayPalile
Eelmistes toimingutes saadame maksmisele kuuluva summa PayPali kaudu. Samuti võite saata tooteinfot. Kasutaja näeb enne makse sooritamist neid toote üksikasju makselehel.
Tooteteabe saatmiseks peate massiivi "items" edastama purchase
meetodile järgmiselt.
$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();
Siin edastan toote üksikasjad staatiliselt. Peaksite selle muutma dünaamiliseks olenevalt tootest.
Loodan, et saite teada PayPali maksevärava integreerimisest Laravelis. Palun jagage oma mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.