主题
Skip to content
支付模块
GameHelper.Pay
WARNING
💡 含有非消耗型内购的项目,需要在设置面加上恢复购买
按钮
- 在进入游戏后开始核查未完成订单,然后在相应的购买和恢复按钮中调用购买或者恢复接口
checkFailOrders
内部会轮询核查,游戏只需要在 SDK 初始化完成后调用该方法,返回的结果按照product.prodId
下发道具,完成后返回 true 即可
TypeScript
GameHelper.Pay.checkFailOrders((product) => {
If (product.prodId == "xxx.x.xx.xx") {
发送奖励
return true
} else if (product.prodId == "xxx.x.xx.xx") {
发送奖励
return true
}
})
是否支持内购
TypeScript
public isSupportPayStatic() : boolean {}
开始加载商品信息
注意 此方法只是开始加载 获取结果使用 getProductInfo 方法,可在首页调用一次就好
TypeScript
// 1.启动时查询想要查询的id,可以多个。(也可以启动时不查询,展示商品界面前查询,这里不做任何限制,游戏怎么方便怎么来。)
// 2.展示商品界面时获取某个id的详细信息,游戏自行显示界面数据。注:可能不一定成功,如果获取为空,那么游戏需要显示默认的。
loadProductInfo(productIds : Array<string>) {}
获取商品信息(查询动态价格)
注意 先使用 loadProductInfo 加载后才能获取,加载失败或未完成时 返回 空
TypeScript
// 获取产品信息 可能会返回null 需要在此之前(首页 或者其他页面)调用loadProductInfo 加载(loadProductInfo内部是一个异步请求)
getProductInfo(productId : string) : ProductInfo | null
购买
注意 success 的返回值 发送奖励如果成功了 返回 true 否则 false
TypeScript
/**
* 创建订单信息 只用商品id
* @param productID skuId
* @param ext额外信息(预留字段,暂不支持)
* @success 注意返回值是boolean 当 发送完奖励后 返回true 如果失败 返回false 发送奖励过程中失败也当作内购失败处理
*/
public buyProduct(obj : {productID : string, ext? : string,
success: (productID : string, orderId : string, quantity : number) => boolean,
fail?: (productId: string, orderId: string, msg : string) => void }) {}
伪代码
TypeScript
GameHelper.Pay.buyProduct({
productID : "xxxxxxxxxx",
success : (productId: string, orderId: string, quantity : number) => {
发放奖励
return true
}
})
恢复购买
TypeScript
//恢复购买 当用户购买当前产品后,用户卸载重装游戏或者换了一个手机,那么之前的购买必须依然有效,所以需要恢复购买的功能
//objc需要两个属性 productIds(需要恢复产品Id 数组) completion (恢复完成 (products : Array<{productId : string, orderId? : string}>) => bool)
//products里面有需要回复的产品 返回true
// 注意 此回调会恢复所有曾经内购的产品,并把成功的产品回调给你(产品id一定会有 订单id不一定有) 恢复完成
public restoreProducts(objc: { productIds: string[], completion: (products: Array<{productId : string, orderId? : string}>) => boolean}) {}
伪代码
TypeScript
GameHelper.Pay.restoreProducts({
productIds : ["xxxxxxxx", "xxxxxxaaaa"],
completion : (products: Array<{productId : string, orderId? : string}>) => {
//通过productId判断给哪个产品奖励
if (products.length > 0) {
if (productId == 'xxx.xxx.xxx') {
发送奖励
return true
} else if (productId == 'xxx.xxx.xxx') {
发送奖励
return true
}
}
}
})
核查订阅状态
我们购买的是订阅产品后 需要核查当前购买的产品是否到期
核查订阅需要用到产品 id 和 订单 id; 订单 id 是调用 buyProduct
后返回的,我们需要保存
TypeScript
/**
* 获取指定商品的订阅状态。订阅的结果完全依赖订阅查询接口,发起支付后需要查询订阅
* 如果是订阅产品 在发起内购后 要通过订阅接口来查询商品情况 再来发送奖励
* 不要频繁调用,最好非常低频率的使用,例如app仅仅只回到首页调用 所以游戏需要记录上次的购买时的产品id和订阅id 方便查询
* productId 产品ID orderId 平台订单ID ios专用
* 获取订阅结果回调
* @param productId 商品ID
* @param status 商品状态(0-未订阅 或者 查不到,需要根据上次保存的到期时间跟当前时间对比来判断是否是到期。目前平台处理了状态0,对0的订单会转换成1和2返回。,1-在订阅期内,2-已过订阅期, 3-服务端状态正在更新需要间隔1s再次重新查询)
* @param expiresDate 订阅到期时间 示例: 2021-07-08 15:26:26
*/
public checkSubscriptionStatus(productId : string, orderId : string, callback : (productId : string, status : number, expiresDate : string) => void) {}
伪代码
TypeScript
一般进入游戏后需要查询一次订阅是否到期,游戏记录下上次内购时的产品id 和订单id
GameHelper.Pay.buyProduct({
productId : "xxxxxxxxxx",
success : (productId: string, orderId: string, quantity : number) => {
GameHelper.Pay.checkSubscriptionStatus(productId, orderId, (productId : string, status : number, expiresDate : string) => {
if (status == 1) {
发送奖励
}
})
return true
}
})
核查未完成订单
有的购买付了钱但是最终因为各种原因没有给到奖励,比如购买过程中退出游戏了。此时我们需要在进入游戏后核查未完成订单,重新给到奖励
TypeScript
/*
游戏启动后,SDK内部开始核查未完成订单,游戏补发奖励,补发完成后completion的返回值返回true
OrderInfo: {
...;
order_type:1; // 0是未完成 1是复送 2服务器道具赠送
}
*/
public checkFailOrders(completion : (product : OrderInfo) => boolean) {}
伪代码
TypeScript
GameHelper.Pay.checkFailOrders((product) => {
If (product.prodId == "xxx.x.xx.xx") {
发送奖励
return true
} else if (product.prodId == "xxx.x.xx.xx") {
发送奖励
return true
}
})
点我快速对接


