TL;DR
2Checkout API (şimdi Verifone), geliştiricilerin ödemeleri işlemesine, abonelikleri yönetmesine ve e-ticaret işlemlerini programlı olarak yürütmesine olanak tanır. API anahtarlarını kullanarak JSON tabanlı kimlik doğrulama ile siparişler, müşteriler, ürünler ve webhook'lar için RESTful uç noktalarını destekler. Bu kılavuz, ilk kurulumdan gelişmiş webhook yönetimine kadar her şeyi kapsar.
Giriş
Ödeme işleme, herhangi bir çevrimiçi işletmenin omurgasıdır. Yanlış yaparsanız gelir kaybedersiniz. Doğru yaparsanız küresel pazarların kilidini açarsınız. 2Checkout API (yakın zamanda Verifone olarak yeniden markalandı), dünya çapında 45.000'den fazla satıcının ödemelerini yöneterek her yıl milyarlarca işlem gerçekleştirir.
İşte gerçek: Alışveriş yapanların %67'si ödeme sürtüşmesi nedeniyle sepetlerini terk ediyor. Sağlam bir ödeme API entegrasyonu doğrudan kârınızı etkiler.
Bu kılavuz, 2Checkout API entegrasyon sürecinin tamamını anlatmaktadır. Kimlik doğrulama, ödeme işleme, abonelik yönetimi, webhook yönetimi ve hata giderme konularını öğreneceksiniz. Sonunda, üretime hazır bir ödeme entegrasyonuna sahip olacaksınız.
2Checkout API Nedir?
2Checkout (şimdi Verifone Digital Commerce olarak faaliyet gösteriyor) ödeme işleme ve abonelik yönetimi için bir RESTful API sağlar. API şunları yönetir:
- Tek seferlik ve yinelenen ödemeler
- Müşteri ve ürün yönetimi
- Sipariş yaşam döngüsü takibi
- Geri ödeme ve anlaşmazlık yönetimi
- Vergi ve uyumluluk otomasyonu
- Çoklu para birimi desteği (100'den fazla para birimi)
Temel Özellikler
| Özellik | Açıklama |
|---|---|
| RESTful Tasarım | JSON yükleri ile standart HTTP yöntemleri (GET, POST, PUT, DELETE) |
| Sandbox Ortamı | Gerçek işlemler yapmadan ödemeleri test edin |
| Webhook Desteği | Sipariş etkinlikleri için gerçek zamanlı bildirimler |
| Tokenizasyon | Kart bilgilerini saklamadan güvenli ödeme verisi yönetimi |
| Küresel Uyum | PCI DSS Seviye 1, GDPR, PSD2 ve 3D Secure 2.0 |
API Mimari Genel Bakış
2Checkout, versiyonlandırılmış bir REST API yapısı kullanır:
https://api.2checkout.com/1/
https://api.2checkout.com/2/
Sürüm 2, geliştirilmiş abonelik yönetimi ve webhook yönetimi ile şu anda önerilen sürümdür.
Başlarken: Kimlik Doğrulama Kurulumu
Adım 1: 2Checkout Hesabınızı Oluşturun
API'ye erişmeden önce bir satıcı hesabına ihtiyacınız var:
- 2Checkout (Verifone) kayıt sayfasını ziyaret edin
- İşletme doğrulamasını tamamlayın (işletme belgeleri gerektirir)
- Onayı bekleyin (genellikle 24-48 saat sürer)
- API kimlik bilgilerini almak için Kontrol Panelinize erişin
Adım 2: API Anahtarlarını Alın
Kontrol Panelinizi kullanarak Entegrasyonlar > API Anahtarları bölümüne gidin:
- Özel API Anahtarı: Sunucu tarafı kimlik doğrulama için kullanılır (bunu gizli tutun)
- Herkese Açık API Anahtarı: İstemci tarafı tokenizasyon için kullanılır (açığa çıkarması güvenlidir)
- Webhook Sırrı: Webhook imzalarını doğrulamak için kullanılır
Güvenlik notu: API anahtarlarını asla sürüm kontrolüne kaydetmeyin. 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ı
2Checkout ayrı ortamlar sağlar:
| Ortam | Temel URL | Kullanım Durumu |
|---|---|---|
| Sandbox | https://sandbox.2checkout.com/api/ |
Geliştirme ve test |
| Üretim | https://api.2checkout.com/ |
Canlı işlemler |
Geliştirme sırasında sandbox kimlik bilgilerini kullanın. Gerçek ödemeleri işlemeye hazır olduğunuzda yalnızca üretim anahtarlarına geçin.
Adım 4: Kimlik Doğrulama Yöntemleri
2Checkout iki kimlik doğrulama yaklaşımını destekler:
Yöntem 1: API Anahtarı Kimlik Doğrulaması (Önerilen)
Özel anahtarınızı istek başlığına ekleyin:
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ğrulaması
Gelişmiş güvenlik için istekleri HMAC-SHA256 ile imzalayın:
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 tek bir ödeme işleyin:
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 // İstemci tarafı tokenizasyondan
}
};
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
Her zaman uygun hata yönetimini uygulayın:
try {
const result = await createOrder(customer, product);
if (result.error) {
// Belirli hata kodlarını ele alın
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:
// Genel hatayı günlüğe kaydedin ve gösterin
console.error('Ödeme başarısız:', result.error);
}
}
} catch (error) {
// Ağ veya sunucu hatası
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 | Farklı bir ödeme yöntemi isteyin |
INVALID_CARD |
400 | Geçersiz kart numarası | Kart girişini doğrulayın |
EXPIRED_CARD |
400 | Kartın süresi dolmuş | Güncel son kullanma tarihini isteyin |
INVALID_CVV |
400 | CVV doğrulama başarısız oldu | CVV'yi yeniden isteyin |
INSUFFICIENT_FUNDS |
402 | Yeterli bakiye yok | Alternatif ödeme önerin |
DUPLICATE_ORDER |
409 | Sipariş zaten işlenmiş | Kopyaları kontrol edin |
INVALID_CURRENCY |
400 | Desteklenmeyen para birimi | Para birimi kodunu doğrulayın |
API_KEY_INVALID |
401 | Kimlik doğrulama başarısız oldu | API anahtarını kontrol edin |
Müşteri Yönetimi
Müşteri verilerini yönetmek, abonelik tabanlı işletmeler ve tekrar eden alışverişler için çok önemlidir. 2Checkout eksiksiz bir 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' // TR'ye çevrildi
};
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 Yanıtı
{
"customer_id": "CUST-2026-123456",
"email": "john.doe@example.com",
"first_name": "John",
"last_name": "Doe",
"created_at": "2026-03-20T10:00:00Z",
"updated_at": "2026-03-20T10:00:00Z",
"payment_methods": [],
"subscriptions": [],
"order_history": []
}
Müşteri Detaylarını 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 Bilgilerini 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; // Başarılı olduğunda içerik yok
};
Not: Aktif abonelikleri veya ödenmemiş bakiyeleri olan bir müşteriyi silme işlemi başarısız olacaktır. Önce abonelikleri iptal edin.
Gelişmiş Entegrasyon Desenleri
Güvenli Yeniden Denemeler İçin Idempotency
Ödeme API'leri, yinelenen ücretlendirmeleri önlemek için idempotent istekleri desteklemelidir:
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 // Sipariş başına benzersiz
},
body: JSON.stringify(payload)
});
return await response.json();
};
// Sipariş başına benzersiz anahtar oluşturun (veritabanınızda saklayın)
const idempotencyKey = `order_${userId}_${Date.now()}`;
İstek zaman aşımına uğrarsa ancak 2Checkout tarafından işlenmişse, aynı anahtarla yeniden denemek iki kez ücretlendirmek yerine orijinal sonucu döndürür.
3D Secure 2.0'ı Yönetme (AB Uyumluluğu)
Avrupalı müşteriler için 3D Secure 2.0 kimlik doğrulaması PSD2 kapsamında zorunludur:
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', // veya AB için 'mandatory'
notification_url: 'https://site_adresiniz.com/3ds-geri-bildirim'
}
})
});
const result = await response.json();
// 3DS yönlendirmesini ele alın
if (result.three_ds_redirect_url) {
// Müşteriyi kimlik doğrulama için bankalarına yönlendirin
res.redirect(result.three_ds_redirect_url);
}
return result;
};
Çoklu Para Birimi Fiyatlandırması
Fiyatları yerel para birimlerinde gösterirken, temel para biriminizde ödeme yapın:
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ükseltmeleri İçin Oransal Hesaplama
Müşteriler döngü ortasında yükseltme yaptığında, oransal ücretleri hesaplayın:
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', // Farkı şimdi ücretlendirin
invoice_proration: true // Faturada kalem olarak göster
})
}
);
return await response.json();
};
Yaygın Sorunları Giderme
Sorun: Webhook'lar Gelmiyor
Belirtiler: Siparişler işleniyor ancak sisteminiz güncellenmiyor.
Teşhis:
// 2Checkout kontrol panelindeki webhook teslimat günlüklerini kontrol edin
// Başarısız teslimat girişimlerini veya 200 dışı yanıtları arayın
Çözümler:
- Uç noktanın 5 saniye içinde 200 OK döndürdüğünü doğrulayın
- SSL sertifikası geçerliliğini kontrol edin (HTTPS olmalıdır)
- Güvenlik duvarınızda 2Checkout IP aralıklarını beyaz listeye ekleyin
- Webhook imza doğrulama mantığını gözden geçirin
- Üretimden önce webhook simülatörü ile test edin
Sorun: Test Ödemeleri Sandbox'ta Başarısız Oluyor
Belirtiler: Tüm test kartları sandbox ortamında reddediliyor.
Çözümler:
- Sandbox API anahtarlarını kullandığınızı doğrulayın (üretim değil)
- Sandbox temel URL'sini doğrulayın:
https://sandbox.2checkout.com/api/ - Doğru test kart numaralarını kullanın (Test bölümüne bakın)
- Sandbox hesap durumunu kontrol edin (etkinliksizlikten sonra süresi dolabilir)
Sorun: Abonelik Yenilemeleri Sessizce Başarısız Oluyor
Belirtiler: Abonelikler aktif görünüyor ancak yenilemeler işlenmiyor.
Teşhis:
// Abonelik ödeme geçmişini sorgulayın
const history = await fetch(
`https://api.2checkout.com/1/subscriptions/${subId}/payments`,
{ headers: { 'X-Api-Key': privateKey } }
);
Çözümler:
- Müşteri ödeme yöntemi son kullanma tarihini kontrol edin
- Kontrol Paneli'ndeki borç tahsilat ayarlarını gözden geçirin
subscription.payment_failediçin webhook teslimini doğrulayınauto_renewbayrağının etkinleştirildiğini onaylayın
Sorun: Para Birimi Dönüşüm Tutarsızlıkları
Belirtiler: Tahsil edilen miktar beklenen dönüşümden farklı.
Neden: 2Checkout, dalgalanan günlük döviz kurlarını kullanır.
Çözüm:
- Feragatname ile “yaklaşık” dönüşüm gösterin
- Sepet oluşturma sırasında oranları 15 dakikalık süreyle kilitleyin
- İşlemleri müşterinin yerel para biriminde saklayın
Sorun: AVS (Adres Doğrulama) Hataları
Belirtiler: Geçerli kartlar adres uyuşmazlığı nedeniyle reddediliyor.
Çözümler:
- Adres otomatik tamamlama kullanın (Google Places, Lob)
- Ödeme sırasında ZIP/posta kodunu zorunlu kılın
- Yumuşak AVS uygulayın (reddetmek yerine uyarın)
- Müşterinin fatura adresini güncellemesine izin verin
Abonelik Yönetimi
2Checkout, yinelenen faturalandırmada üstündür. Abonelikleri nasıl yöneteceğiniz aşağıda açıklanmıştır:
Abonelik Oluşturma
const createSubscription = async (customerId, planId) => {
const payload = {
customer_id: customerId,
plan_id: planId,
start_date: new Date().toISOString(),
billing_cycle: 'monthly', // veya 'annual', 'weekly'
payment_method: {
type: 'card',
card_token: 'tok_card_tokenized'
},
options: {
trial_days: 14, // İsteğe bağlı ücretsiz deneme
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 Yanıtı
{
"subscription_id": "SUB-2026-567890",
"status": "active",
"plan_id": "PLAN-PREMIUM-MONTHLY",
"customer_id": "CUST-789456",
"current_period_start": "2026-03-20T00:00:00Z",
"current_period_end": "2026-04-20T00:00:00Z",
"trial_end": "2026-04-03T00:00:00Z",
"amount": 29.99,
"currency": "USD"
}
Abonelik Güncelleme
Planları değiştirin, ödeme yöntemlerini güncelleyin veya miktarları ayarlayın:
const updateSubscription = async (subscriptionId, updates) => {
const payload = {
...updates
// Örnekler:
// plan_id: 'PLAN-ENTERPRISE-MONTHLY',
// quantity: 5,
// payment_method: { card_token: 'new_token' }
};
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, // true = mevcut dönem sonunda iptal et, false = hemen
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, sisteminize ödeme olaylarını sorgulamadan bildirir. Bu, abonelik yenilemeleri, başarısız ödemeler ve geri ödemeler için kritik öneme sahiptir.
Adım 1: Webhook Uç Noktasını Yapılandırın
2Checkout Kontrol Panelinizde:
- Entegrasyonlar > Webhook'lar bölümüne gidin
- Uç nokta URL'nizi ekleyin (HTTPS kullanmalıdır)
- Abone olmak istediğiniz olayları seçin
- Kaydedin ve Webhook Sırrınızı not alın
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;
// Webhook imzasını doğrulayın
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());
// Uygun işleyiciye yönlendirin
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);
}
// Alındığını onaylayın
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ş verildi | Onay e-postası gönder |
order.approved |
Ödeme başarılı | Siparişi yerine getir, erişim izni ver |
order.declined |
Ödeme başarısız oldu | Müşteriyi bilgilendir, tekrar deneme mantığı |
subscription.renewed |
Yinelenen ödeme | Erişim süresini uzat |
subscription.payment_failed |
Yenileme başarısız oldu | Borç tahsilat sırası |
subscription.cancelled |
Müşteri iptal etti | Dönem sonunda erişimi iptal et |
refund.processed |
Geri ödeme yapıldı | Kullanıcı bakiyesini güncelle |
chargeback.received |
Anlaşmazlık açıldı | Kanıt topla |
Webhook En İyi Uygulamaları
- İmzaları her zaman doğrulayın - Sahte webhook'ları önler
- 200 OK'i hızlıca döndürün - 2Checkout 200 dışındaki yanıtları tekrar dener
- Asenkron olarak işleyin - Arka plan işlemesi için olayları sıraya koyun
- Idempotency uygulayın - Yinelenen webhook teslimatlarını yönetin
- Her şeyi günlüğe kaydedin - Zaman damgalı günlüklerle ödeme anlaşmazlıklarını giderin
Entegrasyonunuzu Test Etme
Sandbox Ortamını Kullanma
2Checkout'un sandbox'ı, gerçek ücretlendirme olmadan test yapmanızı sağlar:
// Sandbox temel URL'sini kullanın
const BASE_URL = 'https://sandbox.2checkout.com/api/1';
// Test kart numaraları
const TEST_CARDS = {
APPROVED: '4111111111111111',
DECLINED: '4000000000000002',
INSUFFICIENT_FUNDS: '4000000000009995',
EXPIRED_CARD: '4000000000000069'
};
// Test adresleri
const TEST_ADDRESS = {
country: 'US',
zip: '90210' // AVS kontrollerini tetikler
};
Webhook'ları Yerel Olarak Test Etme
Yerel sunucunuzu dışa açmak için ngrok kullanın:
# ngrok'u yükleyin
npm install -g ngrok
# Sunucunuzu 3000 portunda başlatın
node server.js
# İnternete açın
ngrok http 3000
# ngrok URL'sini 2Checkout webhook ayarlarına kopyalayın
API Testleri İçin Apidog
Apidog, 2Checkout API testlerini kolaylaştırır:
- OpenAPI Spesifikasyonunu İçe Aktar - 2Checkout'un API tanımını yükleyin
- Test Senaryoları Oluştur - Her uç nokta için koleksiyonlar oluşturun
- Yanıtları Taklit Et - API'ye istek göndermeden test edin
- Webhook'ları Doğrula - Yük yapılarını inceleyin
- Ekiple Paylaş - Entegrasyon testinde işbirliği yapın
Sandbox ve üretim anahtarları için ortam değişkenleri oluşturun, ardından tek tıklamayla bağlamları değiştirin.
Üretime Dağıtım Kontrol Listesi
Canlıya geçmeden önce:
- [ ] Sandbox'tan üretim API anahtarlarına geçin
- [ ] Temel URL'yi
https://api.2checkout.com/olarak güncelleyin - [ ] Webhook imza doğrulamasını etkinleştirin
- [ ] Başarısız ödemeler için izleme kurun
- [ ] Geçici hatalar için tekrar deneme mantığını yapılandırın
- [ ] Geri ödeme ve ters ibraz akışlarını test edin
- [ ] PCI DSS uyumluluğunu doğrulayın (tokenizasyon kullanın)
- [ ] AB müşterileri için 3D Secure 2.0'ı etkinleştirin
- [ ] Denetim izleri için günlüğe kaydetmeyi kurun
- [ ] Ödeme sorunları için çalışma kitabı oluşturun
İzleme ve Uyarı Verme
Bu metrikleri takip edin:
// Örnek: Ödeme başarı oranı
const successRate = approvedOrders / totalOrders * 100;
if (successRate < 95) {
// Ödeme ekibini uyar
sendAlert('Ödeme başarı oranı %95'in altına düştü');
}
// Belirli hata kodlarını takip edin
const errorBreakdown = errors.reduce((acc, err) => {
acc[err.code] = (acc[err.code] || 0) + 1;
return acc;
}, {});
// Belirli hatalarda ani yükseliş olduğunda uyar
if (errorBreakdown['CARD_DECLINED'] > threshold) {
sendAlert('Kart reddedilme oranında ani yükseliş tespit edildi');
}
Gerçek Dünya Kullanım Durumları
E-ticaret Mağazası Entegrasyonu
Bir moda perakendecisi, küresel ödemeleri yönetmek için 2Checkout'u entegre etti. Sonuçlar:
- 100'den fazla para birimini otomatik olarak destekledi
- Sepet terk oranını %23 azalttı
- AB KDV uyumluluğunu otomatik olarak yönetti
- İlk yılda 2 milyon dolardan fazla işlem gerçekleştirdi
Uygulama başlangıçta 2Checkout'un barındırılan ödeme sayfalarını kullanarak 3 hafta sürdü, ardından özel kullanıcı deneyimi için doğrudan API entegrasyonuna geçildi.
SaaS Abonelik İşletmesi
Bir proje yönetimi SaaS'ı 2Checkout aboneliklerini kullandı:
- 5.000'den fazla aktif aboneliği yönetti
- Plan yükseltmeleri için oransal hesaplama yaptı
- Başarısız yenilemeler için otomatik borç tahsilatı yaptı
- Akıllı tekrar denemelerle müşteri kaybını %15 azalttı
Temel özellik: Webhook tabanlı erişim kontrolü. subscription.renewed geldiğinde, kullanıcı erişimini anında uzatın. subscription.cancelled geldiğinde, erişim iptalini planlayın.
Sonuç
2Checkout API, ödeme işleme ve abonelik yönetimi için gereken her şeyi sağlar. Temel çıkarımlar:
- Tüm geliştirme ve testler için sandbox ortamını kullanın
- Webhook'lar için HMAC imza doğrulamasını uygulayın
- Belirli hata kodu yönetimi ile hataları zarifçe ele alın
- Abonelik akışlarını kapsamlı bir şekilde test edin (deneme, yenileme, iptal)
- Üretimde ödeme metriklerini izleyin
- API testini ve ekip işbirliğini kolaylaştırmak için Apidog'u kullanın
SSS Bölümü
2Checkout API nedir?
2Checkout API (şimdi Verifone), ödemeleri işlemek, abonelikleri yönetmek, geri ödemeleri ele almak ve e-ticaret işlemlerini otomatikleştirmek için bir RESTful arayüzüdür. JSON yüklerini, HMAC kimlik doğrulamasını ve gerçek zamanlı webhook'ları destekler.
2Checkout Verifone ile aynı mı?
Evet. 2Checkout, 2020 yılında Verifone tarafından satın alındı ve Verifone Dijital Ticaret olarak yeniden markalandı. API uç noktaları ve işlevselliği aynı kalmıştır, ancak bazı dokümantasyonlar Verifone'a atıfta bulunmaktadır.
2Checkout API anahtarımı nasıl alabilirim?
2Checkout Kontrol Panelinize giriş yapın, Entegrasyonlar > API Anahtarları bölümüne gidin ve yeni bir anahtar oluşturun. Bir özel anahtar (sunucu tarafı) ve bir herkese açık anahtar (istemci tarafı tokenizasyon) alacaksınız.
2Checkout'un bir sandbox ortamı var mı?
Evet. Test için https://sandbox.2checkout.com/api/ adresini kullanın. Test API anahtarları almak ve gerçek ücretlendirmeler olmadan test işlemleri yapmak için ayrı bir sandbox hesabı oluşturun.
2Checkout hangi ödeme yöntemlerini destekliyor?
2Checkout, 100'den fazla ülkede kredi kartlarını (Visa, Mastercard, Amex, Discover), PayPal'ı, Apple Pay'i, Google Pay'i, banka transferlerini ve yerel ödeme yöntemlerini destekler.
Webhook'ları güvenli bir şekilde nasıl yönetirim?
X-Webhook-Signature başlığını her zaman webhook sırrınızla birlikte HMAC-SHA256 kullanarak doğrulayın. Olayları asenkron olarak işleyin ve yeniden denemeleri önlemek için hemen 200 OK döndürün.
Abonelik ödemesi başarısız olduğunda ne olur?
2Checkout bir subscription.payment_failed webhook'u gönderir. Tekrar deneme mantığını uygulayın (genellikle 7 gün içinde 3 deneme) ve tüm denemeler başarısız olursa bir subscription.cancelled webhook'u gönderin.
2Checkout PCI DSS uyumlu mu?
Evet, 2Checkout PCI DSS Seviye 1 sertifikalıdır. Ham kart verilerini işlemeyi önlemek için istemci tarafı tokenizasyon kullanın, bu da PCI uyumluluk kapsamınızı azaltır.
Abonelikleri sandbox'ta test edebilir miyim?
Evet. Sandbox, denemeler, yenilemeler, yükseltmeler, düşürmeler ve iptaller dahil olmak üzere tam abonelik yaşam döngüsü testini destekler. Başarılı ödemeler için 4111111111111111 test kartını kullanın.
API aracılığıyla geri ödemeleri nasıl yönetirim?
Sipariş Kimliği ve geri ödeme miktarı ile /refunds adresine bir POST isteği gönderin. 2Checkout kısmi veya tam geri ödemeleri işler ve tamamlandığında bir refund.processed webhook'u gönderir.
