目录

应用内支付3.0

该功能依赖 IAP SDK 提供服务,IAP SDK 可能会收集用户的个人数据。请在快应用中使用该功能之前,告知用户将搜集个人数据,并引导用户阅读相应的隐私政策。

本文档仅介绍接口的定义,接口详细的使用顺序和场景,请参见“接入应用内支付服务3.0”。

接口声明

在manifest.json文件的 features属性中增加如下配置。

{"name": "service.pay"}

导入模块

在调用接口页面的<script>部分增加如下配置。

import pay from '@service.pay'

或

var pay = require("@service.pay")

使用限制

限制条件

说明

适用终端

手机、平板、智慧屏

适用区域

全球

接口定义

接口

描述

pay.getProvider(OBJECT)

获取服务提供商。

pay.isEnvReady(OBJECT)

判断当前设备登录的华为账号所属国家是否在华为IAP支持结算的国家和地区中。

pay.isSandboxActivated(OBJECT)

判断当前设备登录的华为账号及应用的RPK版本是否满足沙盒条件。

pay.obtainOwnedPurchases(OBJECT)

查询用户所有已订购商品信息,商品包括消耗商品、非消耗商品和订阅类商品。

pay.obtainProductInfo(OBJECT)

获取在AppGallery Connect上配置的商品详情。

pay.createPurchaseIntent(OBJECT)

创建购买AppGallery Connect上配置商品的订单。

pay.consumeOwnedPurchase(OBJECT)

消耗型商品支付成功后,对商品进行消耗操作。

pay.obtainOwnedPurchaseRecord(OBJECT)

获取消耗型商品的历史商品信息或者订阅类商品的所有订阅收据。

pay.startIapActivity(OBJECT)

拉起华为应用内支付相关页面。

pay.createPurchaseIntentWithPrice(OBJECT)

创建非PMS商品订单,支持购买消耗型商品、非消耗型商品,不支持购买订阅型商品。

[h2]pay.getProvider(OBJECT)

描述

获取服务提供商。

返回值

字符串,服务提供商的代号,如厂商的英文品牌名称,如果无此服务则返回空字符串。返回空字符串时,请勿调用该服务其他接口,否则将抛出异常。

示例代码

pay.getProvider();

[h2]pay.isEnvReady(OBJECT)

描述

判断当前设备登录的华为账号所属国家是否在华为IAP支持结算的国家和地区中。

OBJECT参数

参数

类型

是否必填

说明

isEnvReadyReq

json

是

判断是否支持华为IAP支付的请求信息,详细信息请参见“isEnvReadyReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

isEnvReadyReq 参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

success返回值

参数

类型

说明

returnCode

number

返回值,成功返回为0。

fail返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.isEnvReady({
  isEnvReadyReq: {
    "applicationID": "101315751"
  },
  success: function (data) {
    console.debug("isEnvReady data =", JSON.stringify(data));
    prompt.showToast({
      message: "Env ready!"
    })
  },
  fail: function (data, code) {
    console.log("isEnvReady fail data =" + data, "code =" + code);
    prompt.showToast({
      message: "isEnvReady fail!"
    })
  }
})

[h2]pay.isSandboxActivated(OBJECT)

描述

判断当前设备登录的华为账号是否满足沙盒条件。

参数

参数

类型

是否必填

说明

isSandboxActivatedReq

json

是

判断是否满足沙盒账号条件的请求信息,详细信息请参见“isSandboxActivatedReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

isSandboxActivatedReq参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

success返回值

参数

类型

说明

returnCode

number

查询结果的返回码。

errMsg

string

返回码描述信息。

isSandboxUser

boolean

是否是沙盒账号。

isSandboxApk

boolean

快应用中心是否满足沙盒条件,固定返回true。

versionInApk

string

快应用中心的版本信息。

versionFrMarket

string

应用市场上快应用中心最新的版本信息。

fail返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.isSandboxActivated({
  isSandboxActivatedReq: {
    "applicationID": "101315751",
  },
  success: function (data) {
    console.debug("isSandboxActivated data =", JSON.stringify(data));
    prompt.showToast({
      message: "isSandboxActivated success!"
    })
  },
  fail: function (data, code) {
    console.log("isSandboxActivated fail data =" + JSON.stringify(data), "code =" + code);
    prompt.showToast({
      message: "isSandboxActivated fail!"
    })
  }
})

[h2]pay.obtainOwnedPurchases(OBJECT)

描述

查询用户所有已订购商品信息,商品包括消耗商品、非消耗商品和订阅类商品。

- 续期:正常使用,下个周期进行续费。

- 到期:如果下个周期不再续费,该周期过后变成已过期。

- 已过期:不能再使用订阅服务,但可以从订阅关系历史中查询到记录。

OBJECT参数

参数

类型

是否必填

说明

ownedPurchasesReq

json

是

查询用户所有已订购商品未被消耗信息,详细信息请参见“ownedPurchasesReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

ownedPurchasesReq参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

priceType

number

是

商品类型。

  • 0:消耗型商品
  • 1:非消耗型商品
  • 2:订阅类商品

publicKey

string

是

开通支付服务时获取的支付公钥。获取方式请参见“开通支付服务”中的“获取支付公钥”章节。

continuationToken

string

否

分页查询的定位标志。该参数首次请求时不需要传入,当数据过多需分次查询时,传入上次查询时success返回值中的continuationToken。

success返回值

参数

类型

说明

returnCode

number

查询结果的返回码。

errMsg

string

返回码描述信息。

itemList

