LiaNhà phát triển

Hướng dẫn

Bán thứ gì đó trong ứng dụng của bạn cho $LIA, từ đầu đến cuối. Bảng thanh toán trên trang của bạn, sau đó xác nhận và giao hàng trên máy chủ của bạn, không mất gì nếu trang được tải lại.

Bạn'sẽ bán "3 mạng sống bổ sung" cho 5 LIA. Người đó thanh toán trên Lia'bảng chia sẻ, máy chủ của bạn kiểm tra phí với Lia, thêm số mạng sống, và ghi nhận phí đã được giao.

#1. Thêm sản phẩm

Hỏi đội Lia để thêm sản phẩm vào ứng dụng của bạn: id extra-lives, tên "3 mạng sống bổ sung", giá 5. Máy chủ của bạn có thể kiểm tra nó'mà có ở đó:

curl https://api.lialabs.org/api/apps/v1/products -H "Authorization: Bearer $LIA_KEY"

#2. Trong trang của bạn: thanh toán, sau đó nói cho máy chủ của bạn

shop.js
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. Trên máy chủ của bạn: kiểm tra, giao, đánh dấu

server.js
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 });
});

Những phần quan trọng:

  • Người chơi đến từ /session/verify, không bao giờ từ trang.
  • Phí đến từ GET /charges/:id: người chơi của nó, sản phẩm và trạng thái đều Lia's.
  • Cấp một lần cho mỗi id nạp tiền, trong cơ sở dữ liệu của bạn, vì vậy một lần thử lại, một webhook và trang có thể'gửi nó hai lần. Làm trong một giao dịch với việc ghi lại id phí.
  • Giao hàng sau khi cấp. Nếu máy chủ của bạn chết giữa hai lần, khoản phí sẽ vẫn giữ nguyên paid và bạn'sẽ thấy nó lần nữa (dưới đây), và kiểm tra một lần mỗi lần sạc ngăn chặn việc cấp hai lần.

#4. Không bao giờ mất một cái

Trang có thể tải lại hoặc mất kết nối giữa việc thanh toán và máy chủ của bạn. Bắt kịp khi ứng dụng của bạn mở, và khi một khoản thanh toán đến mà không có pay() đang chờ:

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. Hoặc giao hàng từ một webhook

Nếu máy chủ của bạn cung cấp các mục mà không cần trang (ví dụ: thêm xu vào tài khoản), hãy sử dụng charge.paid webhook rất. Kiểm tra phí với GET /charges/:id, cấp một lần cho mỗi id nạp tiền, sau đó giao hàng. Với cả trang và webhook, cái nào đến trước sẽ giao hàng và cái kia sẽ thấy đã được thực hiện.

#Khi nào bạn có thể'để giao

Nếu thứ gì đó bạn bán có thể't được đưa ra (hết hàng, tài khoản đã bị xóa), hãy trả lại $LIA:

await lia("POST", `/charges/${charge.id}/refund`);

Người nhận lại toàn bộ giá trị và một khoản thanh toán hoàn tiền có thể't được giao. Hãy nói với họ trên trang của bạn.

#Kiểm tra nó

Với khóa kiểm tra của bạn và ứng dụng của bạn ở chế độ kiểm tra, mua nó như một người kiểm tra: bảng tính nói rằng Kiểm tra, không có $LIA nào di chuyển, và mọi thứ khác xảy ra thật. Xem Kiểm tra.

Được dịch tự động. Tiếng Anh là nguồn tin cậy. Đọc bằng tiếng Anh

Nhập để tìm kiếm trên mọi trang, phương pháp và điểm cuối.