...
✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

PayPal-maksuyhdyskäytävän integrointi Laravelissa

21

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.

PayPal-maksuyhdyskäytävän integrointi Laravelissa

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 .envtiedostoon 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 PaymentControllerja 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.phpja 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 chargefunktioon PaymentControllerja 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.

Aiheeseen liittyvät artikkelit

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja