Skip to content

การชำระเงิน

โมดูลการชำระเงินให้บริการการซื้อไอเท็มในเกมและการซื้อเกมแบบซื้อขาด หลังจากอ่านส่วนที่เกี่ยวข้องกับเอนจินเกมของคุณในหน้า JOGOS_SDK แนะนำ แล้ว สามารถใช้งานฟังก์ชันดังต่อไปนี้ได้:

javascript
window.JOGOS_SDK.payment;

การซื้อในแอป (In-App Purchase)

ขั้นตอนที่ 1: สร้างสินค้า ID

  • สร้างสินค้าในหน้า Information / Purchase ของแดชบอร์ดนักพัฒนา
  • โปรดทราบว่า สินค้า ID ในเกมเดียวกันต้องไม่ซ้ำกัน

ขั้นตอนที่ 2: สร้างคำสั่งซื้อ

  • เมื่อผู้เล่นต้องการซื้อไอเท็มในเกม ให้เรียกใช้อินเทอร์เฟซนี้บนปุ่มซื้อสินค้า เพื่อเปิดหน้าต่างการชำระเงินของ Jogos
  • นักพัฒนาต้องส่งค่า goodsId ซึ่งเป็นสินค้า ID ที่สร้างไว้ในแดชบอร์ด
  • เมื่อเปิดหน้าต่างการชำระเงินสำเร็จ ระบบจะส่งคืนหมายเลขคำสั่งซื้อ (orderNo) นักพัฒนาสามารถใช้หมายเลขนี้เพื่อตรวจสอบข้อมูลของคำสั่งซื้อภายหลังได้
javascript
// ส่งคืนหมายเลขคำสั่งซื้อสำเร็จ
let orderNo = await window.JOGOS_SDK.payment.buyGoods(goodsId: string);

ขั้นตอนที่ 3: รอให้ผู้ใช้ทำการชำระเงิน

การสมัครรับการแจ้งเตือนการชำระเงินเสร็จสิ้นจากฝั่งไคลเอนต์

หลังจากผู้เล่นสร้างคำสั่งซื้อแล้ว การชำระเงินจริงอาจใช้เวลานาน นักพัฒนาสามารถใช้ API นี้เพื่อติดตามเหตุการณ์ เมื่อการชำระเงินเสร็จสิ้น แพลตฟอร์มจะส่งการแจ้งเตือนกลับผ่านคอลแบ็ก พร้อมส่งข้อมูลคำสั่งซื้อที่อัปเดต

javascript
window.JOGOS_SDK.payment.subscribeOrderPaid(callbackFn: (order: PaymentOrder) => void);

ขั้นตอนที่ 4: จัดส่งสินค้า และแจ้งแพลตฟอร์มว่าคำสั่งซื้อนี้ถูกจัดส่งแล้ว

การจัดส่งจากฝั่งไคลเอนต์ (เกมออฟไลน์)

เมื่อนักพัฒนาทราบว่าผู้เล่นชำระเงินสำเร็จ ให้ดำเนินการมอบรางวัลอัตโนมัติ และเรียก API นี้เพื่อแจ้งแพลตฟอร์มว่าการจัดส่งเสร็จสิ้นแล้ว

แจ้งเตือน
  • หากเกมของคุณ (ไม่มีเซิร์ฟเวอร์เกม) เราแนะนำให้คุณเรียก API นี้จากฝั่งไคลเอนต์หลังการชำระเงินเสร็จสิ้น เพื่อแจ้งแพลตฟอร์ม Jogos ว่าคุณได้ส่งสินค้าแล้ว
  • าตามผลลัพธ์ของ API ให้คุณดำเนินการมอบรางวัล หรือแสดงข้อความแจ้งเตือนข้อผิดพลาดอื่น ๆ ในเกม
  • เราขอแนะนำให้คุณเรียก API การซิงค์คลาวด์สโตเรจหลังจากจัดส่ง เพื่อเก็บข้อมูลผู้เล่น
