Ana içeriğe geç

Hızlı başlangıç

Minimum bir ödeme entegrasyonu: API aracılığıyla fatura oluşturma ve ödeme bildirimini işleme. Son bölüm sipariş teslimini ele alır. Örnekler kendi içinde bütündür; SDK kullanılmaz.

ipucu

Bir yapay zekâ ajanıyla mı çalışıyorsunuz? Ona bu sayfanın markdown sürümünü verin. Siteniz veya mağazanız için bir entegrasyon kurmaya yetecek ayrıntıyı içerir.

Ön koşullar

DeğerNereden alınır
API anahtarı (API key)Entegrasyonlar (Integrations) bölümü
Proje ID'si (Project ID)Projeler (Projects) bölümü
Webhook gizli anahtarı (Webhook secret)Proje ayarları

Aynı proje ayarlarında Webhook URL'yi ayarlayın — sunucunuzdaki bildirim işleyicisinin adresi. Yalnızca HTTPS; yönlendirmeler izlenmez.

Örnekler test değerleri kullanır — bunları kendi değerlerinizle değiştirin.

Fatura oluşturma

POST https://api.bitsby.app/invoices/create, API anahtarı Authorization başlığında gönderilir.

ParametreZorunluDeğer
projectIdevetProje ID'si, UUID
amountFiatevetFatura tutarı
currencyFiatevetPara birimi: USD, EUR, RUB
timeToPayevetSaat cinsinden ödeme süresi: 0.5, 1, 3, 6, 12
descriptionhayırAçıklama, ödeme sayfasında alıcıya gösterilir
serviceDatahayırHizmet verisi, alıcıya gösterilmez. Sipariş numarasını göndermenizi öneririz: ödeme bildiriminde geri gelir
curl -X POST https://api.bitsby.app/invoices/create \
-H "Authorization: Token MSvL2ltaDZdWVjmZURURMVWhqSJLT2NURjhL2Fla1Z1T1IxQTltKs1T3Ay" \
-F "projectId=9deea1e2-0c08-41a3-bdc2-a34eada3892d" \
-F "amountFiat=49.90" \
-F "currencyFiat=USD" \
-F "timeToPay=1" \
-F "description=Order 4172" \
-F "serviceData=order-4172"

Yanıt:

{
"result": "success",
"data": {
"id": "ade9550d-3dc7-4fd3-b94e-3b4c12aaaa0c",
"uid": "MXNj4m8HhcM4",
"createDatetime": "2026-09-14 10:12:03",
"timeToPayDatetime": "2026-09-14 11:12:03",
"commissionFiatUSD": 0.5,
"amountFiatUSD": 49.9,
"url": "https://dash.bitsby.app/invoices/pay/MXNj4m8HhcM4"
}
}

data.id değerini siparişle birlikte saklayın ve alıcıyı data.url adresine — ödeme sayfasına gönderin. Bağlantıyı istediğiniz şekilde iletin: yönlendirme, e-posta, bot mesajı. Fatura, timeToPayDatetime (UTC) zamanına kadar geçerlidir.

Bildirimi işleme

Bir fatura Ödendi (Paid) durumuna geçtiğinde hizmet, projenin Webhook URL'sine bir POST isteği gönderir. Gövde JSON'dur; imza başlıklardadır:

BaşlıkDeğer
X-TimestampGönderim zamanı, saniye cinsinden unix time
X-Signaturesha256= + <timestamp>.<request body> dizesinin hex HMAC-SHA256 değeri

İmzalama anahtarı, webhook gizli anahtarıdır. İmza ham istek gövdesi üzerinden hesaplanır, bu nedenle JSON'u ayrıştırmadan önce imzayı doğrulayın.

<?php
$secret = 'k7QwR2mZ9tXbN4vL8sJpH3dF6yA1cE0u';

$body = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_TIMESTAMP'] ?? '';
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';

// Reject replayed requests: allow up to 5 minutes of clock drift
if (abs(time() - (int)$timestamp) > 300) {
http_response_code(400);
exit;
}

$expected = 'sha256='.hash_hmac('sha256', $timestamp.'.'.$body, $secret);

if (!hash_equals($expected, $signature)) {
http_response_code(403);
exit;
}

$invoice = json_decode($body, true)['invoice'];

if ($invoice['status'] === 'paid') {
// $invoice['serviceData'] — the order id passed at creation: 'order-4172'
// $invoice['amountFiat'] — the original invoice amount: 49.9
// Issue the order here, see the next section
}

http_response_code(200);

10 saniye içinde 2xx koduyla yanıt verin. Başka bir kod, yönlendirme veya zaman aşımı başarısız teslimat sayılır: hizmet, 5 dakikadan 24 saate kadar artan aralıklarla yeniden dener, sonra durur. Uzun işlemleri bir kuyruğa aktarın: önce 200 ile yanıt verin, siparişi sonra işleyin.

Bildirim biçiminin tamamı ve alan referansı Webhook URL bölümündedir.

Sipariş teslimi

Durumu paid olan doğrulanmış bir bildirim, ödemeyi onaylar. Teslim adımları:

  1. invoice.serviceData ile siparişi bulun — fatura oluşturulurken gönderilen değer (order-4172).
  2. invoice.id ile bu faturanın daha önce teslim edilip edilmediğini kontrol edin. Aynı invoice.id ile bildirim birden fazla kez gelebilir — siparişi bir kez teslim edin ve işlendi işaretini saklayın.
  3. invoice.amountFiat ve invoice.currencyFiat ile tutarı ve para birimini doğrulayın — bunlar faturanın orijinal değerleridir ve asla değişmez. amountFiatUSD değerinin üzerine fiilen alınan tutar yazılır. Tutarları dize olarak değil sayı olarak karşılaştırın: sondaki sıfırlar atılır, bu yüzden 49.90 değeri 49.9 olarak gelir. Değerler siparişle uyuşmuyorsa faturayı teslim yerine manuel incelemeye yönlendirin — bu tür durumlar Ödeme eşleştirme ve tutar uyuşmazlıkları sayfasında ele alınır.
  4. Siparişi teslim edin ve işlendi olarak işaretleyin.

Teslim sırasında ödeme süresini kontrol etmeyin: ödeme, timeToPayDatetime zamanından sonra on-chain onaylanmış olabilir ve satıcı bir ödemeyi faturayla manuel olarak eşleştirebilir. Bildirimin kendisi ödemeyi onaylar.

Sırada ne var