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
通过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="}

通过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="}

参考地址
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。主要步骤如下:
- 导入模块:
import { order } from '@kit.StoreKit'。 - 调用
order.getOrders方法,传入包含productType(如inapp)等参数的OrdersOptions对象。 - 该方法返回一个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. 注意事项
- 签名验证必须执行:为防止欺诈,必须使用应用的IAP公钥验证每个订单的签名
- 数据一致性校验:验证成功后,还需检查productId、price等关键信息是否与预期一致
- 分页处理:当订单数量较多时,使用
continuationToken进行分页查询 - 错误处理:正确处理各种错误码,如网络错误、权限不足等
5. 与Android版的差异
- API从Java变为TypeScript/ArkTS
- 回调方式改为Promise/async-await
- 包名和导入路径不同
- 错误处理机制变化
这个实现方式遵循了HarmonyOS Next的API设计规范,提供了与Android版相似的功能。