javascript
await window.JOGOS_SDK.payment.deliverGoods(orderNo: string);

สำหรับการเชื่อมต่อจากฝั่ง "เกมเซิร์ฟเวอร์":

สำหรับ API ที่เกี่ยวข้องกับเซิร์ฟเวอร์ โปรดดูที่หน้า Server API


อินเทอร์เฟซอื่น ๆ

คำแนะนำเพิ่มเติมเกี่ยวกับการชำระเงิน
  • การสมัครรับการแจ้งเตือนการชำระเงินเสร็จสิ้นจากฝั่งไคลเอนต์ (subscribeOrderPaid) ไม่สามารถรับประกันได้ว่าจะได้รับการแจ้งทุกครั้งเนื่องจากปัจจัยด้านเครือข่ายและปัจจัยอื่น ๆ ที่ควบคุมไม่ได้ ดังนั้น เราแนะนำให้คุณใช้ API ดึงข้อมูลคำสั่งซื้อ เพื่อตรวจสอบสถานะล่าสุดของคำสั่งซื้อ
  • สำหรับเกมออฟไลน์ที่มีระบบลบเซฟไฟล์ หากผู้เล่นเคยชำระเงินแล้ว ได้รับสิทธิ์/รางวัล จะให้มอบใหม่หรือไม่ ขึ้นอยู่กับนักพัฒนา คุณสามารถใช้ API ดึงรายการคำสั่งซื้อเพื่อทำการมอบรางวัลซ้ำ
  • หลังจากดึงข้อมูลคำสั่งซื้อมาแล้ว คุณสามารถตรวจสอบสถานะผ่าน status เพื่อดำเนินการตามคำสั่งซื้อนั้น ๆ

ข้อมูลคำสั่งซื้อ

สามารถตรวจสอบรายละเอียดของคำสั่งซื้อด้วยหมายเลข orderNo โครงสร้างของคำสั่งซื้อมีดังนี้:

javascript
// คำสั่งซื้อการชำระเงิน
export interface PaymentOrder {
  // เกม Id
  gameId: number;
  // ชื่อเกม
  gameName: string;
  // ผู้ใช้ Id
  userId: number;
  // หมายเลขคำสั่งซื้อ
  orderNo: string;
  // สินค้า Id
  productId: string;
  // ชื่อสินค้า
  productName: string;
  // สกุลเงิน
  currency: string;
  // ประเทศ
  country: string;
  // ส่วนลด
  discount: number;
  // หัก Jogos Coin (คะแนน)
  calorcoin: number;
  // จำนวนเงินที่ชำระ
  paid: number;
  // ช่องทางการชำระเงิน
  channel: string;
  // ประเภทการชำระเงิน
  paymentType: string;
  // หมายเลขธุรกรรมการชำระเงิน
  paymentNo: string;
  // สถานะการจัดส่ง
  deliverGoods: boolean;
  // สถานะคำสั่งซื้อ  pending: รอชำระ  fail: ชำระล้มเหลว  cancel: ยกเลิก  expire: หมดอายุ  success: ชำระสำเร็จ  refunding: กำลังคืนเงิน  refunded: คืนเงินสำเร็จ  refund-fail: คืนเงินล้มเหลว
  status: 'pending' | 'fail' | 'cancel' | 'expire' | 'success' | 'refunding' | 'refunded' | 'refund-fail';
  // เวลาสร้างคำสั่งซื้อ
  createTime: String;
  // หมายเลขการคืนเงิน
  refundNo: String;
  // คำอธิบายการคืนเงิน
  refundDescription: String;
  // เวลาที่ร้องขอการคืนเงิน
  refundTime: String;
  // เวลาที่คืนเงินสำเร็จ
  refundedTime: String;
}

ดึงข้อมูลคำสั่งซื้อ

javascript
// ส่งคืนข้อมูลคำสั่งซื้อสำเร็จ
let order = await window.JOGOS_SDK.payment.getOrderDetail(orderNo: string);

ดึงรายการคำสั่งซื้อ

