Liaविकासकर्ता

सर्वर संदर्भ

Lia अपने सर्वर को बताता है जब एक चार्ज भुगतान किया या वापस किया जाता है और जब एक पुरस्कार भुगतान किया जाता है, आपके वेबहूक सीक्रेट के साथ हस्ताक्षरित। क्या भेजा जाता है, हस्ताक्षर की जांच कैसे करें, और पुनर्प्रयास कैसे काम करते हैं।

#एक बनाना

अपने सर्वर पर Lia टीम के लिए एक https पता दें, और वेबहुक साइनिंग सीक्रेट रखें (whsec_…या आपके कुंजियों के साथ आए। Lia फिर एक POST तेज जब आपके एप में कुछ होता है तो वहां होता है।

एक हुक बैक एक है धक्का, सच नहीं है: एक चार्ज के लिए, एक API से पहले कार्य करने से पहले इसकी जांच करें। GET /charges/:id। और नहीं'केवल वेबहुक्स पर भरोसा न करें; आपका पृष्ठ अपने सर्वर को भी बता सकता है (देखें कोई वस्तु बेचें).

#क्या'भेजा गया

POST /lia/webhook
Content-Type: application/json
Lia-Signature: t=1761998400,v1=5f2c8a…

{
  "type": "charge.paid",
  "app": "your-app",
  "at": 1761998400123,
  "data": {
    "id": "ch_9b1f4c2e7a0d5b8f3e6a1c4d",
    "playerId": "p_3f9c0a6d1b2e4f5a6b7c",
    "productId": "extra-lives",
    "amount": 5,
    "status": "paid",
    "mode": "live",
    "createdAt": 1761998400000,
    "deliveredAt": null,
    "refundedAt": null
  }
}
क्षेत्रप्रकार
typeस्ट्रिंगजो हुआ (नीचे)।
appस्ट्रिंगआपका एप्प आईडी।
atसंख्याजब यह भेजा गया था, 1970. के बाद मिलीसेकंड में
dataवस्तुक्या यह'से बारे में।

#प्रकार

प्रकारजबdata
charge.paidएक व्यक्ति ने Lia पर भुगतान किया'के पेमेंट शीट, परीक्षण या लाइव में।द भुगतान, साथ में status: "paid"
charge.refundedआपने एक शुल्क वापस कर दिया।शुल्क, साथ में status: "refunded"
reward.paidआपने अपने पूल से एक पुरस्कार भुगतान किया, परीक्षण या लाइव में।{ key, playerId, amount, reason, mode }

जांचें data.mode या चार्ज's modeया टेस्ट घटनाएं कुछ भी वास्तविक नहीं देती हैं। अधिक प्रकार जोड़े जा सकते हैं: आप जिन प्रकार को नहीं जानते हैं, उनकी अनदेखी करें'तब जानता है और उत्तर देता है 200.

#हस्ताक्षर की जांच करें

हर वेबहुक के लिए एक Lia-Signature हैडर, t=<seconds>,v1=<signature>. हस्ताक्षर HMAC SHA-256, हेक्स में है, सेकंड, एक बिंदु, और क्रूड बॉडी के साथ, आपके पूर्ण वेबहुक सीक्रेट के साथ (शामिल whsec_):

v1 = hex(HMAC_SHA256(key = "whsec_…", message = t + "." + rawBody))

कच्चे शरीर के सटीक रूप में जांच करें जैसा कि यह पहुंचा था, पार्स करने से पहले, और कुछ मिनट से अधिक पुराने वेबहुक को अस्वीकार करें।

Node.js
import { createHmac, timingSafeEqual } from "node:crypto";

export function liaWebhook(rawBody, header, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries((header ?? "").split(",").map((part) => part.split("=")));
  const t = Number(parts.t);
  if (!t || !parts.v1) return null;
  if (Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return null;
  const expected = Buffer.from(createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex"));
  const given = Buffer.from(parts.v1);
  if (expected.length !== given.length || !timingSafeEqual(expected, given)) return null;
  return JSON.parse(rawBody);
}
Cloudflare Workers, Deno, Bun
export async function liaWebhook(request, secret, toleranceSeconds = 300) {
  const rawBody = await request.text();
  const parts = Object.fromEntries((request.headers.get("Lia-Signature") ?? "").split(",").map((part) => part.split("=")));
  const t = Number(parts.t);
  if (!t || !parts.v1 || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return null;
  const key = await crypto.subtle.importKey("raw", new TextEncoder().encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["verify"]);
  const signature = new Uint8Array(parts.v1.match(/../g).map((byte) => parseInt(byte, 16)));
  const ok = await crypto.subtle.verify("HMAC", key, signature, new TextEncoder().encode(`${t}.${rawBody}`));
  return ok ? JSON.parse(rawBody) : null;
}

वेबहुक्स का प्रबंधन करें में एक पूर्ण हैंडलर है।

#उत्तर देना और पुनः प्रयास

  • किसी भी से उत्तर दें 2xx स्थिति, तेजी से। उत्तर देने के बाद धीमा काम करें।
  • अगर आपके सर्वर ने पेज के बिना वस्तुएं दीं (उदाहरण के लिए, खाते में सिक्के जोड़ना), तो उपयोग करें't उत्तर 2xx या कर सकते हैं't पहुंचा जा सकता है), Lia तुरंत एक बार फिर प्रयास करता है। इसके बाद, हुबवेब नहीं है'फिर से भेजा गया है।
  • इसलिए वेबहुक छूट सकते हैं और दो बार आ सकते हैं। अपने हैंडलर को दो बार चलाने के लिए सुरक्षित बनाएं (चार्ज आईडी या पुरस्कार कुंजी पर कुंजी), और एक अन्य तरीका होना चाहिए जिससे आप पीछे रह सकें, जैसे Lia.charges() जब खिलाड़ी आपके एप्स को खोलता है।

#आपका रहस्य

आपके हैंडलर सीक्रेट के बारे में जब भी आपके कुंजियां फिर से बनाए जाते हैं। इसे अपने सर्वर पर रखें, अपने कुंजी के पास।

स्वचालित अनुवाद। अंग्रेजी सत्य का स्रोत है। अंग्रेजी में पढ़ें

किसी भी पृष्ठ, विधि और एंडपॉइंट के लिए खोजने के लिए प्रकार।