✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Integracja bramki płatności PayPal w Laravel

156

Niedawno opublikowałem artykuł na temat integracji PayPal Payment Gateway w PHP. W tym artykule jeden z naszych czytelników zapytał o integrację bramki płatności PayPal w Laravel. Chociaż Laravel jest zbudowany przy użyciu PHP, ma własne standardy, których należy przestrzegać. Musisz dostosować swój zwykły kod PHP zgodnie z przepływem Laravel. W tym artykule pokażę Ci, jak zaakceptować płatności na swojej stronie Laravel za pomocą PayPal Rest API.

PayPal to jedna z najbardziej zaufanych marek akceptujących płatności online. PayPal udostępnia różne sposoby integracji swojego systemu płatności z aplikacjami internetowymi. Jedną z usług jest PayPal Rest API, którego użyjemy w tym samouczku. Aby rozpocząć, musisz najpierw pobrać identyfikator klienta i klucz klienta.

Przejdź do swojego konta programisty PayPal i zaloguj się do niego. W panelu programisty kliknij menu „Moje aplikacje i dane logowania". Następnie kliknij przycisk „Utwórz aplikację” w sekcji Aplikacje REST API.

Postępuj zgodnie z instrukcjami, aby uzyskać dostęp do piaskownicy i poświadczeń na żywo. Na razie skopiuj identyfikator klienta i klucz klienta trybu piaskownicy.

Integracja bramki płatności PayPal w Laravel

Podstawowa konfiguracja w Laravel do akceptowania płatności przez PayPal

Kiedy klienci dokonują płatności w Twojej witrynie, musisz przechowywać szczegóły płatności do późniejszego wykorzystania. Utwórz tabelę „płatności” w bazie danych, aby przechowywać szczegóły płatności. Utwórz migrację dla tabeli „płatności” za pomocą polecenia:

php artisan make:migration create_payments_table

Otwórz plik migracji i zmodyfikuj kolumny w następujący sposób.

<?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();     }); }

Wykonaj powyższą migrację za pomocą poniższego polecenia.

php artisan migrate

To polecenie utworzy w Twojej bazie danych tabelę „płatności”. Następnie utwórz model odpowiadający tabeli „płatności”.

php artisan make:model Payment

Następnie dodaj poświadczenia PayPal w swoim .envpliku.

PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET PAYPAL_CURRENCY=USD

Wyczyść pamięć podręczną konfiguracji za pomocą polecenia:

php artisan config:cache

Przekazałem walutę „USD”. Użytkownik może to zmienić zgodnie z wymaganiami.

Zdefiniujmy trasy, których będziemy potrzebować w kolejnych krokach.

trasy/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');

Integracja bramki płatności PayPal w Laravel

Zintegrowanie API bramek płatności w aplikacji to dość skomplikowana sprawa. Na szczęście biblioteka Omnipay ułatwiła życie programistom. Omnipay to najpopularniejsza biblioteka przetwarzania płatności dla PHP. Daje łatwy i czysty kod do integracji różnych bramek płatności. Zainstaluj bibliotekę Omnipay za pomocą polecenia:

composer require league/omnipay omnipay/paypal

Teraz utwórz kontroler PaymentControlleri zdefiniuj metody wymienione w pliku trasy.

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.';     }    }

W powyższym kontrolerze pobieramy kwotę z formularza HTML i wysyłamy użytkownika do PayPal do zapłaty. Po pomyślnej płatności przechowujemy wszystkie szczegóły transakcji w tabeli „płatności”.

Na koniec utwórz plik blade o nazwie payment.blade.phpi dodaj w nim poniższy kod.

<form action="{{ url('charge') }}" method="post">     <input type="text" name="amount" />     {{ csrf_field() }}     <input type="submit" name="submit" value="Pay Now"> </form>

Kiedy prześlemy ten formularz, kontrola przechodzi do chargefunkcji w PaymentControlleri kontroler przetwarza resztę przepływu płatności.

Wyślij informacje o produkcie do PayPal

W poprzednich krokach wysyłamy kwotę do zapłaty na PayPal. Możesz również wysłać informacje o produkcie. Użytkownik może zobaczyć te szczegóły produktu na stronie płatności przed dokonaniem płatności.

Aby wysłać informacje o produkcie, musisz przekazać tablicę 'items’ do purchasemetody w następujący sposób.

$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();

Tutaj przekazuję statycznie szczegóły produktu. Powinieneś nadać mu dynamikę w zależności od produktu.

Mam nadzieję, że dowiedziałeś się o integracji bramki płatności PayPal w Laravel. Podziel się swoimi przemyśleniami i sugestiami w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów