Siparişler

1.7k görüntülenme Markdown

Sipariş geçmişini gören, fiyat çıkaran ve siparişi veren dört uç.

Genel Bakış

Müşteri kendi adına sipariş verebilir, ama bu sipariş tarayıcısız tamamlanır. Bu yüzden ödeme dar tutulmuştur: hesap bakiyesi ya da hesapta kayıtlı bir kart.

Üç adımlı bir akış vardır: ürün detayından şemayı okuyun, önizleme ucuyla fiyatı görün, sonra siparişi verin. Önizleme sipariş ucunun aynı zincirini çalıştırır ve hiçbir şey yazmaz.

Alan adı edinmek bu uçlara ait değildir. Yeni bir alan adı önce alan adı uçlarından alınır, sonra siparişte sahip olunan alan adı olarak gösterilir.

Referans

Siparişleri Listeleme

get/api/v1/client/orders
Orders/GetOrders anahtarın sahibi

Hesabın siparişlerini en yeniden başlayarak döndürür.

Sorgu 3
pageintKaçıncı sayfa.
limitintSayfa başına satır. En çok 100.
statusstringDurum süzgeci: bekliyor, işlemde, etkin ya da iptal.
Dönen alanlar data[] — 8 + meta — 4
idintSiparişin numarası.
numberstringMüşterinin gördüğü sipariş numarası.
statusstringSiparişin durumu.
totalobjectSipariş toplamı. Cüzdan para birimindedir.
payment_methodstringKaydedilen ödeme yöntemi.
invoice_idintSipariş faturasının numarası. Fatura yoksa boş gelir.
items_countintSiparişteki satır sayısı.
created_atstringSiparişin verildiği gün.
total_countintToplam sipariş. Meta altında toplam adıyla döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa.
Hatalar 2
status_invalid422Durum bilinen bir sipariş durumu değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/orders?status=active' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/orders?status=active', {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data, meta } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/orders?status=active');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Liste SATIRLARI tasimaz: kalemler ve dogan hizmetler ancak detay ucunda gelir.
$rows = Kernel::internal('client:Orders/GetOrders', ['owner_id' => $uid])['data'];

Sipariş Detayını Okuma

get/api/v1/client/orders/{id}
Orders/GetOrder anahtarın sahibi

Siparişin satırlarını, doğan hizmetlerini ve faturasını döndürür.

Dönen alanlar data — 12
idintSiparişin numarası.
numberstringSipariş numarası.
statusstringSiparişin durumu.
totalobjectSipariş toplamı.
payment_methodstringKaydedilen ödeme yöntemi.
invoice_idintSipariş faturasının numarası.
items_countintSatır sayısı.
created_atstringSiparişin verildiği gün.
itemsobject[]Sipariş satırları. Her biri etiket, adet ve satır toplamı taşır.
servicesobject[]Siparişten doğan hizmetler. Numara, ad, tür ve durum taşır; numara hizmet ucuna verilir.
invoiceobjectSipariş faturasının özeti. Numara, seri, durum, toplam ve tarihleri taşır.
notesstringSipariş verilirken yazılan not.
Hatalar 2
not_found404Böyle bir sipariş yok ya da başka bir müşteriye ait.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/orders/918' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/orders/${id}`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const ids = data.services.map((s) => s.id);
$ch = curl_init('https://panel.ornek.com/api/v1/client/orders/' . $id);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Siparis BEKLIYOR kalirken hizmetler zaten dogmus olabilir; ilerlemeyi hizmet durumundan izleyin.
$o = Kernel::internal('client:Orders/GetOrder', ['owner_id' => $uid, 'id' => $id])['data'];
$live = array_filter($o['services'], fn ($s) => $s['status'] === 'active');

Siparişi Fiyatlandırma

post/api/v1/client/orders/preview
Orders/PreviewOrder hiçbir şey yazılmaz

Sipariş gövdesini fiyatlandırır ve tek satır bile yazmaz.

