Rehberler
Bir eşya sat
Sayfayı kopyala
Uygulamanızda $LIA için bir şey satın, uçtan uca. Sayfanızdaki ödeme sayfası, ardından sayfa yenilense bile kaybolmadan sunucunuzda onaylayın ve teslim edin.
Sen'satmak "3 ek can" için 5 LIA. Kişi Lia üzerinde öder's sayfası, sunucunuz Lia ile ödeme doğrular, canları ekler ve ödemeyi teslim edildi olarak işaretler.
#1. Ürünü ekle
Uygulamanıza bir ürün eklemesini Lia ekibinden isteyin: kimlik extra-lives, isim "3 ek can", fiyat 5. Sunucunuz kontrol edebilir'şu anda var:
curl https://api.lialabs.org/api/apps/v1/products -H "Authorization: Bearer $LIA_KEY"#2. Sayfanızda: ödemeyi yapın, ardından sunucunuza bildirin
async function buyExtraLives() {
let charge;
try {
charge = await Lia.pay("extra-lives");
} catch (error) {
if (error.code === "cancelled") return; // they changed their mind
Lia.toast("Couldn't open the payment", { tone: "error" });
return;
}
await deliver(charge.chargeId);
}
// Your server checks the charge and gives the lives. Safe to call twice for one charge.
async function deliver(chargeId) {
const { session } = await Lia.session();
const res = await fetch("/api/deliver", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ session, chargeId }),
});
if (!res.ok) return Lia.toast("We'll add it as soon as we can", { tone: "error" });
const { lives } = await res.json();
showLives(lives);
Lia.haptic("success");
}#3. Sunucunuzda: kontrol edin, teslim edin, işaretleyin
import { lia } from "./lia.js"; // the helper from the Server API page
app.post("/api/deliver", async (req, res) => {
// Who is asking: from Lia, not from the page.
const { valid, playerId } = await lia("POST", "/session/verify", { session: req.body.session });
if (!valid) return res.status(401).json({ error: "session" });
// Is this charge real, paid, and theirs?
let charge;
try {
({ charge } = await lia("GET", `/charges/${encodeURIComponent(req.body.chargeId)}`));
} catch (error) {
return res.status(404).json({ error: "no_charge" });
}
if (charge.playerId !== playerId) return res.status(403).json({ error: "not_yours" });
if (charge.status === "refunded") return res.status(409).json({ error: "refunded" });
// Give it once, keyed on the charge id (a second call finds it already given).
const lives = await db.grantOnce(charge.id, playerId, () => db.addLives(playerId, 3));
// Then tell Lia it's delivered (safe to repeat).
await lia("POST", `/charges/${charge.id}/deliver`);
res.json({ lives });
});Önemli kısımlar:
- Oyuncu nereden gelir
/session/verify, asla sayfadan. - Ödeme şu kaynaktan gelir
GET /charges/:id: oyuncusu, ürün ve durumu Lia's. - Her ödeme kimliği için bir kez grant, kendi veritabanınızda, bu yüzden bir yeniden deneme, webhook ve sayfa ile'ikisini verin. Tek bir işlemde charge id'sini kaydederek yapın.
- Onaydan sonra teslim et. İkinci arasında sunucunuz çökerse, ücret kalır
paidve sen'tekrar göreceksiniz (aşağıda), ve bir kere doldurmadan durma kontrolü iki kez verilmesini engeller.
#4. Birini asla kaybetmeyin
Sayfa, ödemeden ve sunucunuz arasında yeniden yüklenebilir veya bağlantısını kaybedebilir. Uygulamanız açıldığında ve bir ödeme gelmeden bir ödeme gelirse takip edin, pay() bekleme:
Lia.init().then(async function () {
Lia.ready();
for (const charge of await Lia.charges()) await deliver(charge.chargeId);
});
Lia.onCharge(function (charge) { deliver(charge.chargeId); });#5. Veya bir webhook üzerinden teslim edin
Eğer sunucunuz sayfa olmadan öğeler veriyorsa (örneğin bir hesaba para ekliyorsa), kullanın charge.paid webhook de. Faturala kontrol edin GET /charges/:id, her bir charge id için bir kez grant verin, ardından teslim edin. Hem sayfa hem de webhook ile birlikte, ilk gelen teslim edilir ve diğerinin bunu yapmış olduğunu bulur.
#Ne zaman yapabilirsiniz'teslim et
Satmış olduğunuz bir şeyin olabilir't verilecek (satıldı, hesap kayboldu), $LIA geri ver:
await lia("POST", `/charges/${charge.id}/refund`);Kişi tam fiyat geri alır ve iade edilen bir ödeme olabilir't teslim edilecek. Onlara sayfanızda söyleyin.
#Test edin
Test anahtarınızla ve uygulamanız test modunda, test edici olarak satın alın: sayfa Test yazıyor, $LIA hareketleri yok ve diğer tüm işlemler gerçek oluyor. Bakın Test.
Otomatik çeviri. İngilizce, doğru kaynaktır. İngilizce olarak oku