array

以String数组方式返回用户已购买的商品ID列表。

inAppPurchaseDataList

array

以String数组方式返回用户已购买商品的详情信息列表。数组中每个String元素为JSON格式。

inAppSignature

array

包含已使用支付私钥签名的购买数据(inAppPurchaseDataList)签名字符串。签名算法为SHA256WITHRSA,签名字符串与 inAppPurchaseDataList中的商品详细信息为一一对应关系,即inAppSignature中的第1个签名字符串对应inAppPurchaseDataList中第1条商品的详情信息,依次类推。应用需要对inAppPurchaseDataList中的每个JSON字符串都进行验签,如果验签不通过则需要重新获取该商品信息,验签方法请参见“对结果验签”。

continuationToken

string

数据定位标志。如果用户拥有的商品数量非常大,当响应中存在continuationToken时,应用必须对当前方法发起另一次调用,并传入本次接收到的continuationToken。如果商品仍未查完,需要继续发起调用,直到不再返回continuationToken,表示已经返回全部商品。

placedInappPurchaseDataList

array

以JSON字符串数组方式返回用户发生过订阅商品切换时的订阅关系信息,每个JSON字符串包含的参数请参见“InAppPurchaseData”。商品切换是指用户购买了订阅商品A后,在下一个周期购买了同一个订阅组下的商品B,则此时A的订阅关系将取消,用户转而与商品B建立订阅关系。则查询时此字段将返回商品B的订阅关系信息。该值仅在priceType为2且用户存在订阅商品切换时才会返回。

placedInappSignatureList

array

对应placedInappPurchaseDataList中订阅关系的签名字符串。应用需要对placedInappPurchaseDataList中的每个JSON字符串都进行验签,如果验签不通过则需要重新获取该订阅关系,验签方法请参见“对结果验签”。该值仅在priceType为2且用户存在订阅商品切换时才会返回。

fail错误码返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.obtainOwnedPurchases({
  ownedPurchasesReq: {
    "priceType": 0,
    "applicationID": "101315751",
    "publicKey": "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAnLLFO6c8d1x6jdbZ8PkNtrLtRMiFaRqWZgEjC4Vj9QXnPCmDZoPO5A5TSwzlWjYL5ktbbDnZC6Vfp8VI8nTMm8DvbGsJ+1ihru31vG1gqvUgOaXESqBhdpMrKFEgNBV8zlalLpcCU6Gayd8QJCxXRPcUisHLTQFJHjTMOWmvOcKiSxt1VmG3dvfWVkoMeKyerZy4qHEWM/asJihPZATBQ7puMC/kOh6i8V2gv4w/74KWifpBr3J5RN+PK6E7yWUqIALFTnN5vOIif2HELvgt+S6uaGpRydhSwu1xtV7bPtXQY20ollYo4BUi+AvM16iBCa1+1Mdw0y6Y9gZAtpHRK1Pf+yea4aoY4y/bZ6EX21wucvbzxexDcBkGn0DVvNHKr3usmUmq/yfMMmDPqPujv3iDWKFENfL4Agugo7I8etCF8vVYDOT5J8gXupgGLiritkfALZD8HgNZADyM+NnvQBJrdeVoHxCYoQMCS2hySPf2AaZWT7PzVAeGidLcEeKlAgMBAAE="
  },
  success: function (data) {
    console.debug("obtainOwnedPurchases data =", JSON.stringify(data));
    prompt.showToast({
      message: "obtainOwnedPurchases success!"
    })
  },
  fail: function (data, code) {
    console.log("obtainOwnedPurchases fail data =" + data, "code =" + code);
    prompt.showToast({
      message: "obtainOwnedPurchases fail!"
    })
  }
})

[h2]pay.obtainProductInfo(OBJECT)

描述

获取在AppGallery Connect配置的商品详情。请开发者避免从自有服务端获取商品信息,否则可能导致应用内商品价格和华为支付收银台价格不一致。

OBJECT参数

参数

类型

是否必填

说明

productInfoReq

json

是

获取商品详情的请求信息,详细信息请参见“productInfoReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

执行结束回调。

productInfoReq参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

priceType

number

是

商品类型。

  • 0 : 消耗型商品
  • 1 : 非消耗型商品
  • 2 : 订阅类商品

productIds

array

是

商品的id。

success返回值

参数

类型

说明

returnCode

number

查询结果的返回码。

errMsg

string

返回码描述信息。

productInfoList

array

成功查询到的商品信息列表,值为包含productInfo对象的数组。

productInfo说明

参数

类型

是否必填

说明

productId

string

是

商品ID。

priceType

number

是

商品类型。

  • 0 : 消耗型商品
  • 1 : 非消耗型商品
  • 2 : 订阅类商品

price

string

是

商品的展示价格。

microsPrice

number

是

商品实际价格乘以1,000,000后的微单位价格。

例如某个商品实际价格是1.99美元,则该商品对应的微单位价格为:1.99*1000000=1990000。

currency

string

是

用于支付该商品的币种,必须符合ISO 4217标准,例如USD、CNY、MYR。

productName

string

是

商品名称,为配置商品信息时配置的名称,用于在支付收银台显示内容。

productDesc

string

是

商品描述,为配置商品信息时配置的描述信息。

subPeriod

string

否

订阅商品周期单位,采用ISO 8601格式指定。如P1W相当于一个星期,P1M 相当于一个月,P2M 相当于两个月,P6M 相当于六个月,P1Y 相当于一年。

说明:

仅在查询订阅商品时返回。

subSpecialPrice

string

否

订阅商品优惠价格。包含商品货币单位和实际价格,格式为“货币单位 商品价格”,中间使用空格分隔,例如“CNY 0.15”。此价格不含税。

说明:

仅在查询订阅商品时返回。

subSpecialPriceMicros

number

否

订阅优惠微单位价格。

说明:

仅在查询订阅商品时返回。

subSpecialPeriod

string

否

订阅商品优惠周期单位,采用ISO 8601格式指定。如P1W相当于一个星期,P1M 相当于一个月,P2M 相当于两个月,P6M 相当于六个月,P1Y 相当于一年。

说明:

仅在查询订阅商品时返回。

subSpecialPeriodCycles

string

否

订阅商品优惠周期数。此优惠周期数由开发者在AppGallery Connect中设置订阅商品的促销价格时配置,参见“设置促销价格”。

说明:

仅在查询订阅商品时返回。

subsFreeTrialPeriod

string

否

订阅商品免费周期。此优惠周期由开发者在AppGallery Connect中设置订阅商品的促销价格时配置,参见“设置促销价格”。

说明:

仅在查询订阅商品时返回。

subsGroupId

string

否

订阅商品所属订阅组ID。

说明:

仅在查询订阅商品时返回。

subsGroupTitle

string

否

订阅商品所属订阅组描述。

说明:

仅在查询订阅商品时返回。

subsProductLevel

string

否

订阅商品在订阅组里的级别。

说明:

仅在查询订阅商品时返回。

originalMicroPrice

string

否

获取商品原价的微单位价格,商品原价乘以1,000,000后的微单位价格。

originalLocalPrice

string

否

商品的原价,包含商品货币符号和实际价格,格式为“货币符号 商品价格”,例如“¥0.15”。此价格含税。

status

int

否

获取商品的状态。

  • 0:表示有效。
  • 1:表示取消,即删除。此状态的商品不可续订,也不可订阅。
  • 3:表示下线,不能订阅,但老用户仍可续订。
    说明:

    查询非订阅商品时无需关注此字段。

fail错误码返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.obtainProductInfo({
  productInfoReq: {
    "priceType": 1,
    "productIds": ["dy1","dmy00","lcole"],
    "applicationID": "101315751",
  },
  success: function (data) {
    console.debug("obtainProductInfo =" + JSON.stringify(data));
    prompt.showToast({
      message: "obtainProductInfo success!"
    })
  },
  fail: function (data, code) {
    console.log("obtainProductInfo fail data =" + JSON.stringify(data), "code =" + code);
    prompt.showToast({
      message: "obtainProductInfo fail!"
    })
  }
})

[h2]pay.createPurchaseIntent(OBJECT)

描述

创建购买AppGallery Connect上配置商品的订单。

在AppGallery Connect创建商品后,使用此接口调用华为支付收银台,显示商品、价格和支付方式。华为会根据国际汇率变动进行商品价格档调整,为了保证应用内商品价格显示一致,请同时使用obtainProductInfo接口获取商品详情,避免从自有服务端获取价格,以免在汇率变动价格调整时,导致价格显示不一致。

OBJECT参数

参数

类型

是否必填

说明

purchaseIntentReq

json

是

购买商品请求信息,详细信息请参见“purchaseIntentReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

purchaseIntentReq参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

publicKey

string

是

开通支付服务时获取的支付公钥。获取方式请参见“开通支付服务”中的“获取支付公钥”章节。

productId

string

是

待支付的商品ID。商品ID来源于开发者在AppGallery Connect中配置商品信息时设置的“商品ID”。

priceType

string

是

商品类型。

  • 0 : 消耗型商品
  • 1 : 非消耗型商品
  • 2 : 订阅类商品

developerPayload

string

否

商户侧保留信息。若该字段有值,在支付成功后的回调结果中会原样返回给应用。

success返回值

参数

类型

说明

returnCode

number

返回码。

errMsg

string

返回码描述信息。

inAppDataSignature

string

包含已使用应用私钥签名的购买数据(inAppPurchaseData)的签名字符串。签名算法为SHA256WITHRSA。支付成功后应用需要参见“对结果验签”的方法使用支付公钥对inAppPurchaseData的JSON字符串进行验签。

inAppPurchaseData

string

包含购买订单详情的JSON 字符串,详细信息请参见“inAppPurchaseData参数说明”。

inAppPurchaseData参数说明

参数

类型

是否必填

说明

applicationId

string

是

应用ID。

autoRenewing

boolean

是

  • 消耗商品或者非消耗商品:固定为false。
  • 订阅商品返回true:订阅处于活动状态并且将在下一个结算日期自动续订。
  • 订阅商品返回false:用户已经取消订阅。用户可以在下一个结算日期之前访问订阅内容,并且在该日期后将无法访问,除非用户重新启用自动续订。

如果提供了宽限期,只要宽限期未过,此值会对所有订阅保持设置为true。下一次结算日期每天都会自动延长,直至宽限期结束,或者用户更改他们的付款方式。

orderId

string

否

华为支付服务器侧的订单ID,唯一标识一次交易,由华为支付服务器在支付时生成。

kind

number

是

商品类型。

  • 0 : 消耗型商品
  • 1 : 非消耗型商品
  • 2 : 订阅类商品

packageName

string

否

快应用中心包名。

productId

string

是

商品ID。每个商品必须有唯一的ID,由应用在PMS中维护。

productName

string

否

商品名称。

purchaseTime

string

否

商品购买时间的时间戳,即自1970年1月1日0时起到商品购买时间的毫秒数。

purchaseState

string

是

订单交易状态。

  • -1:初始化
  • 0:已购买
  • 1:已取消
  • 2:已退款

developerPayload

string

否

商户侧保留信息,由开发者在调用支付接口时传入。

developerChallenge

string

否

应用发起消耗请求时自定义的挑战字,可唯一标识此次消耗请求。

说明:

非订阅类商品才存在此字段。

consumptionState

string

否

消费状态。

  • 0:未消费
  • 1:已消费

purchaseToken

string

否

用于唯一标识商品和用户对应关系的购买令牌,在支付完成时由华为支付服务器生成。

说明:

该字段唯一标识商品和用户的对应关系,订阅类商品正常订阅时不会发生改变。当前该字段为92位,后续可能扩展,如开发者需要存储此信息,建议预留128位的长度。

purchaseType

number

否

购买类型,正常购买不返回此参数。

  • 0:沙盒环境
  • 1:促销,暂不支持

currency

string

否

定价货币的币种,参见“ISO 4217标准”。

price

number

否

商品实际价格*100以后的值。

country

string

是

国家码,用于区分国家信息,参见“ISO 3166标准”。

payType

string

否

支付方式。

  • 0:花币
  • 3:信用卡
  • 4:支付宝
  • 6:话费
  • 13:PayPal
  • 16:借记卡
  • 17:微信
  • 19:礼品卡
  • 20:零钱
  • 21:花币卡
  • 24:WP
  • 31:华为Pay
  • 32:花呗
  • 200:MPESA

以下参数只有查询订阅类商品时才返回

lastOrderId

string

是

上次续期收款的订单ID,由支付服务器在续期扣费时生成。首次购买订阅商品时的lastOrderId与orderId相同。

productGroup

string

否

订阅商品所属的订阅组ID。

purchaseTime

number

否

商品购买时间的时间戳,即自1970年1月1日0时起到商品购买时间的毫秒数。如果没有完成购买,则没有值。

oriPurchaseTime

number

否

原购买时间的时间戳,即本订阅商品首次成功收费时间距离1970年1月1日0点的毫秒数。

subscriptionId

string

否

订阅ID。

oriSubscriptionId

string

否

原订阅ID。返回该参数信息时表示当前订阅从其他商品切换而来,该参数值可以关联切换前的商品订阅信息。

quantity

number

否

购买数量。

daysLasted

number

否

已经付费订阅的天数。免费试用和促销期周期除外。

numOfPeriods

number

否

成功标准续期(不包括设置促销的续期)的期数,为0或者不存在表示还没有成功续期。

numOfDiscount

number

否

成功促销续期期数。

expirationDate

number

否

订阅商品过期时间的时间戳。对于一个成功收费的自动续订收据,该时间表示续期日期或者超期日期。如果该时间是一个过去的时间,则表示订阅已经过期。

expirationIntent

number

否

对于已经过期的订阅,表示过期原因。取值包括:

  • 1:用户取消
  • 2:商品不可用
  • 3:用户签约信息异常
  • 4:Billing错误
  • 5:用户未同意涨价
  • 6:未知错误

同时有多个异常时,根据优先级 1 > 2 > 3… 的原则,返回一个优先级最高的异常。

retryFlag

number

否

一个过期的订阅,系统是否仍然在尝试自动完成续期处理。

  • 0:终止尝试
  • 1:仍在尝试完成续期

introductoryFlag

number

否

是否处于促销价续期周期内。

  • 0:否
  • 1:是

trialFlag

number

否

是否处于免费试用周期内。

  • 0:否
  • 1:是

cancelTime

number

否

取消时间的时间戳。在顾客投诉通过客服取消订阅,或者顾客升级、跨级到同组其他商品并且立即生效场景下,需要取消原有订阅的上次收据时有值。

说明:

已经取消的收据等同于没有完成购买。

cancelReason

number

否

取消原因。

  • 2:顾客升级、跨级等。
  • 1:顾客因为在App内遇到问题而取消了订阅。
  • 0:其他原因取消,比如顾客错误地订阅了商品。
    说明:

    如果该字段为空且cancelTime有值,表示是升级等操作导致的取消。

renewStatus

number

否

续期状态。

  • 1:当前周期到期时自动续期
  • 0:用户停止了续期仅针对自动续期订阅,对有效和过期的订阅均有效,并不代表顾客的订阅状态。

通常,取值为0时,应用可以给用户提供其他的订阅选项,例如推荐一个同组更低级别的商品。该值为0通常代表用户主动取消了该订阅。

priceConsentStatus

number

否

商品提价时的用户意见。

  • 1:用户已经同意提价
  • 0:用户未采取动作,超期后订阅失效。

renewPrice

number

否

下次续期价格。在有priceConsentStatus情况下,供客户端参考,用于提示用户新的续期价格。

subIsvalid

boolean

否

  • true:表示商品已经收费且未过期,也没有发生退款,开发者可以基于该标志为顾客提供服务。
  • false表示未完成购买或者已经过期,或者购买后已经退款。
    说明:

    如果用户已经取消订阅,在已经购买的商品过期之前,subIsvalid仍然为True。

cancelledSubKeepDays

number

否

用户取消后订阅关系保留的天数,并不表示本订阅已经取消。

resumeTime

number

否

订阅商品暂停订阅后的恢复时间。

fail返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.createPurchaseIntent({
  purchaseIntentReq: {
    "applicationID": "101315751",
    "productId": "dmy001",
    "priceType": 0,
    "developerPayload": "testPurchase",
    "publicKey": "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAnLLFO6c8d1x6jdbZ8PkNtrLtRMiFaRqWZgEjC4Vj9QXnPCmDZoPO5A5TSwzlWjYL5ktbbDnZC6Vfp8VI8nTMm8DvbGsJ+1ihru31vG1gqvUgOaXESqBhdpMrKFEgNBV8zlalLpcCU6Gayd8QJCxXRPcUisHLTQFJHjTMOWmvOcKiSxt1VmG3dvfWVkoMeKyerZy4qHEWM/asJihPZATBQ7puMC/kOh6i8V2gv4w/74KWifpBr3J5RN+PK6E7yWUqIALFTnN5vOIif2HELvgt+S6uaGpRydhSwu1xtV7bPtXQY20ollYo4BUi+AvM16iBCa1+1Mdw0y6Y9gZAtpHRK1Pf+yea4aoY4y/bZ6EX21wucvbzxexDcBkGn0DVvNHKr3usmUmq/yfMMmDPqPujv3iDWKFENfL4Agugo7I8etCF8vVYDOT5J8gXupgGLiritkfALZD8HgNZADyM+NnvQBJrdeVoHxCYoQMCS2hySPf2AaZWT7PzVAeGidLcEeKlAgMBAAE="
  },
  success: function (data) {
    that.inAppPurchaseData = data;
    console.debug("createPurchaseIntent success =" + JSON.stringify(data));
    prompt.showToast({
      message: "createPurchaseIntent success!"
    })
  },
  fail: function (data, code) {
    console.log("createPurchaseIntent fail data =" + data, "code =" + code);
    prompt.showToast({
      message: "createPurchaseIntent fail!"
    })
  }
})

[h2]pay.consumeOwnedPurchase(OBJECT)

描述

针对消耗型商品,在商品支付成功后,应用需要在发放商品之后调用此接口对消耗商品执行消耗操作。

  1. 如果在消耗之后进行发货,可能存在以下异常场景:调用消耗接口过程中,服务器消耗成功但因网络异常等原因没有成功将结果回调给端侧,从而造成服务器已经消耗但是端侧没有发货的场景。此场景后续很难处理,所以建议开发者在发货之后再执行消耗操作。
  2. 开发者需要把已发货的token传至应用的服务器,后续即使消耗失败也可以从服务器获取数据进行对比,避免出现异常。建议开发者在发货前检查应用服务器,以确保每个购买令牌都未使用过,即未发过货。

OBJECT参数

参数

类型

是否必填

说明

consumeOwnedPurchaseReq

json

是

消耗商品请求,详细信息请参见“consumeOwnedPurchaseReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

consumeOwnedPurchaseReq参数说明

参数

类型

是否必填

说明

applicationID

json

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

developerChallenge

string

否

开发者自定义的挑战字,唯一标识此次消耗请求。消耗成功后此挑战字会记录在购买信息中并返回。该参数长度限制为(0, 64)。

purchaseToken

string

是

用户购买商品的标识,在支付商品时由支付服务器生成并在InAppPurchaseData中返回给应用。应用传入此参数供支付服务器对订单状态进行更新后再发放商品。

publicKey

string

是

开通支付服务时获取的支付公钥。获取方式请参见“开通支付服务”中的“获取支付公钥”章节。

success返回值

参数

类型

说明

returnCode

Number

返回码。

errMsg

string

返回码描述信息。

consumePurchaseData

string

包含消耗结果数据的JSON字符串。

dataSignature

string

consumePurchaseData基于支付私钥的签名字符串。

consumePurchaseData参数说明

参数

类型

是否必填

说明

applicationId

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

autoRenewing

boolean

是

订阅是否自动续订。

  • true:是
  • false:否

orderId

string

是

华为支付服务器侧的订单ID,唯一标识一次交易,由华为支付服务器在支付时生成。

packageName

string

是

快应用中心包名。

productId

string

是

商品ID。

purchaseTime

number

是

商品购买时间的时间戳,即1970年1月1日0点距离购买时间的毫秒数。

purchaseState

number

是

订单状态。

  • -1:初始化,不可见
  • 0:已购买
  • 1:已取消
  • 2:已退款

developerPayload

string

否

商户侧保留信息,由应用在支付时传入。

purchaseToken

string

是

用于唯一标识商品和用户对应关系的购买令牌,在支付完成时由华为支付服务器生成。

developerChallenge

string

否

应用发起消耗请求时自定义的挑战字,唯一标识此次消耗请求。

consumptionState

number

是

消费状态。

  • 0:未消费
  • 1:已消费。

currency

string

是

币种。参见“ISO 4217标准”,例如USD、CNY、MYR。

price

number

是

商品价格,精确到小数点后2位,例如5.00*100=500。

country

string

是

用户服务地国家码,参见必须符合“ISO 3166标准”,如US、CN、MY。

responseCode

string

是

响应码,成功返回为0。

responseMessage

string

否

响应信息。

fail返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.consumeOwnedPurchase({
  consumeOwnedPurchaseReq: {
    "applicationID": "101315751",
    "developerPayload": "testPurchase",
    "purchaseToken": "0000017297d6a4faa22aaa2fa705e96247231b89ec228b3fd05e378b70e4c7d023a9c972c540e3d0x434e.1.101315751",
    "publicKey": "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAnLLFO6c8d1x6jdbZ8PkNtrLtRMiFaRqWZgEjC4Vj9QXnPCmDZoPO5A5TSwzlWjYL5ktbbDnZC6Vfp8VI8nTMm8DvbGsJ+1ihru31vG1gqvUgOaXESqBhdpMrKFEgNBV8zlalLpcCU6Gayd8QJCxXRPcUisHLTQFJHjTMOWmvOcKiSxt1VmG3dvfWVkoMeKyerZy4qHEWM/asJihPZATBQ7puMC/kOh6i8V2gv4w/74KWifpBr3J5RN+PK6E7yWUqIALFTnN5vOIif2HELvgt+S6uaGpRydhSwu1xtV7bPtXQY20ollYo4BUi+AvM16iBCa1+1Mdw0y6Y9gZAtpHRK1Pf+yea4aoY4y/bZ6EX21wucvbzxexDcBkGn0DVvNHKr3usmUmq/yfMMmDPqPujv3iDWKFENfL4Agugo7I8etCF8vVYDOT5J8gXupgGLiritkfALZD8HgNZADyM+NnvQBJrdeVoHxCYoQMCS2hySPf2AaZWT7PzVAeGidLcEeKlAgMBAAE="
  },
  success: function (data) {
    console.debug("consumeOwnedPurchase data =", JSON.stringify(data));
    prompt.showToast({
      message: "consumeOwnedPurchase success!"
    })
  },
  fail: function (data, code) {
    console.log("consumeOwnedPurchase fail data =" + JSON.stringify(data), "code =" + code);
    prompt.showToast({
      message: "consumeOwnedPurchase fail!"
    })
  }
})

[h2]pay.obtainOwnedPurchaseRecord(OBJECT)

描述

此接口用于获取消耗型商品的历史消耗商品信息或订阅商品的所有订阅收据。

OBJECT参数

参数

类型

是否必填

说明

ownedPurchasesRecordReq

json

是

查询已订购商品请求,详细信息请参见“ownedPurchasesRecordReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

ownedPurchasesRecordReq参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

priceType

number

是

商品类型。

  • 0 : 消耗型商品
  • 1 : 非消耗型商品
  • 2 : 自动续订商品。

publicKey

string

是

开通支付服务时获取的支付公钥。获取方式请参见“开通支付服务”中的“获取支付公钥”章节。

continuationToken

string

否

分页查询的定位标志。该参数第一次查询时不需要传入,如果第一次查询数据量很大超过200条,会在查询后返回该参数,第二次查询时需要携带该参数。

success返回值

参数

类型

说明

returnCode

number

查询结果的返回码。

errMsg

string

返回码描述信息。

itemList

array

以String数组方式返回用户已购买的商品ID列表。

inAppPurchaseDataList

array

以String数组方式返回用户已购买商品的详情信息列表。数组中每个String元素为JSON格式。

inAppSignature

array

包含已使用支付私钥签名的购买数据(inAppPurchaseDataList)签名字符串。签名算法为SHA256WITHRSA,签名字符串与 inAppPurchaseDataList中的商品详细信息为一一对应关系,即inAppSignature中的第1个签名字符串对应inAppPurchaseDataList中第1条商品的详情信息,依次类推。应用需要对inAppPurchaseDataList中的每个JSON字符串都进行验签,如果验签不通过则需要重新获取该商品信息,验签方法请参见“对结果验签”。

continuationToken

string

数据定位标志。如果用户拥有的商品数量非常大,当响应中存在continuationToken时,应用必须对当前方法发起另一次调用,并传入本次接收到的continuationToken。如果商品仍未查完,需要继续发起调用,直到不再返回continuationToken,表示已经返回全部商品。

placedInappPurchaseDataList

array

以JSON字符串数组方式返回用户发生过订阅商品切换时的订阅关系信息,每个JSON字符串包含的参数请参见“InAppPurchaseData”。商品切换是指用户购买了订阅商品A后,在下一个周期购买了同一个订阅组下的商品B,则此时A的订阅关系将取消,用户转而与商品B建立订阅关系。则查询时此字段将返回商品B的订阅关系信息。该值仅在priceType为2且用户存在订阅商品切换时才会返回。

placedInappSignatureList

array

对应placedInappPurchaseDataList中订阅关系的签名字符串。应用需要对placedInappPurchaseDataList中的每个JSON字符串都进行验签,如果验签不通过则需要重新获取该订阅关系,验签方法请参见“对结果验签”。该值仅在priceType为2且用户存在订阅商品切换时才会返回。

fail返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.obtainOwnedPurchaseRecord({
  ownedPurchasesRecordReq: {
    "applicationID": "101315751",
    "priceType": 2,
    "publicKey": "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAnLLFO6c8d1x6jdbZ8PkNtrLtRMiFaRqWZgEjC4Vj9QXnPCmDZoPO5A5TSwzlWjYL5ktbbDnZC6Vfp8VI8nTMm8DvbGsJ+1ihru31vG1gqvUgOaXESqBhdpMrKFEgNBV8zlalLpcCU6Gayd8QJCxXRPcUisHLTQFJHjTMOWmvOcKiSxt1VmG3dvfWVkoMeKyerZy4qHEWM/asJihPZATBQ7puMC/kOh6i8V2gv4w/74KWifpBr3J5RN+PK6E7yWUqIALFTnN5vOIif2HELvgt+S6uaGpRydhSwu1xtV7bPtXQY20ollYo4BUi+AvM16iBCa1+1Mdw0y6Y9gZAtpHRK1Pf+yea4aoY4y/bZ6EX21wucvbzxexDcBkGn0DVvNHKr3usmUmq/yfMMmDPqPujv3iDWKFENfL4Agugo7I8etCF8vVYDOT5J8gXupgGLiritkfALZD8HgNZADyM+NnvQBJrdeVoHxCYoQMCS2hySPf2AaZWT7PzVAeGidLcEeKlAgMBAAE="
  },
  success: function (data) {
    console.debug("obtainOwnedPurchaseRecord data =", JSON.stringify(data));
    prompt.showToast({
      message: "obtainOwnedPurchaseRecord success!"
    })
  },
  fail: function (data, code) {
    console.log("obtainOwnedPurchaseRecord fail data =" + JSON.stringify(data), "code =" + code);
    prompt.showToast({
      message: "obtainOwnedPurchaseRecord fail!"
    })
  }
})

[h2]pay.startIapActivity(OBJECT)

描述

拉起华为应用内支付的相关订阅页面,包括:

OBJECT参数

参数

类型

是否必填

说明

startIapActivityReq

json

是

跳转订阅页面请求,详细信息请参见“startIapActivityReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

startIapActivityReq参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

type

number

是

跳转界面。

  • 2:管理订阅页
  • 3:编辑订阅页

subscribeProductId

string

否

已经订阅商品的id。type设置为3必须带id,type为2不需要带id。

success 返回值

无。

fail返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.startIapActivity({
  startIapActivityReq: {
    "applicationID": "101315751",
    "type": 2,
    "subscribeProductId":"dy1"
  },
  success: function () {
    prompt.showToast({
      message: "startIapActivity success!"
    })
  },
  fail: function (data, code) {
    console.log("startIapActivity fail data =" + JSON.stringify(data), "code =" + code);
    prompt.showToast({
      message: "createPurchaseIntent fail!"
    })
  }
})

[h2]pay.createPurchaseIntentWithPrice(OBJECT)

描述

创建非PMS商品订单,支持购买消耗型商品、非消耗型商品,不支持购买订阅类商品。

应用可以调用此接口自行传入商品价格并完成支付,而不是从PMS获取价格。

  • 此接口当前只支持仅在中国大陆地区发布的应用。
  • 此接口不提供商品信息自动全球化能力,您需要在接口中指定价格、币种和国家/地区。

OBJECT参数

参数

类型

是否必填

说明

purchaseIntentWithPriceReq

json

是

购买商品请求信息,详细信息请参见“purchaseIntentWithPriceReq参数说明”。

success

function

否

成功回调。

fail

function

否

失败回调。

complete

function

否

完成回调。

purchaseIntentWithPriceReq参数说明

参数

类型

是否必填

说明

applicationID

string

是

在华为开发者联盟上创建快应用后分配的唯一标识。获取方式请参见“创建快应用”中的“获取APP ID”章节。

publicKey

string

是

开通支付服务时获取的支付公钥。获取方式请参见“开通支付服务”中的“获取支付公钥”章节。

productId

string

是

应用自定义的商品ID。商品ID用于唯一标识一个商品,不能重复。

说明:

该参数长度限制为(0,148]。

priceType

string

是

商品类型。

  • 0 : 消耗型商品
  • 1 : 非消耗型商品

developerPayload

string

否

商户侧保留信息。若该字段有值,在支付成功后的回调结果中会原样返回给应用。

说明:

该参数长度限制为[0, 256]。

amount

string

是

商品金额,中国大陆该字段单位为元。此金额将会在支付时显示给用户确认。

说明:

配置商品金额时:

  1. 请保留小数点后两位,如20.00。

    如果不按照此格式传入金额,会导致支付失败。

  2. 部分币种只能设置为整数金额,例如只能是5.00,不能设置为5.02。具体请参见“华为IAP范围覆盖”。

country

string

是

国家/地区码,用于区分国家/地区信息,必须符合ISO 3166标准。

说明:

中国大陆传值为CN,其余国家/地区请参见“华为IAP范围覆盖”。

currency

string

是

用于支付该商品的币种,必须符合ISO 4217标准。

说明:

中国大陆传值为CNY,其余国家/地区请参见“华为IAP范围覆盖”。

productName

string

是

商品名称,由应用自定义。

说明:

该参数长度限制为(0,64],且不能包含以下特殊字符:

# " & / ? $ ^ * : ) \ < > , | %

reservedInfor

string

否

要求为JSON String格式,商户可以将额外需要传入的字段以key-value的形式设置在JSON String中,并通过该参数传入。示例:

String reservedInfor = "{"key1":"value1","key2":"value2"}";
说明:

该字段为预留字段,可选传入,您暂时无需关注。

sdkChannel

string

是

渠道信息。

● 0:自有应用,无渠道

● 1:应用市场渠道

● 2:预装渠道

● 3:游戏中心

serviceCatalog

string

是

商品类型。

  • X4:主题
  • X5:应用商店
  • X6:游戏
  • X7:天际通
  • X8:云空间
  • X9:电子书
  • X10:华为学习
  • X11:音乐
  • X12:视频
  • V0:vmall 实体商品
  • X31:话费充值
  • X32:机票/酒店
  • X33:电影票
  • X34:团购
  • X35:手机预购
  • X36:公共缴费
  • X37:基金理财
  • X38:彩票
  • X39:流量充值

应用设置为"X5"。

success 返回值

参数

类型

说明

returnCode

number

返回码。

errMsg

string

返回码描述信息。

inAppDataSignature

string

包含已使用应用私钥签名的购买数据(inAppPurchaseData)的签名字符串。签名算法为SHA256WITHRSA。支付成功后应用需要参见“对结果验签”的方法使用支付公钥对inAppPurchaseData的JSON字符串进行验签。

inAppPurchaseData

string

包含购买订单详情的JSON 字符串,详细信息请参见“inAppPurchaseData参数说明”。

inAppPurchaseData参数说明

参数

类型

是否必填

说明

applicationId

string

是

应用ID。

autoRenewing

boolean

是

是否自动续订。非订阅类商品始终为false。

orderId

string

否

华为支付服务器侧的订单ID,唯一标识一次交易,由华为支付服务器在支付时生成。

kind

number

是

商品类型。

  • 0 : 消耗型商品
  • 1 : 非消耗型商品

packageName

string

否

应用安装包名,此处固定为快应用中心包名。

productId

string

是

商品ID。每个商品必须有唯一的ID,由应用在PMS中维护。

productName

string

否

商品名称。

purchaseTime

number

否

商品购买时间的时间戳,即自1970年1月1日0时起到商品购买时间的毫秒数。

purchaseTimeMillis

number

否

用于兼容历史接口,同purchaseTime,新接入无需关注本字段。

purchaseState

string

是

订单交易状态。

  • -1:初始化
  • 0:已购买
  • 1:已取消
  • 2:已退款

developerPayload

string

否

商户侧保留信息,是您在调用支付接口时传入的值。

developerChallenge

string

否

应用发起消耗请求时自定义的挑战字,是您在调用 pay.consumeOwnedPurchase传入的值,可唯一标识此次消耗请求。

说明:

非订阅类商品才存在此字段。

consumptionState

string

否

消费状态。

  • 0:未消费
  • 1:已消费

confirmed

integer

否

确认状态。

  • 0:未确认
  • 1:已确认
  • 没有传值:不需要确认
说明:

该字段当前仅做兼容使用,您无需关注。

purchaseToken

string

否

用于唯一标识商品和用户对应关系的购买令牌,在支付完成时由华为支付服务器生成。

说明:

当前该字段为92位,后续可能扩展,如果您需要存储此信息,建议预留128位的长度。

purchaseType

number

否

购买类型,正常购买不返回此参数。

  • 0:沙盒环境
  • 1:促销,暂不支持

currency

string

否

定价货币的币种,参见“ISO 4217标准”。

price

number

否

商品实际价格*100以后的值。

country

string

是

国家码,用于区分国家信息,参见“ISO 3166标准”。

payType

string

否

支付方式。

  • 0:花币
  • 3:信用卡
  • 4:支付宝
  • 6:话费
  • 13:PayPal
  • 16:借记卡
  • 17:微信
  • 19:礼品卡
  • 20:零钱
  • 21:花币卡
  • 24:WP
  • 31:华为Pay
  • 32:花呗
  • 200:MPESA

payOrderId

string

否

交易订单号。

accountFlag

number

否

账号类型。

  • 0:华为账号
  • 1:AppTouch用户账号

fail返回值

参数

类型

说明

data

string

错误描述。请先判断类型后,再获取值。

code

number

错误码。

示例代码

pay.createPurchaseIntentWithPrice({
  purchaseIntentWithPriceReq: {
    "applicationID": "101315751",
    "amount":"0.01",
    "country":"CN",
    "currency":"CNY",
    "developerPayload": "testPurchase",
    "priceType": "0",
    "productId": "abc22",
    "productName":"零食大礼包",
    "reservedInfor":"{}",
    "sdkChannel":"0",
    "serviceCatalog":"X5",
    "publicKey": "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAnLLFO6c8d1x6jdbZ8PkNtrLtRMiFaRqWZgEjC4Vj9QXnPCmDZoPO5A5TSwzlWjYL5ktbbDnZC6Vfp8VI8nTMm8DvbGsJ+1ihru31vG1gqvUgOaXESqBhdpMrKFEgNBV8zlalLpcCU6Gayd8QJCxXRPcUisHLTQFJHjTMOWmvOcKiSxt1VmG3dvfWVkoMeKyerZy4qHEWM/asJihPZATBQ7puMC/kOh6i8V2gv4w/74KWifpBr3J5RN+PK6E7yWUqIALFTnN5vOIif2HELvgt+S6uaGpRydhSwu1xtV7bPtXQY20ollYo4BUi+AvM16iBCa1+1Mdw0y6Y9gZAtpHRK1Pf+yea4aoY4y/bZ6EX21wucvbzxexDcBkGn0DVvNHKr3usmUmq/yfMMmDPqPujv3iDWKFENfL4Agugo7I8etCF8vVYDOT5J8gXupgGLiritkfALZD8HgNZADyM+NnvQBJrdeVoHxCYoQMCS2hySPf2AaZWT7PzVAeGidLcEeKlAgMBAAE="
  },
  success: function (data) {
    that.inAppPurchaseData = data.inAppPurchaseData;
    console.log('createPurchaseIntentWithPrice data = ', JSON.stringify(data));
  },
  fail: function (data, code) {
    console.log("createPurchaseIntentWithPrice fail data =" + JSON.stringify(data), "code =" + code);
    prompt.showToast({
      message: "createPurchaseIntentWithPrice fail!"
    })
    that.retdata = "createPurchaseIntentWithPrice fail data =" + JSON.stringify(data) + "----code =" + code
  }
})

错误码

错误码

说明

200

一般错误。

202

入参错误。

1002

应用鉴权失败。

1001

公钥验签失败。

其他错误码

参见“retCode业务错误码说明”。