Gövde 4
itemsobject[]reqSipariş satırları. Birden yirmiye kadar; şekli sipariş ucuyla aynıdır.
product_idintreqSipariş edilecek ürünün numarası.
cyclestringreqÖdeme döngüsü. Ürünün fiyatlı döngülerinden biri olmalıdır.
quantityintAdet. Yalnız ürün çoklu alıma izin veriyorsa dikkate alınır.
addonsobjectSeçilen ek hizmetler. Ek hizmet numarasını seçenek numarasına eşler. Ürünün ilk dönemi ücretsiz dahil ettiği ek hizmet gönderilmese de siparişe eklenir. İlk dönem tutarı 0 olur, yenilemeler ek hizmet fiyatından faturalanır ve siparişten çıkarılamaz.
addons_qtyobjectAdetli ek hizmetlerin sayısı.
requirementsobjectÜrünün sorduğu alanların yanıtları. Zorunlu işaretlenen her alan gönderilmelidir.
requirement_filesobjectDosya isteyen alanların içeriği. Kodlanmış içerik olarak gönderilir; adres kabul edilmez.
metricsint[]Açılacak ölçümlerin numaraları.
domainobjectSatırın alan adı ekseni. Seçim, ad, alt alan adı kökü ve lisans alanlarını taşır.
couponsstring[]Denenecek kupon kodları.
billing_profile_idintFatura profilinin numarası. Vergi bağlamını belirler; verilmezse varsayılan profil, hesapta kayıtlı profil yoksa hesabın ülkesi kullanılır.
paymentobjectÖdeme bloğu. Verilirse yöntemin komisyonu toplama eklenir; bakiye yeterliliği burada denetlenmez.
Dönen alanlar data — 6
itemsobject[]Fiyatlanmış satırlar. Her biri tür, ürün, ad, döngü, adet, alan adı, birim fiyat, kurulum ücreti ve satır toplamı taşır.
subtotalobjectİndirim ve vergi öncesi toplam.
discountobjectToplam indirim.
taxobjectİndirimli taban üzerinden vergi.
feeobjectÖdeme yöntemi komisyonu. Yalnız ödeme bloğu gönderildiğinde hesaplanır.
totalobjectGenel toplam. Sipariş ucunun tahsil edeceği tutardır.
Hatalar 8
items_required422Satır gönderilmemiş ya da yirmiden fazla.
product_not_orderable422Ürün yok, kapalı, gizli ya da grubu siparişe kapalı.
cycle_invalid422Döngü ürünün fiyatlı döngülerinden biri değil.
requirement_missing422Zorunlu bir sipariş alanı gönderilmemiş.
domain_acquisition_not_here422Alan adı kaydı ya da transferi bu uçta yapılmaz.
coupon_invalid422Kupon geçersiz ya da bu satırlara uygulanamıyor.
not_found404Fatura profili ya da kart bu hesaba ait değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/orders/preview' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"items":[{"product_id":55,"cycle":"monthly","quantity":1}],"coupons":["WELCOME10"]}'
const res = await fetch('https://panel.ornek.com/api/v1/client/orders/preview', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ items, coupons }),
});

const { data } = await res.json();
showSummary(data.subtotal, data.discount, data.tax, data.total);
$ch = curl_init('https://panel.ornek.com/api/v1/client/orders/preview');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['items' => $items]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Onizleme siparis kapilarini KOSTURMAZ: sartlar, dogrulama ve bakiye yeterliligi burada denetlenmez.
$q = Kernel::internal('client:Orders/PreviewOrder', ['owner_id' => $uid, 'items' => $items])['data'];
$due = $q['total']['amount'];

Sipariş Verme

post/api/v1/client/orders
Orders/CreateOrder bakiye ya da kayıtlı kart

Siparişi verir ve aynı çağrıda tahsil eder.

