LiaMga developer

Mga Gabay

Bilhin ang anumang bagay sa iyong app para sa $LIA, mula simula hanggang dulo. Ang pay sheet sa iyong pahina, pagkatapos ay i-verify at ipadala sa iyong server, walang nawala kung ang pahina ay i-reload.

Ikaw'ay magbebenta "3 extra lives" para sa 5 LIA. Ang tao ay nagbabayad sa Lia'ang sheet, ang iyong server ay kumpirma ang pagbabayad gamit ang Lia, idinagdag ang mga buhay, at itinutukoy ang pagbabayad na ipinadala.

#1. Magdagdag ng produkto

Magtanong sa Lia team para magdagdag ng isang produkto sa iyong app: id extra-lives, pangalan "3 extra lives", presyo 5. Ang iyong server ay maaaring suriin ito'dito:

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

#2. Sa iyong pahina: bayad, pagkatapos sabihin ang iyong server

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. Sa iyong server: suriin, ipadala, markahan ito

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 });
});

Ang mahahalagang bahagi:

  • Ang manlalaro ay galing sa /session/verify, walang isang pahina ang nagsesend.
  • Ang bayad ay mula sa GET /charges/:id: ang kanyang player, produkto at estado ay Lia's.
  • Bawat charge id ay nagbibigay ng isang pagpapala, ang liquidity share: ito ay nagbubukas sa paglalathal ng mga produkto at ginagamit lamang para sa paglipat ng likidong, sa liquidity pools at kasama ang market makers, kaya ang mga miyembro na nais mag-trade ay may sapat na malawak na merkado upang gawin ito. Ito ay hindi ibinebenta sa mga miyembro at hindi ginagamit para sa mga reward. Ang mga exchange ay inilalathala sa app bago lahat.'hindi ibigay ito dalawang beses. Gawin ito sa isang transaksyon kasama ang pag-record ng charge id.
  • Ibahagi pagkatapos magbigay. Kung ang iyong server ay namatay sa pagitan ng dalawa, ang charge ay nananatili paid at kung ano ang'ay makakakita nito muli (sa ibaba), at ang iyong isang beses kada pagbabad ay ikinokontrol ang isang double grant.

#4. Huwag mawala anumang isa

Ang pahina ay maaaring mag-reload o mawala ang kanyang koneksyon sa pagitan ng pagbabayad at iyong server. Kumpunin ito kapag ang iyong app ay buksan, at kapag ang isang bayad ay dumating nang walang isang pay() naghihintay:

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. O ipadala mula sa isang webhook

Kung ang iyong server ay nagbibigay ng mga item nang walang pahina (pagdaragdag ng mga coin sa isang account, halimbawa), gamitin ang charge.paid webhook din. Suriin ang singilin sa GET /charges/:id, magbigay ng isang beses bawat charge id, pagkatapos ay ipakita. Kasama ang pahina at ang webhook, anumang nangunguna ay ipakita at ang isa pang nagsasabi na ito ay ginawa na.

#Kailan mo maaaring'hindi ipadala

Kung ang bagay na iyong ibinebenta ay maaaring't maibigay (nabenta na, ang account ay nawala), ibalik ang $LIA:

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

Ang tao ay nakakatanggap ng buong presyo na babalik at isang refund na bayad ay maaari't maibigay. Sabihin sa kanila sa iyong pahina.

#Subukan ito

Gamit ang iyong test key at ang iyong app sa test, bilhin ito bilang isang tester: ang sheet ay nagsasabi ng Test, walang $LIA na paggalaw, at ang lahat ng iba pang bagay ay nangyayari nang tunay. Tingnan Pagsusulit.

Awtomatikong isinalin. Ang English ay ang source of truth. Basahin sa Ingles

Pindutin para maghanap sa lahat ng pahina, paraan at endpoint.