enessvg / laravel-paynet
Paynet Payment Gateway Laravel SDK
v3.0.1
2026-06-05 19:34 UTC
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0|^11.0
- phpunit/phpunit: ^10.0|^11.0
README
Paynet Payment Gateway icin Laravel SDK. PHP 8.2+ ve Laravel 10/11/12 ile uyumludur.
Kurulum
composer require enessvg/laravel-paynet php artisan vendor:publish --tag=paynet-config
.env:
PAYNET_SECRET_KEY=your_secret_key_here PAYNET_PUBLIC_KEY=your_public_key_here PAYNET_IS_LIVE=false PAYNET_TIMEOUT=30 PAYNET_VERIFY_SSL=true PAYNET_TDS_RETURN_URL=https://your-domain.com/payment/callback
Response Kullanimi
Tum client methodlari SDK response objesi dondurur. Laravel HTTP response gerekiyorsa raw() ile erisebilirsiniz.
$result->successful(); // Tahsilat/operasyon basarili mi? $result->failed(); // Basarisiz mi? $result->apiSuccessful(); // Paynet code 0 veya 100 mu? $result->errorMessage(); // Banka/Paynet hata mesaji $result->get('xact_id'); // Ham response alanina erisim $result->toArray(); // Ham body array $result->raw(); // Illuminate\Http\Client\Response|null
Odeme benzeri response'larda successful() sadece is_succeed=true ve Paynet sonuc kodu 0 veya 100 ise true doner. Yani HTTP 200 veya code=0 tek basina tahsilat basarisi sayilmaz.
Direkt Odeme
use Paynet\DTOs\PaymentParams; use Paynet\Facades\Paynet; use Paynet\Support\PaynetTools; $result = Paynet::payment(new PaymentParams( amount: PaynetTools::formatWithDecimalSeparator(123.45), referenceNo: PaynetTools::generateReferenceNo('ORD-'), domain: 'www.acme.com', pan: '5400617004770430', month: '12', year: '2030', cvc: '123', cardHolder: 'John Doe', )); if ($result->successful()) { $transactionId = $result->xactId; } if ($result->failed()) { $message = $result->errorMessage(); }
Sakli kart ile odeme:
$result = Paynet::payment(new PaymentParams( amount: '123,45', referenceNo: 'ORD-1001', domain: 'www.acme.com', cardHash: 'saved-card-token', ));
3D Odeme
use Paynet\DTOs\TdsChargeParams; use Paynet\DTOs\TdsInitialParams; use Paynet\Facades\Paynet; $initial = Paynet::tdsInitial(new TdsInitialParams( amount: '123,45', referenceNo: 'ORD-1002', returnUrl: route('payment.callback'), domain: 'www.acme.com', pan: '5400617004770430', month: '12', year: '2030', cvc: '123', cardHolder: 'John Doe', )); if ($initial->successful()) { return redirect($initial->postUrl); } // Callback icinde Paynet'in post ettigi/session'da saklanan degerlerle: $charge = Paynet::tdsCharge(new TdsChargeParams( sessionId: request('session_id'), tokenId: request('token_id'), )); if ($charge->successful()) { $transactionId = $charge->xactId; }
Odeme Dogrulama
Odeme cevabini aldiktan sonra tek helper ile Paynet sorgusu uzerinden dogrulayabilirsiniz.
$verification = Paynet::verifyPayment( referenceNo: 'ORD-1001', expectedAmount: '123,45', expectedCurrency: 'TRY', expectedReferenceNo: 'ORD-1001', ); if ($verification->successful()) { $transaction = $verification->transaction; }
Oran/Taksit
use Paynet\DTOs\RatioParams; use Paynet\Facades\Paynet; $ratios = Paynet::getRatios(new RatioParams( amount: '100000', bin: '540061', addCommissionToAmount: true, agentId: '1001', cardType: 'cc', )); foreach ($ratios->banks as $bank) { foreach ($bank->ratios as $ratio) { echo "{$bank->bankName}: {$ratio->instalment} taksit\n"; } }
Public oran, oran tipi ve oran tanimlari:
use Paynet\DTOs\RatioCodeParams; use Paynet\DTOs\RatioDefinitionParams; use Paynet\DTOs\RatioTypeParams; Paynet::getPublicRatios(new RatioParams(bin: '540061')); Paynet::setRatioType(new RatioTypeParams(description: 'API oran')); Paynet::deleteRatioType(new RatioCodeParams(ratioCode: 'RATIO1')); Paynet::defineRatio(new RatioDefinitionParams( ratioCode: 'RATIO1', cardType: 'cc', banks: [ [ 'bank_id' => 'DENZ', 'instalments' => [ ['instalment' => 0, 'ratio' => 0.1], ], ], ], ));
Kart Saklama
use Paynet\DTOs\CardDescUpdateParams; use Paynet\DTOs\CardListParams; use Paynet\DTOs\DeleteCardParams; use Paynet\DTOs\SaveCardParams; use Paynet\DTOs\SavedCardOtpCheckParams; use Paynet\DTOs\SavedCardOtpParams; use Paynet\Facades\Paynet; $save = Paynet::saveCard(new SaveCardParams( cardDesc: 'Kisisel Kartim', cardHolder: 'John Doe', cardNumber: '4355080000000000', expireMonth: '12', expireYear: '2030', cvv: '123', userUniqueId: 'user-123', )); $cardOwnerId = $save->cardOwnerId; $cards = Paynet::listCards(new CardListParams( cardOwnerId: $cardOwnerId, )); $cardHash = $cards->cards[0]->cardHash; Paynet::updateCardDescription(new CardDescUpdateParams( cardOwnerId: $cardOwnerId, cardHash: $cardHash, cardDesc: 'Yeni Kart Aciklamasi', )); Paynet::deleteCard(new DeleteCardParams( cardOwnerId: $cardOwnerId, cardHash: $cardHash, )); $otp = Paynet::sendCardOtp(new SavedCardOtpParams( userGsm: '5551234567', otpSessionId: 'otp-session-id', )); Paynet::checkOtpForSavedCard(new SavedCardOtpCheckParams( userGsm: '5551234567', otpSessionId: 'otp-session-id', otpCode: 'ART2', ));
Iade ve Iptal
use Paynet\DTOs\ReversalListParams; use Paynet\DTOs\ReversedRequestParams; use Paynet\DTOs\TransactionIdParams; use Paynet\Facades\Paynet; Paynet::requestReversal(new ReversedRequestParams( xactId: 'xk_...', amount: '1000', )); Paynet::listReversals(new ReversalListParams( datab: '2026-01-01', datbi: '2026-01-02', )); Paynet::cancelPreAuthorization(new TransactionIdParams(xactId: 'xk_...')); Paynet::cancelCapture(new TransactionIdParams(xactId: 'xk_...'));
Yardimci Fonksiyonlar
use Paynet\Support\PaynetTools; PaynetTools::formatWithDecimalSeparator(123.45); // "123,45" PaynetTools::formatWithoutDecimalSeparator(123.45); // "12345" PaynetTools::validateCardNumber('5400617004770430'); PaynetTools::validateExpiryDate('12', '2030'); PaynetTools::validateCvc('123'); PaynetTools::maskCardNumber('5400617004770430'); // "540061******0430" PaynetTools::getCardBin('5400617004770430'); // "540061" PaynetTools::generateReferenceNo('ORD-');
Test Kartlari
Paynet test kartlari icin: https://doc.paynet.com.tr/genel-bilgiler/test-kartlari
Lisans
MIT