承接 altivo/payments-sdk 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

altivo/payments-sdk

Composer 安装命令:

composer require altivo/payments-sdk

包简介

Altivo Payments PHP SDK — Turkish bank POS gateway client

README 文档

README

Altivo Payments API için resmi PHP istemcisi. Türk bankalarıyla POS entegrasyonunu tek satır kurulumla projenize ekler.

Gereksinimler

  • PHP 8.1+
  • Guzzle 7.x (guzzlehttp/guzzle)

Kurulum

composer require altivo/payments-sdk

Laravel

.env dosyanıza ekleyin:

ALTIVO_PAY_BASE_URL=https://odemelerin.siteadi.com
ALTIVO_PAY_API_KEY=ak_live_xxxxxxxxxxxx

Servis sağlayıcı otomatik keşfedilir. Facade ile kullanabilirsiniz:

use Altivo\Payments\Laravel\Facades\Altivo;

Altivo::payments()->create([...]);

Framework bağımsız

use Altivo\Payments\AltivoClient;

$altivo = new AltivoClient(
    baseUrl: 'https://odemelerin.siteadi.com',
    apiKey:  'ak_live_xxxxxxxxxxxx',
);

Hızlı Başlangıç

3D Secure Ödeme

use Altivo\Payments\Exceptions\ApiException;

try {
    $payment = $altivo->payments()->create([
        'amount'      => 249.90,
        'currency'    => 'TRY',
        'installment' => 0,
        'success_url' => 'https://siteadi.com/odeme/basarili',
        'fail_url'    => 'https://siteadi.com/odeme/basarisiz',
        'card'        => [
            'number'       => '4111111111111111',
            'expire_month' => '12',
            'expire_year'  => '26',
            'cvv'          => '123',
            'holder_name'  => 'Ali Veli',
        ],
    ]);
} catch (ApiException $e) {
    echo $e->getMessage();       // hata metni
    echo $e->getStatusCode();    // HTTP durum kodu
}

if ($payment->requires3D()) {
    // $payment->formData → bankaya POST edilecek form alanları
    // Kullanıcıyı bankaya yönlendirin (otomatik form submit)
}

Regular (3D'siz) Ödeme

$payment = $altivo->payments()->create([
    'amount'      => 99.00,
    'currency'    => 'TRY',
    'success_url' => 'https://siteadi.com/basarili',
    'fail_url'    => 'https://siteadi.com/basarisiz',
    'card'        => [...],
]);

if ($payment->isCompleted()) {
    // ödeme onaylandı
}

Ödeme Durumu Sorgula

// Detay getir (kendi veritabanınızdaki kayıtla karşılaştırmak için)
$payment = $altivo->payments()->get('payment-uuid');

// Bankadan anlık durum sorgula
$status = $altivo->payments()->status('payment-uuid');

echo $status->status;        // PAYMENT_COMPLETED
echo $status->bankResponse;  // bankanın ham yanıtı

Hosted Checkout (Stripe tarzı ödeme sayfası)

Müşteriyi hazır, Stripe benzeri bir ödeme sayfasına yönlendirin. Kart formu, ürün listesi, KDV ve kargo satırları otomatik gösterilir. 3D Secure akışı tamamen sunucu tarafında halledilir.

$session = $altivo->checkout()->createSession([
    'amount'          => 349.90,
    'currency'        => 'TRY',
    'description'     => 'Sipariş #1042',
    'success_url'     => 'https://siteadi.com/odeme/basarili',
    'fail_url'        => 'https://siteadi.com/odeme/basarisiz',

    // İsteğe bağlı kırılım
    'tax_amount'      => 52.87,
    'shipping_amount' => 0,      // 0 → "Ücretsiz" olarak gösterilir

    // Ürün satırları (isteğe bağlı)
    'invoice_data' => [
        [
            'name'        => 'Kablosuz Kulaklık',
            'quantity'    => 1,
            'price'       => 297.03,
            'image_url'   => 'https://cdn.siteadi.com/urunler/kulalik.jpg',
            'description' => 'Bluetooth 5.3, 30 saat pil',
        ],
        [
            'name'     => 'USB-C Kablo',
            'quantity' => 2,
            'price'    => 22.50,
        ],
    ],
]);

// Müşteriyi yönlendirin — gerisini Altivo halleder
header('Location: ' . $session->checkoutUrl);

Oturum 24 saat geçerlidir ve yalnızca bir kez kullanılabilir.

echo $session->sessionId;   // UUID
echo $session->checkoutUrl; // https://odemelerin.siteadi.com/checkout/{token}
echo $session->expiresAt;   // 2026-06-24T10:30:00+00:00

Laravel / Facade:

use Altivo\Payments\Laravel\Facades\Altivo;

$session = Altivo::checkout()->createSession([...]);
return redirect($session->checkoutUrl);

iFrame ile Gömülü Ödeme

Müşterinin sitenizi terk etmeden ödeme yapmasını sağlar.

// 1. Backend'de token oluşturun
$iframe = $altivo->iframe()->createToken([
    'amount'      => 149.00,
    'currency'    => 'TRY',
    'success_url' => 'https://siteadi.com/basarili',
    'fail_url'    => 'https://siteadi.com/basarisiz',
]);

echo $iframe->iframeUrl;  // embed edilecek URL (30 dk geçerli)
echo $iframe->expiresAt;  // ISO 8601 tarih
<!-- 2. Frontend'de embed edin -->
<iframe src="<?= $iframe->iframeUrl ?>" width="480" height="600" frameborder="0"></iframe>

<!-- 3. Sonucu postMessage ile dinleyin -->
<script>
window.addEventListener('message', function (e) {
    if (e.data?.type !== 'altivo:payment') return;

    if (e.data.success) {
        console.log('Başarılı, payment_id:', e.data.payment_id);
    } else {
        console.log('Başarısız:', e.data.message);
    }
});
</script>

Webhook Doğrulama

Altivo, ödeme tamamlandığında belirlediğiniz URL'e POST atar. İsteği doğrulamak için X-Altivo-Signature başlığını kontrol edin:

$secret   = 'webhook-secret-key';
$body     = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, $secret);
$received = $_SERVER['HTTP_X_ALTIVO_SIGNATURE'] ?? '';

