Skip to content

Thanh toán

Mô-đun thanh toán cung cấp các chức năng liên quan đến mua hàng trong trò chơi và thanh toán mua một lần. Sau khi đọc phần liên quan đến engine trò chơi của bạn trên trang Giới thiệu JOGOS_SDK, bạn có thể sử dụng các chức năng liên quan như sau:

javascript
window.JOGOS_SDK.payment;

Mua hàng trong ứng dụng

Bước 1: Tạo ID mặt hàng

  • Tạo mặt hàng trong trang Information / Purchase trên Developer Backend.
  • Lưu ý: ID mặt hàng trong cùng một trò chơi không được trùng lặp.

Bước 2: Tạo đơn hàng

  • Khi người chơi cần mua vật phẩm trong trò chơi, có thể gọi interface này trên nút mua hàng để mở cửa sổ thanh toán Jogos.
  • Developer cần truyền vào Goods Id, sau khi mở cửa sổ thanh toán thành công sẽ trả về số đơn hàng, Developer có thể sử dụng số đơn hàng này để truy vấn thông tin liên quan đến đơn hàng này sau này.
  • goodsId chính là ID mặt hàng bạn đã tạo trên Developer Backend.
javascript
// Trả về số đơn hàng khi thành công
let orderNo = await window.JOGOS_SDK.payment.buyGoods(goodsId: string);

Bước 3: Chờ người dùng thực hiện thanh toán

Client đăng ký nhận thông báo hoàn tất thanh toán đơn hàng

Sau khi người chơi đặt hàng đến khi thanh toán thực tế thành công có thể mất một khoảng thời gian khá dài, Developer có thể sử dụng interface này để đăng ký nhận tin nhắn thanh toán thành công của người chơi. Khi người chơi thanh toán thành công, nền tảng sẽ thông báo callback lúc đăng ký để chủ động thông báo cho Developer rằng đơn hàng đã thanh toán xong và trả về thông tin đơn hàng mới nhất.

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

Bước 4: Giao hàng và thông báo cho nền tảng đơn hàng đã được giao

Xử lý giao hàng bằng Client (Game độc lập)

Sau khi Developer biết được người chơi thanh toán thành công, tự động xử lý phân phát phần thưởng và gọi interface này để thông báo cho nền tảng rằng đã giao hàng.

Nhắc nhở
  • Trò chơi của bạn (nếu không có máy chủ trò chơi) đề nghị bạn sau khi client lắng nghe thấy người dùng thanh toán thành công, thông qua gọi interface này, thông báo cho nền tảng Jogos rằng bạn đã giao hàng cho người dùng đó.
  • Dựa vào kết quả trả về từ interface, bạn xử lý phân phát phần thưởng trong game, hoặc hiển thị mô tả ngoại lệ khác.
  • Đề nghị bạn sau khi giao hàng, gọi interface đồng bộ lưu trữ đám mây để lưu dữ liệu người chơi.
javascript
await window.JOGOS_SDK.payment.deliverGoods(orderNo: string);

Phương thức kết nối qua "Máy chủ trò chơi":

Vui lòng tham khảo trang 接口 kết nối máy chủ để biết API liên quan đến kết nối máy chủ.

Các interface khác

Đề xuất hoàn thiện thanh toán
  • Thông báo thanh toán thành công mà Client đăng ký (subscribeOrderPaid), do các yếu tố không kiểm soát được như mạng, không thể đảm bảo Client nhận được thông báo 100%. Chúng tôi đề nghị bạn có thể sử dụng 接口 lấy đơn hàng để lấy tình trạng thanh toán mới nhất của đơn hàng này.
  • Một số game độc lập có thể cung cấp chức năng xóa save, vậy thì phần thưởng người dùng đã nhận được từ thanh toán trước đây, có cần phát lại phần thưởng hay không sẽ do bạn quyết định. Developer có thể gọi interface truy vấn danh sách đơn hàng để lấy tất cả đơn hàng của người chơi và tiến hành phát lại phần thưởng.
  • Sau khi lấy thông tin đơn hàng, có thể đánh giá thông qua status, xử lý đơn hàng này.

Thông tin đơn hàng

Truy vấn chi tiết đơn hàng dựa trên số đơn hàng. Cấu trúc đơn hàng như sau:

