Skip to content

支付

支付模块提供游戏内物品的购买支付和买断支付的相关功能,阅读JOGOS_SDK 简介页面与您的游戏引擎相关的部分后,可以按如下方式使用相关的功能:

javascript
window.JOGOS_SDK.payment;

应用内购买

第 1 步:创建商品 ID

  • 在开发者后台 Information / Purchase 页面创建商品。
  • 注意同个游戏下的商品 ID 不可重复。

第 2 步:发起订单

  • 当玩家需要购买游戏内的物品时,可以商品购买按钮上调用此接口打开 Jogos 支付窗口
  • 开发者需要传入商品 Id,打开支付窗口成功后返回订单编号,开发者后述可用此订单编号查询此订单的相关信息。
  • goodsId 既是您在开发者后台创建的商品 ID。
javascript
// 成功返回订单编号
let orderNo = await window.JOGOS_SDK.payment.buyGoods(goodsId: string);

第 3 步:等待用户进行付款

由客户端订阅订单支付完成通知

玩家下单后到实际支付成功可能有较长的一段时间,开发者可通知此接口订阅玩家支付成功消息,当玩家支付成功后,平台会通知订阅时的回调主动通知开发者订单已经支付完毕并返回最新的订单信息。

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

第 4 步:发货,并通知平台订单已经发货

由客户端处理发货(单机游戏)

开发者获知玩家付款成功后,自动处理发放奖励,并调用此接口通知平台已经发货。

提醒
  • 您的游戏(如果没有游戏服务器)建议你在客户端监听到用户付款后,通过调用此接口,通知Jogos平台您已给该用户发货。
  • 根据接口返回结果,你在游戏中处理发放奖励、或提示其他异常的描述语。
  • 建议您在发货后,调用云存储系统存档同步接口,保存玩家的数据。
javascript
await window.JOGOS_SDK.payment.deliverGoods(orderNo: string);

由"游戏服务端"接入的方式:

服务器接入相关API,请查阅:服务端接入接口页面。

其他接口

完善支付的建议
  • 客户端订阅用户付款成功的通知(subscribeOrderPaid),由于网络等各种不可控因素,不能保证客户端 100%收到通知。我们建议您可通过获取订单接口来获取这笔订单最新的支付情况。
  • 个别单机游戏可能提供删除存档的功能,那么用户以前支付所获得的奖励,是否要重新补发奖励将由您决定。开发者可以调用查询订单列表的接口获取玩家所有订单进行补发。
  • 获取订单信息后,可通过status进行判断,处理这笔订单。

订单信息

根据订单编号查询订单的详细信息。订单结构如下所示:

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币(积分)扣减
  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);

获取订单列表

开发者可通过此接口根据订单状态查询自己关注的订单信息,成功后返回订单列表,订单信息与订单详情结构一样。

javascript
// 成功返回订单列表
let orderList = await window.JOGOS_SDK.payment.getOrderList(
  status?: 'pending' | 'fail' | 'cancel' | 'expire' | 'success' | 'refunding' | 'refunded',
  pageNo?: number,  // 页码:默认为1
  pageSize?: number // 每页记录数:默认为20
);

买断制游戏

  1. 在开发者后台将您的游戏设置成“Game Pricing” (买断制类型),并设置您的游戏价格。
  2. 为您的游戏创建两个提交版本:试玩版与正式版
  • 试玩版:建议删除玩家接触不到的关卡资产、模型、贴图、音乐等,仅保留玩家仅能试玩的内容。额外打包这个版本上传。
  • 正式版:玩家可使用完整游戏内容的版本。
  1. 在试玩版游戏内设置购买按钮:
  • 当玩家试玩结束时,比如试玩版达到第一章最后一关后,需要购买正式版游戏时,设计一个“贩卖正式版”的界面和购买按钮: alt text
  • 购买按钮可以调用buyOut接口打开 Jogos 平台支付窗口,让玩家尽快购买游戏正式版;
  • 当用户购买成功后,Jogos 平台会自动切换到正式版游戏供玩家继续游玩,开发者无需额外处理。
  • 请保持试玩版与正式版的版本号一致,Jogos 平台会自动迁移用户存档到正式版。
  • 支付成功后返回会订单编号,开发者可用根据此订单编号查询此订单的相关信息。
javascript
// 成功返回订单编号
let orderNo = await window.JOGOS_SDK.payment.buyOut();
*重要提醒*

请注意,无论正式版还是试玩版,一定要在游戏工程的第一个启动场景进行初始化,并等待回调完成,再执行您的游戏第一行代码;Jogos 会在初始化时检测用户是否购买了您的游戏,否则用户无法继续游玩。 这是保障你的游戏不会被用户盗版游玩的有效手段。