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​