Authorize.net — это широко используемый платежный шлюз, который позволяет предприятиям безопасно обрабатывать онлайн-платежи. Laravel — это надежный PHP-фреймворк, который позволяет разработчикам быстро и эффективно создавать веб-приложения. В этой статье мы расскажем, как интегрировать Authorize.net с Laravel 10 и создать платежный шлюз для вашего приложения.
Шаг 1: Установите Laravel 10
Прежде чем мы начнем интегрировать Authorize.net с Laravel, убедитесь, что на вашем компьютере установлена Laravel 10. Вы можете установить Laravel с помощью Composer, выполнив следующую команду:
composer create-project --prefer-dist laravel/laravel myapp
Шаг 2: Установите Authorize.net PHP SDK
После установки Laravel 10 вам необходимо установить PHP SDK Authorize.net, который используется для взаимодействия с API Authorize.net. Вы можете установить SDK через Composer, выполнив следующую команду:
composer require authorize-net/authorizenet
Шаг 3: Настройте переменные среды
После установки SDK нам нужно настроить его, предоставив учетные данные API Authorize.net. В Laravel мы используем файл .env
для хранения конфигурации нашего приложения. Добавьте следующие строки в файл .env
:
AUTHORIZENET_API_LOGIN_ID=<your_api_login_id> AUTHORIZENET_TRANSACTION_KEY=<your_transaction_key>
Шаг 4: Создайте платежную форму
Следующим шагом является создание платежной формы, которая будет собирать платежные реквизиты клиента. Мы создадим простую платежную форму с помощью шаблонизатора Laravel Blade. В каталоге resources/views
вашего приложения создайте файл с именем payment_form.blade.php
со следующим кодом:
<form action="/process-payment" method="POST"> @csrf <div> <label for="card_number">Card Number</label> <input type="text" id="card_number" name="card_number"> </div> <div> <label for="expiration_date">Expiration Date</label> <input type="text" id="expiration_date" name="expiration_date"> </div> <div> <label for="cvv">CVV</label> <input type="text" id="cvv" name="cvv"> </div> <div> <button type="submit">Submit Payment</button> </div> </form>
Шаг 5: Обработка платежа
После того, как клиент отправит платежную форму, нам необходимо обработать платеж с помощью Authorize.net SDK. В Laravel мы можем создать метод контроллера, который будет обрабатывать платежи. В каталоге app/Http/Controllers
вашего приложения создайте файл с именем PaymentController.php
со следующим кодом:
use Illuminate\Http\Request; use net\authorize\api\contract\v1 as AnetAPI; use net\authorize\api\controller as AnetController; class PaymentController extends Controller { public function processPayment(Request $request) { $cardNumber = $request->input('card_number'); $expirationDate = $request->input('expiration_date'); $cvv = $request->input('cvv'); $merchantAuthentication = new AnetAPI\MerchantAuthenticationType(); $merchantAuthentication->setName(env('AUTHORIZENET_API_LOGIN_ID')); $merchantAuthentication->setTransactionKey(env('AUTHORIZENET_TRANSACTION_KEY')); $creditCard = new AnetAPI\CreditCardType(); $creditCard->setCardNumber($cardNumber); $creditCard->setExpirationDate($expirationDate); $creditCard->setCardCode($cvv); $payment = new AnetAPI\PaymentType(); $payment->setCreditCard($creditCard); $transactionRequestType = new AnetAPI\TransactionRequestType(); $transactionRequestType->setTransactionType("authCaptureTransaction"); $transactionRequestType->setAmount("10.00"); $transactionRequestType->setPayment($payment); $request = new AnetAPI\CreateTransactionRequest(); $request->setMerchantAuthentication($merchantAuthentication); $request->setRefId("ref" . time()); $request->setTransactionRequest($transactionRequestType); $controller = new AnetController\CreateTransactionController($request); $response = $controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX); if ($response != null) { $tresponse = $response->getTransactionResponse(); if ($tresponse != null && $tresponse->getResponseCode() == "1") { return "Payment successful!"; } else { return "Payment failed: " . $tresponse->getResponseReasonText(); } } else { return "Payment failed: " . $response->getMessages()->getMessage()[0]->getText(); } } }
В приведенном выше коде мы создаем новый класс PaymentController
с методом processPayment
, который обрабатывает платежи. Метод извлекает информацию о кредитной карте из платежной формы и создает новый экземпляр классов MerchantAuthenticationType
, CreditCardType
и PaymentType
SDK Authorize.net. Затем мы создаем новый объект TransactionRequestType
и устанавливаем тип транзакции, сумму платежа и информацию о платеже. Наконец, мы создаем новый объект CreateTransactionRequest
, устанавливаем аутентификацию продавца, идентификатор ссылки и запрос транзакции и передаем его новому экземпляру объекта CreateTransactionController
. Затем мы запускаем контроллер в среде песочницы и проверяем ответ на наличие ошибок.
Шаг 6: Обновите маршруты
Теперь, когда мы создали платежную форму и метод обработки платежей, нам нужно обновить маршруты нашего приложения для обработки запросов. В файле routes/web.php
вашего приложения добавьте следующий маршрут:
Route::post('/process-payment', [PaymentController::class, 'processPayment'])->name('process.payment');
Шаг 7: Создайте представления
Наконец, нам нужно создать представления для платежной формы и подтверждения платежа. В Laravel мы можем создать каталог resources/views
и добавить два новых файла с именами payment.blade.php
и payment-confirmation.blade.php
.
В payment.blade.php
добавьте следующий код:
@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">Payment Form</div> <div class="card-body"> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form method="POST" action="{{ route('process.payment') }}"> @csrf <div class="form-group row"> <label for="card_number" class="col-md-4 col-form-label text-md-right">{{ __('Card Number') }}</label> <div class="col-md-6"> <input id="card_number" type="text" class="form-control @error('card_number') is-invalid @enderror" name="card_number" required autocomplete="off" maxlength="16"> @error('card_number') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="expiration_date" class="col-md-4 col-form-label text-md-right">{{ __('Expiration Date (MM/YY)') }}</label> <div class="col-md-6"> <input id="expiration_date" type="text" class="form-control @error('expiration_date') is-invalid @enderror" name="expiration_date" required autocomplete="off" maxlength="5"> @error('expiration_date') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="cvv" class="col-md-4 col-form-label text-md-right">{{ __('CVV') }}</label> <div class="col-md-6"> <input id="cvv" type="text" class="form-control @error('cvv') is-invalid @enderror" name="cvv" required autocomplete="off" maxlength="4"> @error('cvv') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row mb-0"> <div class="col-md-6 offset-md-4"> <button type="submit" class="btn btn-primary"> {{ __('Pay') }} </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection
В payment-confirmation.blade.php добавьте следующий код:
@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">Payment Confirmation</div> <div class="card-body"> <h5 class="card-title">Thank you for your payment!</h5> <p class="card-text">Your payment of ${{ $amount / 100 }} was successful.</p> </div> </div> </div> </div> </div> @endsection
Шаг 8. Проверьте процесс оплаты
Чтобы проверить процесс оплаты, мы можем перейти к платежной форме по адресу http://localhost:8000/payment
и ввести некоторые данные тестовой кредитной карты. Мы можем использовать следующие номера тестовых карт, предоставленные Authorize.net:
- Виза: 4111111111111111
- MasterCard: 5424000000000015
- Американ Экспресс: 370000000000002
- Откройте для себя: 6011000000000012
Для даты истечения срока действия мы можем использовать любую дату в будущем, а для кода CVV мы можем использовать любое 3- или 4-значное число.
После того, как мы отправим платежную форму, мы должны быть перенаправлены на страницу подтверждения платежа и увидеть сообщение «Спасибо за платеж! Ваш платеж в размере $x.xx был успешно выполнен».
Заключение
В этой статье мы узнали, как интегрировать платежный шлюз Authorize.net с приложением Laravel 10. Мы рассмотрели, как установить и настроить PHP SDK Authorize.net, как создать платежную форму и обрабатывать платежи, а также как обрабатывать подтверждение платежа. Обладая этими знаниями, вы сможете легко добавлять платежные функции в свое приложение Laravel и безопасно обрабатывать транзакции по кредитным картам.