WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Интеграция платежного шлюза PayPal в Laravel

270

Недавно я опубликовал статью об интеграции PayPal Payment Gateway в PHP. В этой статье один из наших читателей спросил об интеграции платежного шлюза PayPal в Laravel. Хотя Laravel построен с использованием PHP, у них есть свои стандарты, которым нужно следовать. Вы должны настроить свой простой PHP-код в соответствии с потоком Laravel. В этой статье я покажу вам, как принимать платежи на вашем веб-сайте Laravel с помощью API PayPal Rest.

PayPal – один из самых надежных брендов, принимающих онлайн-платежи. PayPal предоставляет различные способы интеграции своей платежной системы в веб-приложения. Одна из услуг – PayPal Rest API, которую мы будем использовать в этом руководстве. Для начала вам сначала нужно получить свой идентификатор клиента и секрет клиента.

Перейдите в свою учетную запись разработчика PayPal и войдите в нее. На панели инструментов разработчика щелкните меню «Мои приложения и учетные данные». Затем нажмите кнопку «Создать приложение» в разделе приложений REST API.

Следуйте инструкциям по подсказке, и вы получите свою песочницу и действующие учетные данные. А пока скопируйте идентификатор клиента и секрет клиента режима песочницы.

Интеграция платежного шлюза PayPal в Laravel

Базовая настройка в Laravel для приема платежей через PayPal

Когда клиенты производят оплату на вашем веб-сайте, вам необходимо сохранить платежные реквизиты для последующего использования. Создайте таблицу «платежей» в базе данных для хранения деталей платежа. Создайте миграцию для таблицы платежей с помощью команды:

php artisan make:migration create_payments_table

Откройте файл миграции и измените столбцы следующим образом.

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

Выполните указанную выше миграцию, используя команду ниже.

php artisan migrate

Эта команда создаст в вашей базе данных таблицу платежей. Затем создайте модель, соответствующую таблице «платежей».

php artisan make:model Payment

После этого добавьте учетные данные PayPal в свой .envфайл.

PAYPAL_CLIENT_ID=PASTE_HERE_CLIENT_ID PAYPAL_CLIENT_SECRET=PASTE_HERE_CLIENT_SECRET PAYPAL_CURRENCY=USD

Очистите кеш конфигурации с помощью команды:

php artisan config:cache

Я перешел в валюту «доллар США». Пользователь может изменить его в соответствии с требованиями.

Определим маршруты, которые нам понадобятся в следующих шагах.

маршруты / web.php

<?php ... ... Route::get('payment', '[email protected]'); Route::post('charge', '[email protected]'); Route::get('paymentsuccess', '[email protected]_success'); Route::get('paymenterror', '[email protected]_error');

Интеграция платежного шлюза PayPal в Laravel

Интегрировать API платежных шлюзов в приложение довольно сложно. К счастью, библиотека Omnipay облегчила жизнь разработчикам. Omnipay – самая популярная библиотека обработки платежей для PHP. Это простой и понятный код для интеграции различных платежных шлюзов. Установите библиотеку Omnipay с помощью команды:

composer require league/omnipay omnipay/paypal

Теперь создайте контроллер PaymentControllerи определите методы, упомянутые в файле маршрута.

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

В указанном выше контроллере мы берем сумму из HTML-формы и отправляем пользователя в PayPal для оплаты. После успешного платежа мы сохраняем все детали транзакции в таблице «платежи».

Наконец, создайте блейд-файл с именем payment.blade.phpи добавьте в него код ниже.

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

Когда мы отправляем эту форму, управление переходит к chargeфункции в, PaymentControllerа контроллер обрабатывает остальной поток платежей.

Отправить информацию о продукте в PayPal

На предыдущих шагах мы отправляли сумму для оплаты через PayPal. Вы также можете отправить информацию о продукте. Пользователь может увидеть эти сведения о продукте на странице оплаты до совершения платежа.

Чтобы отправить информацию о продукте, вам необходимо передать массив items в purchaseметод следующим образом.

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

Здесь я передаю детали продукта статически. Вы должны сделать его динамичным в зависимости от вашего продукта.

Надеюсь, вы узнали об интеграции платежного шлюза PayPal в Laravel. Пожалуйста, поделитесь своими мыслями и предложениями в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее