import
{ iap }
from
'@kit.IAPKit'
;
import
{ common }
from
'@kit.AbilityKit'
;
import
{ BusinessError }
from
'@kit.BasicServicesKit'
;
/
/
JWTUtil为自定义类,可参见示例代码
import
{ JWSUtil }
from
'../common/JWSUtil'
;
queryPurchases() {
const param: iap.QueryPurchasesParameter
=
{
productType: iap.ProductType.NONCONSUMABLE,
queryType: iap.PurchaseQueryType.CURRENT_ENTITLEMENT
};
const context: common.UIAbilityContext
=
getContext(this) as common.UIAbilityContext;
iap.queryPurchases(context, param).then((res: iap.QueryPurchaseResult)
=
> {
console.info(
'Succeeded in querying purchases.'
);
const purchaseDataList: string[]
=
res.purchaseDataList;
if
(purchaseDataList
=
=
=
undefined || purchaseDataList.length <
=
0
) {
return
;
}
for
(let i
=
0
; i < purchaseDataList.length; i
+
+
) {
const jwsPurchaseOrder: string
=
JSON.parse(purchaseDataList[i]).jwsPurchaseOrder;
if
(!jwsPurchaseOrder) {
continue
;
}
/
/
对jwsPurchaseOrder进行解码验签
const purchaseStr
=
JWSUtil.decodeJwtObj(jwsPurchaseOrder);
/
/
需自定义PurchaseOrderPayload类,包含的信息请参见PurchaseOrderPayload
const purchaseOrderPayload
=
JSON.parse(purchaseStr) as PurchaseOrderPayload;
/
/
处理权益发放
/
/
...
/
/
发放权益后向IAP Kit发送finishPurchase请求,确认发货,完成购买
if
(purchaseOrderPayload && purchaseOrderPayload.finishStatus !
=
=
'1'
) {
this.finishPurchase(purchaseOrderPayload);
}
}
}).catch((err: BusinessError)
=
> {
/
/
请求失败
console.error(`Failed to query purchases. Code
is
${err.code}, message
is
${err.message}`);
});
}
finishPurchase(purchaseOrder: PurchaseOrderPayload) {
const finishPurchaseParam: iap.FinishPurchaseParameter
=
{
productType: purchaseOrder.productType,
purchaseToken: purchaseOrder.purchaseToken,
purchaseOrderId: purchaseOrder.purchaseOrderId
};
const context: common.UIAbilityContext
=
getContext(this) as common.UIAbilityContext;
iap.finishPurchase(context, finishPurchaseParam).then(()
=
> {
/
/
请求成功
console.info(
'Succeeded in finishing purchase.'
);
}).catch((err: BusinessError)
=
> {
/
/
请求失败
console.error(`Failed to query purchases. Code
is
${err.code}, message
is
${err.message}`);
});
}