获取License
接口说明
- 客户购买商品并付款成功,云商店将调用本接口通知商家客户购买商品的信息和客户信息,商家收到该请求信息,需执行新购对应动作并将执行结果返回给云商店。
- 商家需要返回此订单对应的唯一实例ID(instanceId),对不同的新购订单实例ID(instanceId)不可一致。建议此ID直接使用该订单首次请求时云商店传入的businessId,以确保instanceId的唯一性。
- 当接口响应失败时,系统会邮件通知到商家云商店账号绑定的邮箱,生产接口消息中可查询接口“异常信息”,商家收到通知后须尽快处理接口异常,避免订单无法线上交付License。
针对新购场景接口调用失败的情况,云商店会持续调用3小时(每小时1次)后停止调用,期间商家可在“卖家中心>生产接口消息”页面单击对应订单右侧操作栏的“重新启动”进行手动重试。若商家接口问题在3小时调用时间内解决,则在下一次调用接口获取到License并响应成功,订单会到“用户确认验收”节点;若商家接口问题在3小时内仍未成功调用接口获取到License,系统将停止调用,交付节点将会一直为“商家实施交付License”节点,商家可在“卖家中心>生产接口消息”页面单击对应订单右侧操作栏的“重新启动”进行手动重试或者前往服务监管详情页手动交付License。若商品单月因接口失败无法线上交付License订单超过5个,云商店将对该商品下架处理。
- 请及时关注商家信息中客服邮箱以及云商店账号绑定的邮箱及手机的通知,收到调用失败通知及时处理接口异常。
- 云商店会对接口异常导致订单失败的情况做监控,如License商品频繁出现因接口异常导致订单失败的情况,云商店将对该商品做下架处理。
- 商家的服务器在处理接口请求时,需要做好幂等性处理。
云商店服务有可能重发请求,针对同一订单号(orderId),商家的服务器应当返回成功的响应及应用实例信息,不应该创建新的License实例,返回之前成功创建的实例信息即可。
获取License流程如下图所示:
请求消息
请求参数说明请参见下表。云商店会结合商家创建上架的商品售卖模式来对应请求,商家也需要根据请求的信息来对应执行生产。
请求方法:GET
参数 |
是否必选 |
参数类型 |
最大字符长度 |
说明 |
---|---|---|---|---|
authToken |
M |
String |
50 |
安全校验令牌。 取值请参见authToken取值说明。 |
timeStamp |
M |
String |
20 |
请求发起时的时间戳,取UTC时间。 格式:yyyyMMddHHmmssSSS |
activity |
M |
String |
20 |
接口请求标识,用于区分接口请求场景。 license开通取值:getLicense |
customerId |
M |
String |
100 |
客户在华为云注册账号的唯一标识。 |
customerName |
O |
String |
64 |
客户在华为云注册的账户名。 |
businessId |
M |
String |
64 |
云商店业务ID。 每一次请求,businessId皆不一致。 |
orderId |
M |
String |
64 |
云商店订单ID。 |
skuCode |
O |
String |
64 |
产品规格标识。租户购买包月或包年的产品后,可能会续费,续费支持变更周期类型(例如包月转包年),此时,租户开通的实例instanceId对应的productId会变化,但skuCode不变。 说明: 该参数可在商品审核上架后,进入“卖家中心 > 商品管理 > 我的商品 ”页面,单击该商品操作列的“详情”进入商品详情页面获取。 |
productId |
M |
String |
64 |
产品标识,同一skuCode下,不同周期类型的productId不同。 例如:ISV发布产品,新增一个规格,会生成一个skuCode,再配置包年价格,包月价格,会生成两个productId。 说明: 该参数可在商品审核上架后,进入“卖家中心 > 商品管理 > 我的商品 ”页面,单击该商品操作列的“详情”进入详情页查看。 |
expireTime |
O |
String |
20 |
过期时间。 格式:yyyyMMddHHmmss 说明: 按周期售卖的商品,会请求该参数。 按次售卖的商品,不会请求该参数。 过期时间根据订单创建时间和购买周期计算而来,与订单实际过期时间有误差,仅供参考,不建议做其他用途,具体过期操作,以过期请求为准。 |
periodType |
O |
String |
10 |
周期类型。 说明: 非必传,如需此参数,计费类型需选择包周期chargingMode=1,包周期购买场景请求时传该参数。 年:"year" 月:"month" |
amount |
O |
integer |
4 |
数量类型的商品定价属性。非必填。 属性名称:数量(支持商家自定义名称) 单位:个(次) 对于包周期或一次性计费的多SKU定价的License商品,租户下单购买包含“数量”线性属性的规格时,会填写及调整购买的个数或次数。 例如:30个用户 |
chargingMode |
O |
Integer |
3 |
计费模式。 3:表示按次购买。 说明: 包周期购买场景请求时不传该参数。按次购买场景请求时传该参数 |
periodNumber |
O |
Integer |
5 |
周期数量 |
saasExtendParams |
O |
String |
2048 |
扩展参数,如果activity=getLicense,则必须要该数据。 扩展参数格式为json数组字符串通过 urlEncode(base64(saasExtendParams))携带到url参数中。在得到saasExtendParams参数的值后,需要通过base64Decode(urlDecode(saasExtendParams))获取扩展参数json数组。 |
扩展参数saasExtendParams
ISV通过扩展参数可以获取到识别码,系统封装的初始识别码JSON示例为:
[{"name":"identificationCode","value":"*****"}]
其中identificationCode为订单支付后,买家在服务监管里填写的值,商家依赖于该值结合订单信息、skuCode、productId等信息生成license。
经过BASE64编码和URL编码后,生成的saasExtendParams,作为参数通过调用ISV提供的接口传递到ISV的服务里,经过URL解码、BASE64解码后,还原初始封装的JSON数据,ISV得到identificationCode,根据该值并结合订单信息、skuCode、productId生成最终的license返回。
响应参数
参数 |
是否必选 |
参数类型 |
最大字符长度 |
说明 |
---|---|---|---|---|
resultCode |
M |
String |
6 |
调用结果码。 具体请参见调用结果码说明。 |
resultMsg |
M |
String |
255 |
调用结果描述。 |
instanceId |
M |
String |
64 |
实例ID,商家提供的唯一标识。 建议此ID直接使用该订单首次请求时云商店传入的businessId,以确保instanceId的唯一性。 说明: 云商店每次请求时的businessId皆不一致,如取businessId作为instanceId,取订单首次调用时的businessId即可。 若通过其他方式生成instanceId,请确保该参数的全局唯一性,例如使用UUID生成。避免生成的instanceId发生重复,导致用户开通License实例失败。 License早期版本没有续费、到期、释放接口,故该值为空,新版本请保证该值必填。 |
license |
M |
String |
商家返回的开通授权码(字符串形式) |
返回结果示例:
{ "resultCode":"000000", "resultMsg":"success.", "license":"*****", "instanceId":"4ef28f-312d3d-gad335f-3132hkf" }