นักพัฒนาสามารถใช้ API นี้เพื่อค้นหารายการคำสั่งซื้อตามสถานะ และจะส่งคืนรายการคำสั่งซื้อ ข้อมูลคำสั่งซื้อจะเหมือนกับโครงสร้างรายละเอียดคำสั่งซื้อ

javascript
// ส่งคืนรายการคำสั่งซื้อสำเร็จ
let orderList = await window.JOGOS_SDK.payment.getOrderList(
  status?: 'pending' | 'fail' | 'cancel' | 'expire' | 'success' | 'refunding' | 'refunded',
  pageNo?: number,  // หมายเลขหน้า ค่าเริ่มต้นคือ 1
  pageSize?: number // จำนวนต่อหน้า ค่าเริ่มต้นคือ 20
);

เกมแบบซื้อขาด (Buy-Out Game)

  1. ตั้งค่าเกมของคุณในแดชบอร์ดเป็นประเภท “Game Pricing” (เกมแบบซื้อขาด) และกำหนดราคา
  2. สร้างเวอร์ชันของเกมสองแบบ: รุ่นทดลอง และรุ่นเต็ม
  • รุ่นทดลอง: แนะนำให้ตัดทรัพยากร เช่น ด่าน โมเดล เท็กซ์เจอร์ เพลง ที่ผู้เล่นไม่สามารถเข้าถึงออกไป และเก็บเฉพาะคอนเทนต์ที่สามารถเล่นได้เท่านั้น แล้วทำการอัปโหลดแพ็กเกจนี้
  • รุ่นเต็ม: เวอร์ชันที่มีคอนเทนต์ทั้งหมดของเกมให้ผู้เล่นเข้าถึง
  1. ตั้งค่าปุ่มซื้อภายในรุ่นทดลอง:
  • เมื่อผู้เล่นจบการทดลอง เช่น หลังจากเล่นถึงด่านสุดท้ายของบทแรก ให้แสดง UI สำหรับการซื้อรุ่นเต็ม พร้อมปุ่มซื้อ: alt text
  • ปุ่มซื้อสามารถเรียกใช้ API buyOut เพื่อเปิดหน้าต่างการชำระเงินของ Jogos ให้ผู้เล่นซื้อรุ่นเต็มได้ทันที
  • เมื่อผู้เล่นซื้อสำเร็จ แพลตฟอร์ม Jogos จะสลับเป็นรุ่นเต็มโดยอัตโนมัติ นักพัฒนาไม่ต้องดำเนินการเพิ่มเติม
  • โปรดรักษาหมายเลขเวอร์ชันให้ตรงกันระหว่างรุ่นทดลองและรุ่นเต็ม เพื่อให้ Jogos โอนย้ายเซฟไฟล์ผู้เล่นโดยอัตโนมัติ
  • เมื่อชำระเงินสำเร็จ ระบบจะส่งคืนหมายเลขคำสั่งซื้อ (orderNo) นักพัฒนาสามารถใช้หมายเลขนี้เพื่อตรวจสอบข้อมูลคำสั่งซื้อได้
javascript
// ส่งคืนหมายเลขคำสั่งซื้อสำเร็จ
let orderNo = await window.JOGOS_SDK.payment.buyOut();
*การแจ้งเตือนสำคัญ*

โปรดทราบว่าไม่ว่าจะเป็นรุ่นเต็มหรือรุ่นทดลอง ต้องทำการ initialize SDK ในฉากแรกของเกม และรอการคอลแบ็กเสร็จสิ้นก่อนที่จะรันโค้ดบรรทัดแรกของคุณ Jogos จะตรวจสอบสิทธิ์การซื้อเกมระหว่างการ initialize หากผู้ใช้ไม่ได้ซื้อเกม พวกเขาจะไม่สามารถเล่นต่อได้

นี่คือวิธีการป้องกันไม่ให้เกมของคุณถูกละเมิดลิขสิทธิ์อย่างมีประสิทธิภาพ