ระบบไอเทมและร้านค้าที่ต้องชำระเงินของแพลตฟอร์ม
ระบบนี้ให้โซลูชันการจัดการไอเทมแบบชำระเงินแบบครบวงจรสำหรับแพลตฟอร์มเกม รองรับฟังก์ชันการซื้อ การแจกจ่าย และสถิติไอเทมสำหรับเกมสแตนด์อโลน และใช้งานฟังก์ชันการซื้อ การสอบถาม การเพิ่ม/ลดไอเทม และการแจกจ่ายโดยทริกเกอร์จากกระบวนการเกม
- ฟังก์ชันหลัก: การซื้อไอเทม, การสอบถามการเป็นเจ้าของ, การดำเนินการเพิ่ม/ลด, การติดตามการเปลี่ยนแปลง, การแจกจ่ายโดยทริกเกอร์จากกระบวนการเกม
1. ฟังก์ชันการจัดการแบ็กเอนด์สำหรับนักพัฒนา
- นักพัฒนาสามารถสร้างข้อมูลไอเทมด้วยตนเองผ่านแบ็กเอนด์ รองรับการอัปโหลดตาราง (ตารางหน่วยไอเทม) และไอคอนไอเทม
- ไอเทมที่ต้องชำระเงินในร้านค้าในปัจจุบันรองรับเฉพาะการสร้างด้วยตนเอง
- รองรับการสร้างข้อมูลไอเทมได้สูงสุด 5,000 รายการ
- ในขณะนี้รองรับเฉพาะเกมประเภทซื้อขาดและซื้อในเกม
- หลังจากสร้างไอเทมแล้วต้องได้รับการอนุมัติ หลังจากอนุมัติแล้วจะเข้าสู่สถานะเปิดใช้งานโดยค่าเริ่มต้น
ฟังก์ชันการจัดการไอเทม:
ID ไอเทม: ตัวระบุเฉพาะ ไม่สามารถแก้ไขได้หลังสร้าง
ชื่อและไอคอนไอเทม: ใช้สำหรับการแสดงผลด้านหน้าบ้าน
ไอคอนไอเทม: รองรับการเปลี่ยนรูปไอคอนด้วยตนเอง
กฎการสร้างไอเทม: รองรับการเลือกระหว่างไอเทมเกมและไอเทมที่ต้องชำระเงินในร้านค้า
ข้อจำกัดไอเทม: รองรับการตั้งค่าข้อจำกัดสำหรับการแจกจ่ายให้ผู้เล่นผ่านแพลตฟอร์ม เช่น จำกัดจำนวนการแจกจ่ายต่อวัน จำกัดจำนวนทั้งหมด หรือไม่จำกัด
สต็อกไอเทม: สามารถเลือกป้อนจำนวนหรือไม่จำกัด
การตั้งค่าค่าไอเทม:
ไอเทมฟรี (Platform activities): รองรับการแจกจ่ายผ่านกิจกรรมของแพลตฟอร์ม
การซื้อที่ต้องชำระเงิน (Paid purchase): รองรับการซื้อที่ต้องชำระเงินในร้านค้าไอเทม
กำหนดราคาเป็นดอลลาร์สหรัฐโดยค่าเริ่มต้น
ราคาต่อหน่วยของไอเทมรองรับความแม่นยำถึง 0.0001 USD
ค่าขั้นต่ำสำหรับไอเทมที่ต้องชำระเงินในร้านค้าคือ 1 USD

