HarmonyOS 鸿蒙Next中如何查询用户的支付订单列表

HarmonyOS 鸿蒙Next中如何查询用户的支付订单列表 android版查询是如下代码

// 构造一个OwnedPurchasesReq对象
        OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq();
// priceType: 1:非消耗型商品
        ownedPurchasesReq.setPriceType(1);
// 调用obtainOwnedPurchases接口
        Task<OwnedPurchasesResult> task = Iap.getIapClient(BaseActivity.this).obtainOwnedPurchases(ownedPurchasesReq);
        task.addOnSuccessListener(new OnSuccessListener<OwnedPurchasesResult>() {
            @Override
            public void onSuccess(OwnedPurchasesResult result) {
                // 获取接口请求结果
                if (result != null && result.getInAppPurchaseDataList() != null) {
                    if(result.getInAppPurchaseDataList().size()>0){
                        App.orderList.clear();
                        for (int i = 0; i < result.getInAppPurchaseDataList().size(); i++) {
                            String inAppPurchaseData = result.getInAppPurchaseDataList().get(i);
                            String inAppSignature = result.getInAppSignature().get(i);
                            // 您需要使用您的应用的IAP公钥验证inAppPurchaseData的签名
                            // 如果验签成功,为避免资金损失,必须校验InAppPurchaseData中的productId、price、currency等信息的一致性
                            // 验证一致后,请检查支付状态
                            try {
                                InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData);
                                MyLogUtils.testLog("data1=="+new Gson().toJson(inAppPurchaseData));
                                int purchaseState = inAppPurchaseDataBean.getPurchaseState();
                                if(purchaseState==0){
                                
                                }
                                App.orderList.add(inAppPurchaseDataBean);
                            } catch (JSONException e) {

                            }
                        }
                        MyLogUtils.testLog("checkOrder data="+new Gson().toJson(result.getInAppPurchaseDataList()));
                    }else {
                        checkOrder2();
                    }
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                if (e instanceof IapApiException) {
                    IapApiException apiException = (IapApiException) e;
                    Status status = apiException.getStatus();
                    int returnCode = apiException.getStatusCode();
                } else {
                    // 其他外部错误
                }
            }
        });

鸿蒙版的对应方法是什么?


更多关于HarmonyOS 鸿蒙Next中如何查询用户的支付订单列表的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

通过sysTransOrderNo查询订单信息

该接口支持所有的华为支付系统交易订单的查询,若商户已完成Payment Kit单次支付能力的集成,并且有产生交易订单,可以通过该接口查看某笔订单的支付状态。开发者也可通过主动查询交易订单状态用以完成下一步的业务逻辑。

GET /api/v2/partner/aggr/transactions/orders/{sysTransOrderNo} HTTP/1.1
Content-Type: application/json;charset=UTF-8
PayMercAuth: 
{"callerId":"10132120***","traceId":"202305151047588466083","time":1684118878350,"authId":"120291744647139***","headerSign":"4Xb1tDGRC4f/B58ANIF6sa/Y2p8Eh4EXO7TpmBKrc********************TesmPGdszSNP/s=","bodySign":"kf9AZmVjBSGUI2MldsIFShO+Ak******************lQ0Q95/dZt2jEHcXyLfGNVzDNfFPhvF08NnnGM4="}

cke_522.png

通过mercOrderNo查询订单信息

该接口支持所有的华为支付系统交易订单的查询,若商户已完成Payment Kit单次支付能力的集成,并且有产生交易订单,可以通过该接口查看某笔订单的支付状态。开发者也可通过主动查询交易订单状态用以完成下一步的业务逻辑。

GET /api/v2/partner/aggr/transactions/merc-orders/{mercOrderNo} HTTP/1.1
Content-Type: application/json;charset=UTF-8
PayMercAuth: {"callerId":"10132120***","traceId":"202305151047578634337","time":1684118877557,"authId":"120291744647139***","headerSign":"FB0vzUONHsvsurnKHZhc4*******************sZ3oJYeLt/4Da5n3DLXlSKYFmE=","bodySign":"DDRuPlG/QFb3OQTNHLIOaNFKnQ********************kvvni+9cVmsqHir0bRFLANqqh2zyzv4="}