if (! hash_equals($expected, $received)) {
    http_response_code(401);
    exit;
}

$payload   = json_decode($body, true);
$event     = $payload['event'];      // 'payment.completed' | 'payment.failed'
$paymentId = $payload['payment_id'];

Webhook başarısız olursa Altivo 3 kez daha dener: 1 dk → 5 dk → 30 dk.

Yanıt Nesneleri

PaymentResponse

ÖzellikTürAçıklama
paymentIdstringÖdeme UUID
orderIdstringAltivo tarafından üretilen sipariş no
statusstringPENDING / PENDING_3D / PAYMENT_COMPLETED / PAYMENT_FAILED
typestring3d veya regular
formData?array3D akışı için banka form verisi
amount?floatÖdeme tutarı
currency?stringPara birimi
cardLastFour?stringKartın son 4 hanesi
initiatedAt?stringBaşlangıç tarihi (ISO 8601)
completedAt?stringTamamlanma tarihi (ISO 8601)

Yardımcı metodlar: isPending(), isCompleted(), isFailed(), requires3D(), toArray()

StatusResponse

ÖzellikTürAçıklama
paymentIdstringÖdeme UUID
orderIdstringSipariş no
statusstringGüncel durum
bankResponsearrayBankanın ham yanıtı

IframeTokenResponse

ÖzellikTürAçıklama
tokenstring64 karakterlik oturum token'ı
iframeUrlstringEmbed edilecek tam URL
expiresAtstringSon kullanma tarihi (ISO 8601)

CheckoutSessionResponse

ÖzellikTürAçıklama
sessionIdstringOturum UUID
checkoutUrlstringMüşterinin yönlendirileceği ödeme sayfası URL'i
expiresAtstringSon kullanma tarihi — 24 saat (ISO 8601)

Hata Yönetimi

use Altivo\Payments\Exceptions\ApiException;
use Altivo\Payments\Exceptions\AltivoException;

try {
    $payment = $altivo->payments()->create([...]);
} catch (ApiException $e) {
    // API'den dönen HTTP hatası (4xx / 5xx)
    $e->getStatusCode();    // örn: 422
    $e->getResponseBody();  // ['error' => 'Aktif gateway bulunamadı']
    $e->getMessage();       // kısa hata metni
} catch (AltivoException $e) {
    // Yapılandırma hatası (boş base_url veya api_key)
} catch (\Throwable $e) {
    // Ağ hatası, timeout vb.
}

Seçenekler

$altivo = new AltivoClient(
    baseUrl: 'https://odemelerin.siteadi.com',
    apiKey:  'ak_live_xxxxxxxxxxxx',
    options: [
        'timeout'    => 15,    // saniye, varsayılan: 30
        'verify_ssl' => false, // geliştirme ortamı için, prod'da true bırakın
    ],
);

Lisans

MIT

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-23