2. การบูรณาการ SDK ไอเทม
คำอธิบายอินเทอร์เฟซหลัก
| ชื่ออินเทอร์เฟซ | ลายเซ็นเมธอด | คำอธิบายฟังก์ชัน |
|---|---|---|
| เปิดหน้าต่างซื้อ | openBuyGameItemsDialog(level: number) | เปิดกล่องโต้ตอบซื้อไอเทมร้านค้าผ่าน UI ฟังก์ชันภายในเกม |
| รับไอเทมที่เป็นเจ้าของ | getUserGameItems(): GameItem[] | สอบถามรายการไอเทมปัจจุบันของผู้เล่นเมื่อเข้าสู่เกม (รวม ID และจำนวน) |
| เพิ่มไอเทม | addGameItem(itemId: string, amount: number) | แจกจ่ายไอเทมระหว่างกระบวนการเล่นเกม (รองรับสถานการณ์เช่น การซื้อ รางวัลระดับ การทำภารกิจสำเร็จ เป็นต้น) |
| ลดไอเทม | subtractGameItem(itemId: string, amount: number) | ใช้ไอเทม (สถานการณ์การใช้หรือบริโภคระหว่างกระบวนการเล่นเกม จำนวนหลังหักเป็นค่าบวก) |
| สมัครสมาชิกการแจ้งเตือนการเปลี่ยนแปลง | subscribeGameItemChange(callback: (res: GameItemChange) => void) | เมธอด callback ที่ดำเนินการเมื่อการชำระเงินสำหรับไอเทมที่ต้องชำระเงินในร้านค้าเสร็จสมบูรณ์ |
รูปแบบข้อมูลหลัก
- **GameItem (ข้อมูลไอเทม)**:
{ itemId: string, amount: number } - **GameItemChange (ข้อมูลการเปลี่ยนแปลง)**:
{ itemId: string, amount: number, changeType: 'add'|'subtract', total: number }
2.1 รับรายการไอเทมที่เป็นเจ้าของ
javascript
// รับรายการไอเทมที่เป็นเจ้าของโดยผู้เล่น (เรียกในช่วงเริ่มต้นเกม)
const items = window.JOGOS_SDK.gameItem.getUserGameItems();
console.log('ไอเทมที่เป็นเจ้าของ:', items);2.2 เปิดหน้าต่างซื้อไอเทม
javascript
// เปิดหน้าต่างซื้อไอเทม
window.JOGOS_SDK.gameItem.openBuyGameItemsDialog(10);2.3 เพิ่มไอเทม
javascript
// เพิ่มไอเทม (ID: 3232addasdda3aa2, จำนวน: 10)
window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 10);2.4 ลดไอเทม
javascript
// ลดไอเทม (ID: 3232addasdda3aa2, จำนวน: 5)
window.JOGOS_SDK.gameItem.subtractGameItem('3232addasdda3aa2', 5);2.5 สมัครสมาชิกการแจ้งเตือนการเปลี่ยนแปลงไอเทม
javascript
// สมัครสมาชิกการแจ้งเตือนการเปลี่ยนแปลงไอเทม
window.JOGOS_SDK.gameItem.subscribeGameItemChange((res) => {
console.log('การเปลี่ยนแปลงไอเทม:', res);
});2.6 กระบวนการซื้อไอเทมแบบชำระเงินทั้งหมด
javascript
// 1. เริ่มการซื้อไอเทมแบบชำระเงิน (ID สินค้า: item_gold_100, สอดคล้องกับไอเทมเหรียญทอง 100 เหรียญ)
async function buyGoldItem() {
try {
const orderNo = await window.JOGOS_SDK.payment.buyGoods('item_gold_100');
console.log('สร้างคำสั่งซื้อสำเร็จ, หมายเลขคำสั่งซื้อ:', orderNo);
} catch (err) {
console.error('การสร้างคำสั่งซื้อล้มเหลว:', err);
alert('การเริ่มการซื้อล้มเหลว, โปรดลองอีกครั้งในภายหลัง');
}
}
// 2. สมัครสมาชิกการแจ้งเตือนการชำระเงินสำเร็จ (เรียกในช่วงเริ่มต้นเกม)
window.JOGOS_SDK.payment.subscribeOrderPaid(async (order) => {
console.log('ชำระเงินสำเร็จ, รายละเอียดคำสั่งซื้อ:', order);
if (order.status === 'success') {
// 3. แจกจ่ายไอเทมที่สอดคล้องกัน (ID สินค้า: item_gold_100 สอดคล้องกับ ID ไอเทม: 3232addasdda3aa2)
window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 100);
// 4. แจ้งแพลตฟอร์มเพื่อการจัดส่ง (ต้องเรียก, มิฉะนั้นสถานะคำสั่งซื้อจะผิดปกติ)
await window.JOGOS_SDK.payment.deliverGoods(order.orderNo);
alert('ซื้อเหรียญทอง 100 เหรียญสำเร็จ, ได้รับการแจกจ่ายไปยังกระเป๋าแล้ว!');
}
});
// 3. สถานการณ์ข้อยกเว้น: สอบถามรายละเอียดคำสั่งซื้อ (เช่น หากไม่ได้รับไอเทมหลังชำระเงิน)
async function checkOrder(orderNo) {
try {
const order = await window.JOGOS_SDK.payment.getOrderDetail(orderNo);
console.log('การสอบถามรายละเอียดคำสั่งซื้อ:', order);
if (order.status === 'success') {
// แจกจ่ายไอเทมซ้ำ
window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 100);
await window.JOGOS_SDK.payment.deliverGoods(orderNo);
}
} catch (err) {
console.error('การสอบถามคำสั่งซื้อล้มเหลว:', err);
}
}2.7 การแจกจ่ายไอเทมโดยทริกเกอร์จากกระบวนการเกม (ตัวอย่าง: รางวัลการผ่านด่าน)
javascript
// การผ่านด่าน 10 ทริกเกอร์การแจกจ่ายไอเทม (รวมตรรกะการป้องกันการรับซ้ำเพื่อหลีกเลี่ยงการรับซ้ำ)
function onLevel10Clear() {
// เกมสแตนด์อโลน: ใช้ที่เก็บข้อมูลท้องถิ่นเพื่อบันทึกสถานะการแจกจ่าย
const hasIssued = localStorage.getItem('level10_award_issued');
if (hasIssued) {
alert('ได้รับรางวัลด่านนี้แล้ว, ไม่สามารถรับซ้ำได้');
return;
}
// แจกจ่ายไอเทม (ID: 3232addasdda3aa2, จำนวน: 10)
window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 10);
// บันทึกสถานะการแจกจ่าย
localStorage.setItem('level10_award_issued', 'true');
alert('ผ่านด่าน 10 สำเร็จ! ได้รับรางวัลไอเทม 10 ชิ้น');
}