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, трябва да инсталирате Authorize.net PHP SDK, който се използва за взаимодействие с Authorize.net API. Можете да инсталирате 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: Създайте формуляр за плащане
Следващата стъпка е да създадете формуляр за плащане, който ще събира данните за плащане на клиента. Ние ще създадем прост формуляр за плащане с Blade шаблонния двигател на Laravel. В директорията 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
на Authorize.net SDK. След това създаваме нов обект 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
- American Express: 370000000000002
- Открийте: 6011000000000012
За дата на изтичане можем да използваме всяка бъдеща дата, а за CVV код можем да използваме произволно 3 или 4 цифрено число.
След като изпратим формуляра за плащане, трябва да бъдем пренасочени към страницата за потвърждение на плащането и да видим съобщението „Благодарим ви за плащането! Вашето плащане на $x.xx беше успешно.“
Заключение
В тази статия научихме как да интегрираме платежния портал Authorize.net с приложение Laravel 10. Разгледахме как да инсталираме и конфигурираме Authorize.net PHP SDK, как да създадем формуляр за плащане и да обработваме плащанията и как да обработваме потвърждението на плащането. С това знание би трябвало да можете лесно да добавяте функция за плащане към вашето приложение Laravel и сигурно да обработвате транзакции с кредитни карти.