Rehberler
Kredi satışı
Bir API ya da AI hizmeti için ön ödemeli krediler: alıcılar kendileri yükler, sunucun her çağrıda harcar. Yüklemeden hiçbir şey kesilmez.
Krediler kullanıma göre satılan her şeye uyar: token'lar, görseller, dakikalar, aramalar. Alıcı bir paketi kriptoyla öder; sen her çağrıda ondan harcarsın; krediler bitince alıcı kendi sayfasından yükler. Hiçbir şey otomatik olarak tahsil edilmez — alıcı her zaman kendisi öder — ve Perly yüklemelerden hiçbir şey almaz.
Kurulum
- 1
Bir ürün ve paketler oluştur
Dashboard → Products → New, sonra New price → Credit pack: örneğin $10'a 1 000 kredi, $40'a 5 000. Ya da
pay.prices.create({ product, model: "credit_pack", unit_amount: 1000, credits: 1000 }). - 2
Alıcının bakiyeyi ne zaman öğreneceğini seç
Ürün sayfasında, Credits bölümünde: uyarı eşiği, alıcıya e-posta ve Any amount — tek bir paketin N katı; böylece alıcı yalnızca sabit bir paketle değil, $25 gibi bir tutarla da yükleyebilir.
- 3
Her alıcıya bir müşteri ver
Kullanıcı başına bir tane, kendi id'nle oluştur:
pay.customers.create({ email, external_id: user.id }). Sonrasında SDK bu id'yi kabul eder.
Harca, kontrol et, yükle
- Müşteri; bir
cus_…id'si, e-posta ya da onun için kendi id'ndir (external_id). Birden çok ürün için kredi satıyorsanproductbelirt. - Harcama atomiktir ve asla sıfırın altına inmez: aynı krediler üzerinde iki eşzamanlı harcama geçmez. Yetersizlik
insufficient_credits(409) döner ve hiçbir şey harcanmaz. - İsteğinin id'sini idempotency anahtarı olarak gönder. Tekrar — zaman aşımından, hatadan, hatta ertesi günden sonra — ilk harcamayı döndürür, bir daha harcamaz.
actionsenin etiketindir (chat,image.hd,api/search). Ürün sayfası harcamaları eyleme ve müşteriye göre toplar.
Yükleme sayfası
top_up_url alıcının kendi sayfasıdır, her seferinde aynı: bakiyeyi ve paketlerini senin ödeme sayfanın görünümünde gösterir ve alıcı bir paket seçince normal bir fatura açar. Ödendiği anda krediler bakiyeye bir kez eklenir. Bağlantıyı uygulamada, "kredi bitti" hatasında göster ya da gönder — alıcı portalında da bir Yükle butonu var.
Krediler bitince
| Olay | Ne zaman |
|---|---|
credits.low | Bakiye ürünün eşiğine indi. Geçiş başına bir kez: tekrar ancak bir yükleme onu eşiğin üstüne çıkardıktan sonra. |
credits.depleted | Bakiye sıfıra ulaştı. Geçiş başına bir kez. |
İkisi de müşteriyi data.object olarak, ayrıca data.product ve data.balance taşır. Eşik ayarlıysa ve e-posta açıksa alıcı ayrıca yükleme bağlantılı bir e-posta alır — günde en fazla bir kez. Test modunda e-postalar yalnızca ekibine gider.