javascript
// Đơn hàng thanh toán
export interface PaymentOrder {
  // ID trò chơi
  gameId: number;
  // Tên trò chơi
  gameName: string;
  // ID người dùng
  userId: number;
  // Số đơn hàng
  orderNo: string;
  // ID sản phẩm
  productId: string;
  // Tên sản phẩm
  productName: string;
  // Loại tiền tệ
  currency: string;
  // Quốc gia
  country: string;
  // Giảm giá
  discount: number;
  // Trừ Jogos Coin (điểm)
  calorcoin: number;
  // Số tiền thanh toán
  paid: number;
  // Kênh thanh toán
  channel: string;
  // Loại thanh toán
  paymentType: string;
  // Số thanh toán
  paymentNo: string;
  // Đã giao hàng hay chưa
  deliverGoods: boolean;
  // Trạng thái đơn hàng: pending: Chờ thanh toán | fail: Thanh toán thất bại | cancel: Đã hủy | expire: Đã hết hạn | success: Thanh toán thành công | refunding: Đang hoàn tiền | refunded: Hoàn tiền thành công | refund-fail: Hoàn tiền thất bại
  status: 'pending' | 'fail' | 'cancel' | 'expire' | 'success' | 'refunding' | 'refunded' | 'refund-fail';
  // Thời gian tạo đơn hàng
  createTime: String;
  //Số hoàn tiền
  refundNo: String;
  //Mô tả hoàn tiền
  refundDescription: String;
  //Thời gian yêu cầu hoàn tiền
  refundTime: String;
  //Thời gian hoàn tiền thành công
  refundedTime: String;
}

Lấy thông tin đơn hàng

javascript
// Trả về thông tin đơn hàng khi thành công
let order = await window.JOGOS_SDK.payment.getOrderDetail(orderNo: string);

Lấy danh sách đơn hàng

Developer có thể sử dụng interface này để truy vấn thông tin đơn hàng mình quan tâm dựa trên trạng thái đơn hàng, thành công sẽ trả về danh sách đơn hàng, thông tin đơn hàng có cấu trúc giống như chi tiết đơn hàng.

javascript
// Trả về danh sách đơn hàng khi thành công
let orderList = await window.JOGOS_SDK.payment.getOrderList(
  status?: 'pending' | 'fail' | 'cancel' | 'expire' | 'success' | 'refunding' | 'refunded',
  pageNo?: number,  // Số trang: Mặc định là 1
  pageSize?: number // Số bản ghi mỗi trang: Mặc định là 20
);

Trò chơi mua một lần (Buyout)

  1. Trên Developer Backend, đặt trò chơi của bạn thành "Game Pricing" (loại mua một lần) và đặt giá cho trò chơi của bạn.
  2. Tạo hai phiên bản gửi lên cho trò chơi của bạn: Bản dùng thử và Bản chính thức
  • Bản dùng thử: Đề nghị xóa các asset cấp độ, model, texture, nhạc,... mà người chơi không thể tiếp cận, chỉ giữ lại nội dung người chơi có thể dùng thử. Đóng gói và tải lên riêng phiên bản này.
  • Bản chính thức: Phiên bản mà người chơi có thể sử dụng toàn bộ nội dung trò chơi.
  1. Thiết lập nút mua hàng trong bản dùng thử của trò chơi:
  • Khi người chơi kết thúc bản dùng thử, ví dụ: đạt đến cấp cuối cùng của chương 1 trong bản dùng thử và cần mua bản chính thức của trò chơi, hãy thiết kế một giao diện "Bán bản chính thức" và một nút mua hàng: alt text
  • Nút mua hàng có thể gọi interface buyOut để mở cửa sổ thanh toán nền tảng Jogos, cho phép người chơi mua bản chính thức của trò chơi càng sớm càng tốt;
  • Khi người dùng mua thành công, nền tảng Jogos sẽ tự động chuyển sang bản chính thức của trò chơi để người chơi tiếp tục, Developer không cần xử lý thêm.
  • Vui lòng giữ số phiên bản của bản dùng thử và bản chính thức giống nhau, nền tảng Jogos sẽ tự động di chuyển save của người dùng sang bản chính thức.
  • Sau khi thanh toán thành công sẽ trả về số đơn hàng, Developer có thể sử dụng số đơn hàng này để truy vấn thông tin liên quan đến đơn hàng này.
javascript
// Trả về số đơn hàng khi thành công
let orderNo = await window.JOGOS_SDK.payment.buyOut();
*Lưu ý quan trọng*

Xin lưu ý, cho dù là bản chính thức hay bản dùng thử, nhất định phải thực hiện khởi tạo trong cảnh khởi chạy đầu tiên của dự án trò chơi, và chờ callback hoàn tất, rồi mới thực thi dòng code đầu tiên của trò chơi bạn; Jogos sẽ kiểm tra xem người dùng đã mua trò chơi của bạn hay chưa trong quá trình khởi tạo, nếu không người dùng sẽ không thể tiếp tục chơi. Đây là biện pháp hiệu quả để đảm bảo trò chơi của bạn không bị người dùng chơi bản lậu.