TL;DR
2Checkout API (şimdi Verifone), geliştiricilere RESTful uç noktalar üzerinden ödemeleri işleme, abonelikleri yönetme ve e-ticaret işlemlerini programatik olarak yürütme imkanı sunar. Kimlik doğrulama için API anahtarları ve JSON tabanlı yükler kullanılır. Bu rehber, kurulumdan gelişmiş webhook yönetimine kadar uygulamaya yönelik tüm adımları içerir.
Giriş
Ödeme işleme, çevrimiçi bir işletmenin en kritik parçasıdır. Yanlış bir entegrasyon gelir kaybına yol açar, doğru entegrasyon ise küresel pazarlara açılmanızı sağlar. 2Checkout API (sonradan Verifone olarak yeniden markalandı), 45.000'den fazla satıcının global ödemelerini yönetir ve yılda milyarlarca işlem gerçekleştirir.
Gerçek bir problem: Alışveriş yapanların %67’si ödeme süreçlerindeki sürtüşme nedeniyle sepeti terk ediyor. Sağlam bir ödeme API entegrasyonu doğrudan kârınızı artırır.
Bu rehberde, 2Checkout API entegrasyonu için uygulamaya dönük adımları bulacaksınız: Kimlik doğrulama, ödeme işlemleri, abonelik yönetimi, webhook kullanımı ve hata giderme. Sonunda, canlıya hazır bir ödeme sistemi kurmuş olacaksınız.
💡 Apidog, API entegrasyon testini basitleştirir. 2Checkout uç noktalarınızı test edin, webhook yüklerini doğrulayın ve kimlik doğrulama sorunlarını tek bir platformda giderin. OpenAPI spesifikasyonunu içe aktarın, yanıtları taklit edin ve test senaryolarını ekibinizle paylaşın.
2Checkout API Nedir?
2Checkout (şimdi Verifone Digital Commerce) ödeme işlemleri ve abonelik yönetimi için REST API sunar. API ile:
- Tek seferlik ve yinelenen ödemeler işleyebilirsiniz
- Müşteri ve ürünleri yönetebilirsiniz
- Sipariş yaşam döngüsünü takip edebilirsiniz
- Geri ödeme ve anlaşmazlık süreçlerini yönetebilirsiniz
- Vergi/uyumluluk otomasyonunu sağlayabilirsiniz
- 100+ para biriminde işlem desteği alırsınız
Temel Özellikler
| Özellik | Açıklama |
|---|---|
| RESTful Tasarım | JSON yükleriyle GET, POST, PUT, DELETE standart HTTP yöntemleri |
| Sandbox Ortamı | Gerçek işlem olmadan güvenli test |
| Webhook Desteği | Sipariş olayları için gerçek zamanlı bildirim |
| Tokenizasyon | Kart verisi saklamadan güvenli ödeme |
| Küresel Uyum | PCI DSS Seviye 1, GDPR, PSD2, 3D Secure 2.0 uyumlu |
API Mimari Genel Bakış
2Checkout aşağıdaki sürümlere sahip REST API yapısı kullanır:
https://api.2checkout.com/1/
https://api.2checkout.com/2/
Sürüm 2, gelişmiş abonelik ve webhook yönetimiyle önerilir.
Başlarken: Kimlik Doğrulama Kurulumu
Adım 1: 2Checkout Hesabı Oluşturun
- 2Checkout kayıt sayfasına gidin.
- İşletme doğrulamasını tamamlayın (belge gerektirir).
- Onay sürecini bekleyin (genellikle 24-48 saat).
- Kontrol panelinizden API kimlik bilgilerinizi alın.
Adım 2: API Anahtarlarını Alın
Kontrol Paneli > Entegrasyonlar > API Anahtarları yolunu izleyin:
- Özel API Anahtarı: Sunucu tarafı kimlik doğrulama, gizli tutun.
- Herkese Açık API Anahtarı: İstemci tarafı tokenizasyon için, açık tutulabilir.
- Webhook Sırrı: Webhook imzalarını doğrulamak için kullanılır.
Güvenlik: Anahtarları asla kod depolarında saklamayın. Ortam değişkenlerini kullanın:
# .env dosyası
TWOCHECKOUT_PRIVATE_KEY="özel_anahtarınız_buraya"
TWOCHECKOUT_PUBLIC_KEY="herkese_açık_anahtarınız_buraya"
TWOCHECKOUT_WEBHOOK_SECRET="webhook_sırrınız_buraya"
Adım 3: Sandbox ve Üretim Ortamı
| Ortam | Temel URL | Kullanım |
|---|---|---|
| Sandbox | https://sandbox.2checkout.com/api/ |
Geliştirme, test |
| Üretim | https://api.2checkout.com/ |
Canlı işlemler |
Geliştirme ve testte sandbox kullanın. Üretime geçtiğinizde anahtar ve URL’yi değiştirin.
Adım 4: Kimlik Doğrulama Yöntemleri
Yöntem 1: API Anahtarı Kimlik Doğrulama (Önerilir)
const response = await fetch('https://api.2checkout.com/1/orders', {
method: 'GET',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
Yöntem 2: HMAC İmza Kimlik Doğrulama
const crypto = require('crypto');
function generateSignature(payload, privateKey) {
const hash = crypto
.createHmac('sha256', privateKey)
.update(JSON.stringify(payload))
.digest('hex');
return hash;
}
// Kullanım
const payload = { order_id: '12345', amount: 99.99 };
const signature = generateSignature(payload, privateKey);
const response = await fetch('https://api.2checkout.com/1/orders', {
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'X-Signature': signature,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
Ödeme İşleme: Temel Uç Noktalar
Tek Seferlik Sipariş Oluşturma
/orders uç noktası ile ödeme işlemini başlatın:
const createOrder = async (customerData, productData) => {
const payload = {
currency: 'USD',
customer: {
email: customerData.email,
first_name: customerData.firstName,
last_name: customerData.lastName,
phone: customerData.phone,
billing_address: {
address1: customerData.address,
city: customerData.city,
state: customerData.state,
zip: customerData.zip,
country: customerData.country
}
},
items: [
{
name: productData.name,
quantity: productData.quantity,
price: productData.price,
product_code: productData.sku
}
],
payment_method: {
type: 'card',
card_token: customerData.cardToken // İstemciden alınan token
}
};
const response = await fetch('https://api.2checkout.com/1/orders', {
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
return await response.json();
};
Beklenen Yanıt
{
"order_id": "ORD-2026-001234",
"status": "approved",
"amount": 99.99,
"currency": "USD",
"customer_id": "CUST-789456",
"transaction_id": "TXN-9876543210",
"created_at": "2026-03-20T10:30:00Z"
}
Ödeme Hatalarını Yönetme
try {
const result = await createOrder(customer, product);
if (result.error) {
switch (result.error.code) {
case 'CARD_DECLINED':
// Müşteriden farklı bir kart isteyin
break;
case 'INSUFFICIENT_FUNDS':
// Uygun mesajı gösterin
break;
case 'INVALID_CVV':
// CVV'nin yeniden girilmesini isteyin
break;
default:
console.error('Ödeme başarısız:', result.error);
}
}
} catch (error) {
console.error('API isteği başarısız oldu:', error);
}
Yaygın Hata Kodları
| Hata Kodu | HTTP Durumu | Açıklama | Çözüm |
|---|---|---|---|
CARD_DECLINED |
402 | Kart reddedildi | Başka kart isteyin |
INVALID_CARD |
400 | Geçersiz kart | Kartı doğrulayın |
EXPIRED_CARD |
400 | Kart süresi dolmuş | Geçerli tarih isteyin |
INVALID_CVV |
400 | CVV hatalı | CVV'yi yeniden isteyin |
INSUFFICIENT_FUNDS |
402 | Yetersiz bakiye | Alternatif ödeme önerin |
DUPLICATE_ORDER |
409 | Sipariş zaten işlendi | Kopyaları kontrol edin |
INVALID_CURRENCY |
400 | Para birimi desteklenmiyor | Para birimini doğrulayın |
API_KEY_INVALID |
401 | Kimlik doğrulama hatası | API anahtarını kontrol edin |
Müşteri Yönetimi
Abonelik ve tekrar eden ödeme akışlarında müşteri yönetimi şarttır. 2Checkout, tam kapsamlı müşteri API'si sunar.
Müşteri Oluşturma
const createCustomer = async (customerData) => {
const payload = {
email: customerData.email,
first_name: customerData.firstName,
last_name: customerData.lastName,
phone: customerData.phone,
company: customerData.company,
billing_address: {
address1: customerData.address,
address2: customerData.address2 || '',
city: customerData.city,
state: customerData.state,
zip: customerData.zip,
country: customerData.country
},
shipping_address: customerData.shippingAddress || null,
tax_exempt: false,
language: 'tr'
};
const response = await fetch('https://api.2checkout.com/1/customers', {
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
return await response.json();
};
Müşteri Detayı Alma
const getCustomer = async (customerId) => {
const response = await fetch(
`https://api.2checkout.com/1/customers/${customerId}`,
{
method: 'GET',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
}
}
);
return await response.json();
};
Müşteri Güncelleme
const updateCustomer = async (customerId, updates) => {
const response = await fetch(
`https://api.2checkout.com/1/customers/${customerId}`,
{
method: 'PUT',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(updates)
}
);
return await response.json();
};
Müşteri Silme
const deleteCustomer = async (customerId) => {
const response = await fetch(
`https://api.2checkout.com/1/customers/${customerId}`,
{
method: 'DELETE',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY
}
}
);
return response.status === 204;
};
Not: Aktif abonelik veya borcu olan müşteriler silinemez. Önce abonelikleri iptal edin.
Gelişmiş Entegrasyon Desenleri
Idempotency ile Güvenli Yeniden Denemeler
const createIdempotentOrder = async (payload, idempotencyKey) => {
const response = await fetch('https://api.2checkout.com/1/orders', {
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json',
'X-Idempotency-Key': idempotencyKey
},
body: JSON.stringify(payload)
});
return await response.json();
};
// Sipariş başına anahtar üretin ve saklayın
const idempotencyKey = `order_${userId}_${Date.now()}`;
Ağ problemi olsa bile aynı anahtar ile yeniden denediğinizde çift ödeme oluşmaz.
3D Secure 2.0 Yönetimi (AB Uyumluluğu)
const createOrderWith3DS = async (payload) => {
const response = await fetch('https://api.2checkout.com/1/orders', {
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
...payload,
three_ds: {
enabled: true,
challenge_required: 'preferred', // AB için 'mandatory' kullanılabilir
notification_url: 'https://site_adresiniz.com/3ds-geri-bildirim'
}
})
});
const result = await response.json();
if (result.three_ds_redirect_url) {
// Kullanıcıyı bankanın doğrulama sayfasına yönlendirin
res.redirect(result.three_ds_redirect_url);
}
return result;
};
Çoklu Para Birimi Fiyatlandırması
const getLocalizedPrice = async (basePrice, targetCurrency) => {
const response = await fetch(
`https://api.2checkout.com/1/rates?from=USD&to=${targetCurrency}`,
{
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY
}
}
);
const rates = await response.json();
return basePrice * rates.rate;
};
// Kullanım
const eurPrice = await getLocalizedPrice(99.99, 'EUR');
console.log(`Fiyat: EUR ${eurPrice.toFixed(2)}`);
Abonelik Yükseltmelerinde Oransal Hesaplama
const upgradeSubscription = async (subscriptionId, newPlanId) => {
const response = await fetch(
`https://api.2checkout.com/1/subscriptions/${subscriptionId}/upgrade`,
{
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
plan_id: newPlanId,
proration: 'immediate',
invoice_proration: true
})
}
);
return await response.json();
};
Yaygın Sorunları Giderme
Webhook'lar Gelmiyor
Belirti: Siparişler işleniyor ama sisteminiz güncellenmiyor.
Teşhis:
// 2Checkout kontrol panelinden webhook teslimat günlüklerini kontrol edin
Çözüm:
- Uç nokta 5 sn içinde 200 OK döndürmeli
- SSL sertifikanız geçerli olmalı (HTTPS zorunlu)
- 2Checkout IP’lerini güvenlik duvarında açın
- Webhook imza doğrulama kodunuzu gözden geçirin
- Üretimden önce webhook simülatörünü kullanın
Sandbox’ta Test Ödeme Sorunları
Belirti: Tüm test kartları sandbox’ta reddediliyor.
Çözüm:
- Sandbox API anahtarını kullandığınızdan emin olun
- Temel URL:
https://sandbox.2checkout.com/api/ - Doğru test kartı kullanın (aşağıda listelendi)
- Sandbox hesabınızın etkin olduğundan emin olun
Abonelik Yenilemeleri Sessizce Başarısız
Teşhis:
const history = await fetch(
`https://api.2checkout.com/1/subscriptions/${subId}/payments`,
{ headers: { 'X-Api-Key': privateKey } }
);
Çözüm:
- Kartın son kullanma tarihini kontrol edin
- Borç tahsilat ayarlarını gözden geçirin
-
subscription.payment_failedwebhook teslimini doğrulayın -
auto_renewaktif mi kontrol edin
Para Birimi Dönüşüm Tutarsızlıkları
Neden: 2Checkout günlük döviz kuru kullanır.
Çözüm:
- Müşteriye yaklaşık dönüşüm gösterin
- Oranları 15 dakikalığına kilitleyin
- İşlemleri müşterinin para biriminde saklayın
AVS (Adres Doğrulama) Hataları
Çözüm:
- Otomatik adres tamamlama kullanın (Google Places, Lob)
- ZIP kodunu zorunlu yapın
- Yumuşak AVS uygulayın (sadece uyarı)
- Müşteriye adres güncelleme imkanı verin
Abonelik Yönetimi
2Checkout, yinelenen faturalandırmada esnek kontrol sunar.
Abonelik Oluşturma
const createSubscription = async (customerId, planId) => {
const payload = {
customer_id: customerId,
plan_id: planId,
start_date: new Date().toISOString(),
billing_cycle: 'monthly',
payment_method: {
type: 'card',
card_token: 'tok_card_tokenized'
},
options: {
trial_days: 14,
auto_renew: true
}
};
const response = await fetch('https://api.2checkout.com/1/subscriptions', {
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
return await response.json();
};
Abonelik Güncelleme
const updateSubscription = async (subscriptionId, updates) => {
const payload = {
...updates
// plan_id, quantity, payment_method gibi güncellemeler
};
const response = await fetch(
`https://api.2checkout.com/1/subscriptions/${subscriptionId}`,
{
method: 'PUT',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
}
);
return await response.json();
};
Abonelik İptali
const cancelSubscription = async (subscriptionId, reason = '') => {
const payload = {
cancel_at_period_end: false,
reason: reason
};
const response = await fetch(
`https://api.2checkout.com/1/subscriptions/${subscriptionId}/cancel`,
{
method: 'POST',
headers: {
'X-Api-Key': process.env.TWOCHECKOUT_PRIVATE_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
}
);
return await response.json();
};
Webhook Entegrasyonu: Gerçek Zamanlı Olay İşleme
Webhook'lar ile ödeme olaylarını (abonelik, iade, başarısız ödeme) sisteminize anında aktarabilirsiniz.
Adım 1: Webhook Uç Noktasını Yapılandırın
- Kontrol Paneli > Entegrasyonlar > Webhook’lar bölümüne girin
- HTTPS uç noktanızı ekleyin
- Hangi olaylara abone olacağınızı seçin
- Webhook sırrınızı not edin
Adım 2: Webhook İşleyici Oluşturun
const express = require('express');
const crypto = require('crypto');
const app = express();
app.post('/webhooks/2checkout', express.raw({ type: 'application/json' }), async (req, res) => {
const signature = req.headers['x-webhook-signature'];
const payload = req.body;
const isValid = verifyWebhookSignature(payload, signature, process.env.TWOCHECKOUT_WEBHOOK_SECRET);
if (!isValid) {
console.error('Geçersiz webhook imzası');
return res.status(401).send('Yetkisiz');
}
const event = JSON.parse(payload.toString());
switch (event.type) {
case 'order.created':
await handleOrderCreated(event.data);
break;
case 'order.approved':
await handleOrderApproved(event.data);
break;
case 'order.declined':
await handleOrderDeclined(event.data);
break;
case 'subscription.created':
await handleSubscriptionCreated(event.data);
break;
case 'subscription.renewed':
await handleSubscriptionRenewed(event.data);
break;
case 'subscription.cancelled':
await handleSubscriptionCancelled(event.data);
break;
case 'refund.processed':
await handleRefundProcessed(event.data);
break;
default:
console.log('İşlenmeyen olay türü:', event.type);
}
res.status(200).send('OK');
});
function verifyWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature, 'hex'),
Buffer.from(expectedSignature, 'hex')
);
}
Kritik Webhook Olayları
| Olay Türü | Tetikleyici | Gerekli Eylem |
|---|---|---|
order.created |
Yeni sipariş | Onay e-postası gönder |
order.approved |
Ödeme başarılı | Ürün/hizmet erişimi ver |
order.declined |
Ödeme başarısız | Müşteriyi uyar, tekrar dene |
subscription.renewed |
Yinelenen ödeme | Erişimi uzat |
subscription.payment_failed |
Yenileme başarısız | Borç tahsilat başlat |
subscription.cancelled |
Müşteri iptali | Erişimi dönemde iptal et |
refund.processed |
Geri ödeme | Kullanıcı bakiyesini güncelle |
chargeback.received |
Anlaşmazlık | Kanıt topla |
Webhook En İyi Uygulamaları
- İmzaları doğrulayın – Sahte talepleri engelleyin
- Hızlıca 200 OK döndürün – Yeniden denemeleri önleyin
- Asenkron işleyin – Olayları kuyruğa alın
- Idempotency kullanın – Yinelenen bildirimleri engelleyin
- Günlük tutun – Sorunları ve anlaşmazlıkları izleyin
Entegrasyonunuzu Test Etme
Sandbox Ortamı Kullanımı
const BASE_URL = 'https://sandbox.2checkout.com/api/1';
const TEST_CARDS = {
APPROVED: '4111111111111111',
DECLINED: '4000000000000002',
INSUFFICIENT_FUNDS: '4000000000009995',
EXPIRED_CARD: '4000000000000069'
};
const TEST_ADDRESS = {
country: 'US',
zip: '90210'
};
Webhook'ları Yerel Test Etme (ngrok)
npm install -g ngrok
node server.js
ngrok http 3000
# ngrok URL'sini webhook ayarına ekleyin
API Testleri için Apidog
- OpenAPI spesifikasyonunu içe aktarın
- Test koleksiyonları oluşturun
- Yanıtları taklit edin
- Webhook yüklerini inceleyin
- Ekiple paylaşım yapın
Ortam değişkenleri ile test/üretim anahtarlarını kolayca değiştirin.
Üretime Dağıtım Kontrol Listesi
- [ ] Sandbox’tan üretime geçin (anahtar değiştirin)
- [ ] Temel URL’yi
https://api.2checkout.com/olarak ayarlayın - [ ] Webhook imza doğrulamasını etkinleştirin
- [ ] Başarısız ödemeler için izleme kurun
- [ ] Geçici hatalarda tekrar deneme uygulayın
- [ ] Geri ödeme ve chargeback akışlarını test edin
- [ ] PCI DSS uyumluluğunu kontrol edin
- [ ] AB için 3D Secure 2.0’ı açın
- [ ] Günlükleme ve denetim izlerini etkinleştirin
- [ ] Ödeme sorunları için çalışma kitabı oluşturun
İzleme ve Uyarı
// Ödeme başarı oranı izleme
const successRate = approvedOrders / totalOrders * 100;
if (successRate < 95) {
sendAlert('Ödeme başarı oranı %95\'in altına düştü');
}
// Hata kodu dağılımı
const errorBreakdown = errors.reduce((acc, err) => {
acc[err.code] = (acc[err.code] || 0) + 1;
return acc;
}, {});
if (errorBreakdown['CARD_DECLINED'] > threshold) {
sendAlert('Kart reddedilme oranında artış!');
}
Gerçek Dünya Kullanım Durumları
E-ticaret Mağazası Entegrasyonu
Bir moda perakendecisi, 2Checkout entegrasyonu ile:
- 100+ para birimini otomatik destekledi
- Sepet terk oranını %23 azalttı
- AB KDV uyumluluğunu sağladı
- İlk yılda 2 milyon $ işlem hacmine ulaştı
İlk aşamada barındırılan ödeme sayfası ile başlanıp, sonrasında doğrudan API entegrasyonuna geçildi.
SaaS Abonelik İşletmesi
Bir SaaS platformu:
- 5.000+ aktif abonelik yönetti
- Plan yükseltmede oransal ücretlendirme yaptı
- Başarısız yenilemeler için otomatik borç tahsilatı kurdu
- Akıllı tekrar denemelerle churn’ü %15 azalttı
Kritik akış: subscription.renewed webhook’u ile erişimi anında uzatmak, subscription.cancelled ile iptal planlamak.
Sonuç
2Checkout API, ödeme işlemleri ve abonelik yönetimi için eksiksiz ve güvenli bir çözüm sunar. Uygulamada:
- Tüm geliştirme/test süreçlerinde sandbox kullanın
- Webhook’larda HMAC imza doğrulaması uygulayın
- Hata kodu yönetimi ile akışları kararlı hale getirin
- Abonelik akışlarını uçtan uca test edin (deneme, yenileme, iptal)
- Üretimde ödeme metriklerini takip edin
- API testi ve ekip işbirliği için Apidog kullanın
SSS Bölümü
2Checkout API nedir?
2Checkout API (şimdi Verifone), ödemeleri işlemek, abonelikleri yönetmek ve e-ticaret işlemlerini otomatikleştirmek için RESTful bir arayüzdür. JSON yükleri, HMAC kimlik doğrulama ve gerçek zamanlı webhook desteği içerir.
2Checkout Verifone ile aynı mı?
Evet. 2Checkout, Verifone tarafından satın alındı ve Verifone Dijital Ticaret olarak yeniden markalandı. API uç noktaları ve işlevsellik değişmedi.
2Checkout API anahtarımı nasıl alabilirim?
Kontrol Paneli > Entegrasyonlar > API Anahtarları bölümünden yeni anahtar oluşturun. Sunucu için özel, istemci için herkese açık anahtar alırsınız.
2Checkout'un bir sandbox ortamı var mı?
Evet. Test için https://sandbox.2checkout.com/api/ kullanın. Ayrı bir sandbox hesabı oluşturun ve test API anahtarlarını alın.
2Checkout hangi ödeme yöntemlerini destekliyor?
100+ ülkede kredi kartları (Visa, Mastercard, Amex, Discover), PayPal, Apple Pay, Google Pay, banka transferi ve yerel ödeme yöntemleri desteklenir.
Webhook'ları güvenli bir şekilde nasıl yönetirim?
Her zaman X-Webhook-Signature başlığını ve webhook sırrınızı HMAC-SHA256 ile doğrulayın. Olayları asenkron işleyin ve hemen 200 OK döndürün.
Abonelik ödemesi başarısız olursa ne olur?
2Checkout bir subscription.payment_failed webhook’u gönderir. 7 gün içinde 3 tekrar deneme yapılır, tümü başarısız olursa subscription.cancelled gönderilir.
2Checkout PCI DSS uyumlu mu?
Evet, PCI DSS Seviye 1 sertifikalıdır. Kart verisini doğrudan işlememek için istemci tarafı tokenizasyon kullanın.
Abonelikleri sandbox’ta test edebilir miyim?
Evet. Sandbox, deneme, yenileme, yükseltme, düşürme ve iptal dahil tüm abonelik akışlarını test edebilir. Başarılı ödemeler için 4111111111111111 test kartı kullanın.
API ile geri ödemeleri nasıl yönetirim?
/refunds uç noktasına sipariş kimliği ve miktar ile POST isteği gönderin. Tamamlanan her işlemde refund.processed webhook’u gelir.

Top comments (0)