HarmonyOS鸿蒙Next中IAP内购不用服务器如何校验用户是否购买?
HarmonyOS鸿蒙Next中IAP内购不用服务器如何校验用户是否购买? 用户购买后,不用服务器如何校验是否购买成功并且发货?
4 回复
使用queryPurchases接口获取未确认发货的订单数据:
import { iap } from '@kit.IAPKit';
queryPurchases() {
const param: iap.QueryPurchasesParameter = {
productType: iap.ProductType.NONRENEWABLE,
queryType: iap.PurchaseQueryType.UNFINISHED
};
iap.queryPurchases(context, param).then((res: iap.QueryPurchaseResult) => {
const purchaseDataList: string[] = res.purchaseDataList;
// 处理每个未完成订单
});
}
解码JWS字符串获取PurchaseOrderPayload
const jwsPurchaseOrder = JSON.parse(purchaseDataList[i]).jwsPurchaseOrder;
const purchaseStr = JWSUtil.decodeJwsObj(jwsPurchaseOrder); // 需自定义解码类
const purchaseOrderPayload = JSON.parse(purchaseStr);
本地发货与状态确认
if (!purchaseOrderPayload.purchaseOrderRevocationReasonCode) {
this.deliverProduct(purchaseOrderPayload.productId); // 本地发货逻辑
this.finishPurchase(purchaseOrderPayload); // 调用以完成购买流程
}
更多关于HarmonyOS鸿蒙Next中IAP内购不用服务器如何校验用户是否购买?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
可以使用客户端进行交易校验,但是这种校验方式存在一定风险
import { iap } from '@kit.IAPKit';
const param: iap.QueryPurchasesParameter = {
productType: iap.ProductType.NONRENEWABLE,
queryType: iap.PurchaseQueryType.UNFINISHED
};
iap.queryPurchases(context, param).then((res: iap.QueryPurchaseResult) => {
const purchaseDataList: string[] = res.purchaseDataList;
// 解析 purchaseDataList 中的购买记录
});
参考地址 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/iap-integrate-nonrenewable
在HarmonyOS Next中,可通过本地校验实现IAP购买验证。使用ohos.app.ability.InAppPurchaseManager
模块的checkPurchase()
方法直接查询购买状态。系统会自动同步华为IAP服务器数据到本地,开发者无需自建服务器。验证流程:
- 初始化IAP模块;
- 调用
checkPurchase()
传入商品ID; - 根据返回的PurchaseResult对象判断购买有效性。
注意需处理网络异常情况,该方法依赖设备与华为服务器的最后一次成功同步状态。
在HarmonyOS Next中实现无服务器IAP校验,可以通过以下方式:
- 使用本地凭证缓存:
- 应用启动时调用
ohos.app.ability.IAbilityContinuation
接口获取已购凭证 - 通过
ohos.distributedhardware.devicemanager
检查设备绑定状态 - 使用
ohos.security.huks
加密存储购买凭证
- 直接调用华为IAP客户端SDK:
import iap from '@ohos.iap';
// 获取历史购买记录
iap.getPurchases((err, data) => {
if (!err) {
// 校验data中的purchaseToken和productId
}
});
- 注意事项:
- 仅适用于非关键性数字商品
- 建议定期(如24小时)做服务端同步校验
- 高风险场景仍需服务端验证
这种方案适合离线场景或临时网络不可用情况,但长期仍需服务端验证确保安全性。