Gövde 7
termsboolreqŞartların kabulü. Doğru gönderilmelidir.
itemsobject[]reqSipariş satırları. Birden yirmiye kadar.
product_idintreqSipariş edilecek ürünün numarası.
cyclestringreqÖdeme döngüsü. Ürünün fiyatlı döngülerinden biri olmalıdır.
quantityintAdet. Yalnız ürün çoklu alıma izin veriyorsa dikkate alınır.
addonsobjectSeçilen ek hizmetler. Ek hizmet numarasını seçenek numarasına eşler. Ürünün ilk dönemi ücretsiz dahil ettiği ek hizmet gönderilmese de siparişe eklenir. İlk dönem tutarı 0 olur, yenilemeler ek hizmet fiyatından faturalanır ve siparişten çıkarılamaz.
addons_qtyobjectAdetli ek hizmetlerin sayısı.
requirementsobjectÜrünün sorduğu alanların yanıtları. Zorunlu işaretlenen her alan gönderilmelidir.
requirement_filesobjectDosya isteyen alanların içeriği. Kodlanmış içerik olarak gönderilir; adres kabul edilmez.
metricsint[]Açılacak ölçümlerin numaraları.
domainobjectSatırın alan adı ekseni. Seçim, ad, alt alan adı kökü ve lisans alanlarını taşır.
couponsstring[]Kupon kodları. Operatörün kendiliğinden uygulanan kuponları da katılır.
billing_profile_idintFatura profilinin numarası.
notesstringSipariş notu. Bin karakterden uzunu kırpılır.
paymentobjectÖdeme kaynağı. Toplam sıfırın üstündeyse zorunludur.
methodstringÖdeme yolu: hesap bakiyesi ya da kayıtlı kart.
card_idintÇekilecek kartın numarası. Verilmezse hesabın varsayılan kartı çekilir.
Dönen alanlar 201 — data — 6
order_idintYeni siparişin numarası.
numberstringSipariş numarası.
statusstringTahsilattan hemen sonraki durum. Kurulum ilerletene kadar bekliyor kalır.
totalobjectKesinleşen sipariş toplamı.
paymentobjectTahsilatın sonucu.
methodstringKullanılan yol: bakiye, kart ya da ücretsiz.
statusstringÖdendi mi, düştü mü, açık mı.
cardobjectÇekilen kartın numarası ve son dört hanesi.
transaction_idstringÖdeme sağlayıcısının işlem referansı.
errorstringDüşen ödemenin gerekçesi.
invoiceobjectSipariş faturasının özeti.
Hatalar 9
terms_required422Şartlar kabul edilmemiş.
verification_required422Hesap doğrulaması bekliyor.
checkout_blocked422Bir kanca siparişi reddetti.
insufficient_balance422Cüzdan toplamı karşılamıyor.
no_stored_card422Kart seçilmemiş ve hesapta varsayılan kart yok.
card_not_chargeable422Kartın sağlayıcısı tarayıcısız çekim yapamıyor.
payment_method_restricted422Bu yöntem bu müşteriye ya da bu ürünlere kapalı.
not_found404Fatura profili ya da kart bu hesaba ait değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/orders' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"terms":true,"items":[{"product_id":55,"cycle":"monthly"}],"payment":{"method":"balance"}}'
const res = await fetch('https://panel.ornek.com/api/v1/client/orders', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    terms: true,
    items,
    payment: { method: 'balance' },
  }),
});

const { data } = await res.json();
if (data.payment.status === 'failed') showPayLater(data.invoice);
$ch = curl_init('https://panel.ornek.com/api/v1/client/orders');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'terms' => true, 'items' => $items,
        'payment' => ['method' => 'balance'],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// 201 ODENDI DEMEK DEGILDIR: kart dusse de siparis ve odenmemis faturasi durur, odeme durumunu okuyun.
$o = Kernel::internal('client:Orders/CreateOrder',
    ['owner_id' => $uid, 'terms' => true, 'items' => $items,
     'payment' => ['method' => 'card']])['data'];

if ($o['payment']['status'] !== 'paid') $notify($o['invoice']['invoice_id']);

Tuzaklar

Başarılı yanıt ödendi anlamına gelmez

Sipariş ucu tahsilat düşse bile sipariş kurulduğu için başarı döndürür: kart reddedilirse sipariş ve ödenmemiş faturası yerinde kalır. Ödendi bilgisini yanıttaki ödeme durumundan okuyun. Yalnız sağlayıcının kesin onayı ödendi sayılır; ara adım isteyen yanıtlar burada başarısızlıktır.

Önizleme sipariş kapılarını çalıştırmaz

Önizleme fiyatlama zincirinin tamamını çalıştırır ama sipariş anına ait kapıları atlar: şart kabulü, hesap doğrulaması, politika kancası ve bakiye yeterliliği orada denetlenmez. Önizlemeden temiz geçen bir gövde sipariş ucunda yine reddedilebilir.

Alan adı kaydı burada reddedilir

Satırın alan adı ekseni yalnız sahip olunan bir alan adını ya da ücretsiz bir alt alan adını kabul eder. Kayıt ya da transfer istemek açık bir hatayla reddedilir. Doğru sıra şudur: önce alan adı uçlarından edinin, sonra siparişte sahip olunan olarak gösterin.

Dosya alanı adres kabul etmez

Dosya isteyen sipariş alanlarına kodlanmış içerik gönderin; bir adres vermek reddedilir. Bu bilinçli bir güvenlik kararıdır: sunucu çağıranın verdiği bir adresi asla indirmez. Dosyayı istekle birlikte gönderin.

Bekleyen sipariş hizmetin doğmadığı anlamına gelmez

Sipariş durumu tahsilattan hemen sonra bekliyor okunur ve kurulum ilerletene kadar öyle kalır. Bu sırada hizmetler çoktan doğmuş olabilir. İlerlemeyi siparişin durumundan değil, detaydaki hizmet durumlarından izleyin.

Bütün tutarlar cüzdan para birimindedir

Ürün fiyatları, önizleme toplamı ve sipariş toplamı aynı para biriminde gelir: hesabın cüzdan birimi. Bu sayede bakiyeyle karşılaştırma için çevirme gerekmez. Profildeki görüntü tercihi bu rakamları etkilemez.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.