cke_2031.png

参考地址

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/payment-agent-query-order

更多关于HarmonyOS 鸿蒙Next中如何查询用户的支付订单列表的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请参考官方文档

查询支付订单

在HarmonyOS Next中,查询用户支付订单列表需使用@kit.StoreKit中的Order相关API。主要步骤如下:

  1. 导入模块:import { order } from '@kit.StoreKit'
  2. 调用order.getOrders方法,传入包含productType(如inapp)等参数的OrdersOptions对象。
  3. 该方法返回一个Promise,解析后得到Orders对象,其中包含订单列表信息。

注意:调用前需确保应用已获取ohos.permission.ORDER权限,并在module.json5中声明。

在HarmonyOS Next中,查询用户支付订单列表需要使用@kit.InAppPurchaseKit能力。以下是关键步骤和代码示例:

1. 配置与权限

module.json5中声明权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.READ_COMMERCIAL_DATA"
      }
    ]
  }
}

2. 查询订单列表核心代码

import { inAppPurchase } from '@kit.InAppPurchaseKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 查询非消耗型商品订单
async function queryOwnedPurchases() {
  try {
    const ownedPurchasesReq: inAppPurchase.OwnedPurchasesReq = {
      priceType: inAppPurchase.PriceType.IN_APP_NONCONSUMABLE, // 非消耗型商品
      continuationToken: '' // 首次查询传空字符串
    };

    const result: inAppPurchase.OwnedPurchasesResult = 
      await inAppPurchase.obtainOwnedPurchases(ownedPurchasesReq);

    if (result && result.inAppPurchaseDataList) {
      // 处理订单数据
      for (let i = 0; i < result.inAppPurchaseDataList.length; i++) {
        const purchaseData = result.inAppPurchaseDataList[i];
        const signature = result.inAppSignature[i];
        
        // 验证签名(重要)
        const isValid = await verifySignature(purchaseData, signature);
        if (isValid) {
          // 解析订单数据
          const orderInfo = JSON.parse(purchaseData);
          console.log('订单信息:', orderInfo);
          
          // 检查购买状态
          if (orderInfo.purchaseState === 0) {
            // 购买成功状态
          }
        }
      }
      
      // 处理分页
      if (result.continuationToken) {
        // 还有更多数据,使用continuationToken继续查询
      }
    }
  } catch (error) {
    const err: BusinessError = error as BusinessError;
    console.error('查询订单失败:', err.code, err.message);
  }
}

// 签名验证函数
async function verifySignature(data: string, signature: string): Promise<boolean> {
  // 使用您的IAP公钥验证签名
  // 具体实现参考华为IAP服务文档
  return true;
}

3. 主要API说明

  • PriceType枚举

    • IN_APP_CONSUMABLE: 消耗型商品
    • IN_APP_NONCONSUMABLE: 非消耗型商品
    • IN_APP_SUBSCRIPTION: 订阅型商品
  • OwnedPurchasesResult属性

    • inAppPurchaseDataList: 订单数据列表(JSON字符串)
    • inAppSignature: 签名列表
    • continuationToken: 分页令牌

4. 注意事项

  1. 签名验证必须执行:为防止欺诈,必须使用应用的IAP公钥验证每个订单的签名
  2. 数据一致性校验:验证成功后,还需检查productId、price等关键信息是否与预期一致
  3. 分页处理:当订单数量较多时,使用continuationToken进行分页查询
  4. 错误处理:正确处理各种错误码,如网络错误、权限不足等

5. 与Android版的差异

  • API从Java变为TypeScript/ArkTS
  • 回调方式改为Promise/async-await
  • 包名和导入路径不同
  • 错误处理机制变化

这个实现方式遵循了HarmonyOS Next的API设计规范,提供了与Android版相似的功能。

回到顶部