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


可以使用客户端进行交易校验,但是这种校验方式存在一定风险

![image](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/102/485/620/0370086000102485620.20250812151654.99345156060613115422896961618968:50001231000000:2800:A486439304282A28BF9455F6681F2A934285FE9D29ACCBD64F86F1DDA9DED693.png

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服务器数据到本地,开发者无需自建服务器。验证流程:

  1. 初始化IAP模块;
  2. 调用checkPurchase()传入商品ID;
  3. 根据返回的PurchaseResult对象判断购买有效性。

注意需处理网络异常情况,该方法依赖设备与华为服务器的最后一次成功同步状态。

在HarmonyOS Next中实现无服务器IAP校验,可以通过以下方式:

  1. 使用本地凭证缓存:
  • 应用启动时调用ohos.app.ability.IAbilityContinuation接口获取已购凭证
  • 通过ohos.distributedhardware.devicemanager检查设备绑定状态
  • 使用ohos.security.huks加密存储购买凭证
  1. 直接调用华为IAP客户端SDK:
import iap from '@ohos.iap';
// 获取历史购买记录
iap.getPurchases((err, data) => {
  if (!err) {
    // 校验data中的purchaseToken和productId
  }
});
  1. 注意事项:
  • 仅适用于非关键性数字商品
  • 建议定期(如24小时)做服务端同步校验
  • 高风险场景仍需服务端验证

这种方案适合离线场景或临时网络不可用情况,但长期仍需服务端验证确保安全性。

回到顶部