मार्गदर्शन
कोई वस्तु बेचें
पृष्ठ कॉपी करें
अपने एप में $LIA के लिए कुछ बेचें, एंड-टू-एंड। अपने पृष्ठ पर पेमेंट शीट, फिर अपने सर्वर पर पुष्टि और डिलीवरी करें, यदि पृष्ठ रीलोड हो जाता है तो कुछ भी नुकसान नहीं होता।
आप'बेचेंगे "3 अतिरिक्त जीवन" के लिए 5 LIA। व्यक्ति Lia पर भुगतान करता है'शीट, आपके सर्वर Lia के साथ भुगतान की पुष्टि करता है, जीवन जोड़ता है, और भुगतान डिलीवर किया गया चिह्नित करता है।
#1. उत्पाद जोड़ें
अपने एप्लिकेशन में एक उत्पाद जोड़ने के लिए Lia टीम से पूछें: आईडी extra-lives, नाम "3 अतिरिक्त जीवन", मूल्य 5. आपके सर्वर इसकी जांच कर सकता है'राज्य वहां है:
curl https://api.lialabs.org/api/apps/v1/products -H "Authorization: Bearer $LIA_KEY"#2. अपने पृष्ठ में: भुगतान करें, फिर अपने सर्वर को बताएं
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. अपने सर्वर पर: चेक करें, डिलीवर करें, इसे चिह्नित करें
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 });
});महत्वपूर्ण हिस्से:
- खिलाड़ी कहां से आता है
/session/verify, कभी पेज से नहीं। - शुल्क कहां से आता है
GET /charges/:id: इसका खेलाड़ी, उत्पाद और स्थिति Lia है's. - एक बार प्रत्येक चार्ज आईडी के लिए अनुदान, अपने अपने डेटाबेस में, इसलिए एक रीट्री, एक वेबहुक और पेज कर सकते हैं'तब इसे दो बार दें। एक लेन-देन में चार्ज आईडी के साथ रिकॉर्ड करें।
- अनुमति देने के बाद डिलीवर करें। अगर आपके सर्वर दोनों के बीच मर जाता है, तो चार्ज बना रहता है
paidऔर आप'आप इसे फिर से देखेंगे (नीचे), और आपकी एक बार की चार्ज जांच एक दोहरा अनुदान रोकती है।
#4. कभी एक नहीं खोएं
पृष्ठ भुगतान और आपके सर्वर के बीच रीलोड हो सकता है या अपने संबंध खो सकता है। जब आपका एप्लिकेशन खुलता है, और जब कोई भुगतान बिना के आता है, तो पीछे रह जाएं। pay() इंतजार कर रहे हैं:
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. या एक वेबहुक से डिलीवर करें
अगर आपके सर्वर ने पेज के बिना वस्तुएं दीं (उदाहरण के लिए, खाते में सिक्के जोड़ना), तो उपयोग करें charge.paid वेबहुक भी। चार्ज की जांच करें GET /charges/:id, प्रत्येक चार्ज आईडी के लिए एक बार अनुदान दें, फिर डिलीवर करें। पेज और वेबहुक दोनों के साथ, जो पहले आता है वह डिलीवर करता है और दूसरा यह पाता है कि यह पहले से ही किया जा चुका है।
#जब आप कर सकते हैं'तब डिलीवर करें
अगर आपके द्वारा बेचा गया कुछ अब't दिया जाए (यह बिक गया, खाता गायब हो गया), $LIA वापस दें:
await lia("POST", `/charges/${charge.id}/refund`);व्यक्ति पूरी कीमत वापस प्राप्त करता है और एक वापसी भुगतान कर सकता है't पहुंचाया जाएगा। उन्हें अपने पृष्ठ में बताएं।
#इसका परीक्षण करें
आपके परीक्षण कुंजी और अपने एप्प के साथ परीक्षण के रूप में खरीदें: शीट कहती है कि परीक्षण, कोई $LIA गतिविधि नहीं, और सब कुछ वास्तविक होता है। देखें परीक्षण.
स्वचालित अनुवाद। अंग्रेजी सत्य का स्रोत है। अंग्रेजी में पढ़ें