✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

PayPali makselüüsi integreerimine Laravelis

24

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.

PayPali makselüüsi integreerimine Laravelis

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 .envfaili 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 PaymentControllerja 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.phpja 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 chargefunktsioonile PaymentControllerja 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 purchasemeetodile 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.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem