此接口用于根据商品编码查询托管商品的商品名称、描述、价格等信息。
为避免应用的虚拟商品价格在国际汇率变动时,应用显示的商品价格与实际华为商品服务器上管理的商品价格不一致,用户在应用中购买商品时,应用需要调用此接口获取最新的商品详情。
此接口仅在托管商品支付时才需要使用。
- HMSAgent.Pay.getProductDetails(ProductDetailRequest request, GetProductDetailsHandler handler);
| 参数名称 | 必选(M)/可选(O) | 类型 | 参数说明 |
request | M | 查询商品的请求参数信息。 | |
handler | M | 接口调用后的回调结果,结果中包含的具体参数参见结果回调。 |
| 参数名称 | 必选(M)/可选(O) | 类型 | 参数说明 |
applicationID | M | string | 应用ID,在创建应用后由华为开发者联盟为应用分配的唯一标识。应用ID的查询方法请参见查询应用ID。 |
requestId | M | string(0,32) | 查询标识号,由开发者应用自行生成,用于唯一标识一次商品查询请求。 注意: 该字段中不能包含特殊字符,包括# " & / ? $ ^ *:) \ < > , | .并且不支持中文。 |
merchantId | M | string | 商户ID,即华为开发者联盟给开发者分配的“支付ID”。 支付ID的查询方法请参见查询支付服务信息。 |
productNos | M | string | 需要获取商品详情的商品ID列表,多个商品ID时以竖线“|”分割,一次查询最多支持20个商品。 商品ID来源于开发者在AppGallery Connect中配置商品信息时设置的“商品ID”,参见配置商品信息章节。 注意: 所查询的商品ID必须在当前应用中已创建,且在应用内唯一。 |
- public interface GetProductDetailsHandler {
- /**
- * 结果回调
- * @param rst 返回码
- * @param result 商品详情
- */
- void onResult(int rst, ProductDetailResult result);
- }
| 参数名称 | 必选(M)/可选(O) | 类型 | 参数说明 |
rst | M | int | 回调结果中支付结果的返回码,应用可以根据返回码判断支付是否成功或失败后如何处理,具体返回码处理参见返回码。 |
result | M | 查询结果的对象信息。 获取ProductDetailResult对象中参数值时,请使用“对象名称.get参数名称()”的方式,参数名首字母大写。例如,“result.getProductList()”为成功查询到的商品信息。 |
| 参数名称 | 必选(M)/可选(O) | 类型 | 参数说明 |
status | M | status | 包含业务返回码的对象,可通过status.getStatusCode()获取返回码,具体返回码请参见返回码的业务返回码。 当有业务返回码时,HMS SDK会将此值赋值给rst,应用获取rst中的返回码即可。 |
requestId | M | string | 商品查询请求的标识号,与请求参数中的requestId一致。 应用通过该参数识别本次回调结果所属的查询请求。 |
productList | O | List<ProductDetail> | 成功查询到商品信息的商品列表,值为包含ProductDetail对象的数组。 获取ProductDetail对象中参数值时,请使用“对象名称.get参数名称()”的方式,参数名首字母大写。例如,“productDetail.getProductNo()”为查询成功商品信息中的商品ID。 |
failList | O | List<ProductFailObject> | 查询失败的商品信息列表,值为包含ProductFailObject对象的数组。 只有出现查询失败的商品时才会返回该参数。 获取ProductFailObject对象中参数值时,请使用“对象名称.get参数名称()”的方式,参数名首字母大写。例如,“failProduct.getProductNo()”为查询失败商品信息中的商品ID。 |
| 参数名称 | 必选(M)/可选(O) | 类型 | 参数说明 |
productNo | M | string | 查询成功的商品ID。 |
microsPrice | M | long | 商品实际价格乘以1,000,000后的微单位价格。 例如某个商品实际价格是1.99美元,则该商品对应的微单位价格为:1.99*1000000=1990000。 |
price | M | string | 商品的展示价格,包含商品货币单位和实际价格,格式为“货币单位 商品价格”,中间使用空格分隔,例如“CNY 0.15”。 |
currency | M | string | 用于支付该商品的币种,必须符合ISO 4217标准标准,例如USD、CNY、MYR。 |
country | M | string | 国家码,用于区分国家信息,必须符合ISO 3166标准,如US、CN、MY。 |
productName | O | string | 商品名称,为配置商品信息时配置的名称。 |
productDesc | O | string | 商品描述,为配置商品信息时配置的描述信息。 |
| 参数名称 | 必选(M)/可选(O) | 类型 | 参数说明 |
productNo | M | string | 查询失败的商品ID。 |
code | M | int | 查询失败的错误码,具体错误码请参见返回码。 |
msg | O | string | 查询失败的错误描述。 |
| 类型 | 返回码常量 | 返回码值 | 返回码说明 | 处理建议 |
通用返回码 | 参见通用返回码。 | |||
业务返回码 | PayStatusCodes.PAY_STATE_SUCCESS | 0 | 查询成功。 | |
PayStatusCodes.PAY_STATE_FAILED | -1 | 通用失败错误码。 | 查询失败,支付流程结束,需重新调用支付接口。 | |
PayStatusCodes.PAY_STATE_PARAM_ERROR | 30001 | 参数错误(包含无参)。 | 请检查请求参数是否遗漏,参数值格式是否正确。 | |
PayStatusCodes.PAY_STATE_TIME_OUT | 30002 | 查询超时。 | 向用户给出提示,并定时调用getProductDetails重新查询。 | |
PayStatusCodes.PAY_STATE_NET_ERROR | 30005 | 网络连接异常。 | 向用户给出提示,请用户检查网络后再重试。 | |
PayStatusCodes.PAY_STATE_ERROR | 30099 | 华为服务器返回给HMS SDK的数据格式错误,查询结果未知。 | 请联系华为技术支持定位。 | |
PayStatusCodes.PRODUCT_NOT_EXIST | 40001 | 商品ID在对应商户应用中不存在。 | 请检查productNos中的商品ID对应的商品已创建。 | |
PayStatusCodes.PRODUCT_SERVER_INTERNAL_EXCEPTION | 40003 | 商品服务器内部异常。 | 查询商品时服务器异常,请稍后重试,如仍未解决请联系华为技术支持定位。 | |
PayStatusCodes.PRODUCT_SOME_NOT_EXIST | 40004 | 商品ID在对应商户查询的应用中部分不存在,仅在失败商品(failList)的返回码(code参数)中返回。 | 检查查询失败的商品是否已在AppGllery Connect中创建。 | |
PayStatusCodes.PAY_OTHER_ERROR | 30006 | 除以上错误以外的其他异常错误。 | 请联系华为技术支持定位。 | |
- HMSAgent.Pay.getProductDetails(request, new GetProductDetailsHandler() {
- @Override
- public void onResult(int rst, ProductDetailResult result) {
- if (result != null) {
- showLog("getProductDetails: getRequestId=" + result.getRequestId() + " rstCode=" + rst);
- List<ProductDetail> productDetailsLst = result.getProductList();
- if (productDetailsLst != null) {
- for (int i=0; i<productDetailsLst.size(); i++) {
- ProductDetail detail = productDetailsLst.get(i);
- showLog("getProductDetails: No=" + detail.getProductNo()
- + "\n Title=" + detail.getProductName()
- + "\n Desc=" + detail.getProductDesc()
- + "\n Price=" + detail.getPrice() + "\n");
- // TODO: 获取每个商品的信息并储存下来,后续逻辑处理
- }
- } else {
- showLog("productDetailsLst == null");
- }
- /**
- * productDetailsFailLst包括所有查询失败的订单
- */
- List<ProductFailObject> productDetailsFailLst = result.getFailList();
- if (productDetailsFailLst != null) {
- for (int i=0; i<productDetailsFailLst.size(); i++) {
- ProductFailObject detailFail = productDetailsFailLst.get(i);
- showLog("getProductDetailsFail: No=" + detailFail.getProductNo() + " rstCode=" + detailFail.getCode()+" msg=" + detailFail.getMsg() + "\n");
- // TODO: 获取每个失败的商品的信息并储存下来,后续逻辑处理
- }
- }
- } else {
- showLog("getProductDetails: error=" + rst + "\n");
- }
- }
- });