通过云市场SPI方式激活许可证

本文为您介绍如何通过云市场 SPI 方式完成许可证的激活流程。

背景

  • 软件在云上通常依赖许可证管理系统实现权限控制。若厂商计划将软件上架至云市场销售,则需完成许可证管理系统与云市场的对接。

  • 对于需要向用户提供软件许可证的服务商,可通过阿里云市场的标准化通信接口(SPI)实现自动化激活流程:服务商提前在云市场配置SPI接口并与自有许可系统对接后,当用户完成商品购买支付时,云市场将自动通过该接口触发许可证生成请求,服务商系统实时创建加密激活码并回传至云市场。该许可证信息会同步推送至用户的计算巢服务实例,既可在控制台界面直接查看用于手动激活,也可通过预置脚本自动注入系统完成静默授权,实现从购买到启用的全流程自动化。

SPI方式与非SPI方式区别

对比维度

SPI方式(被动模式)

SPI方式(主动模式)

控制权

云市场主导:实例状态变更(如创建、续费、过期)由云市场主动触发并通知软件。

软件自主控制:软件通过主动调用API查询实例状态(如过期、正常),并自主决策许可证行为。

流程触发

云市场在检测到实例状态变更后,通过SPI接口回调告知软件,软件被动接收并响应。

软件主动调用计算巢CheckoutLicense接口查询实例状态,再根据结果执行业务逻辑。

适用场景

需快速集成云市场状态变更、减少软件自主开发的工作量。

需灵活控制许可证逻辑(如定制化状态判断规则)。

综上所述,SPI方式与非SPI方式的本质差异在于实例状态变更的主导权,软件在状态变化后触发业务逻辑。

说明

针对无法自建许可证系统的厂商,计算巢提供了一键部署的第三方开源许可证服务,具体可参考云市场接入keygen自定义license搭建许可证系统,以帮助快速实现许可证业务逻辑集成。

流程示图

image

操作步骤

前提条件

  1. 创建计算巢服务并上架服务,详细操作,请参见服务发布

  2. 创建云市场商品,本节仅具体介绍SPI配置部分。详细操作,请参见将服务发布为云市场商品

计算巢配置

  1. 用户购买商品并付款成功后,云市场会调用实例创建SPI(请参见SPI实例创建),并将许可证ID、许可证有效期、使用说明地址展示在控制台中。下图为SPI返回的参数。

    image

  2. 云市场会将以上参数发送给计算巢,为接收云市场传递的许可证业务相关参数,计算巢需要配置模板参数。

    进入计算巢-我的服务中,进入目标计算巢服务的模板内容区域,新增ParametersOutputsMetadata中的配置。示例代码如下:

    Parameters:
      licenseId:
          Type: String
          Default: ''
      licenseValidPeriod:
        Type: String
        Default: ''
      licenseForUserGuide:
        Type: String
        Default: ''
    Outputs:
      licencesId:
        Value:
          Ref: licenseId
      licenseForUserGuide:
        Value:
          Ref: licenseForUserGuide
      licenseValidPeriod:
        Value:
          Ref: licenseValidPeriod
    Metadata:
      ALIYUN::ROS::Interface:
        Hidden:
          - licenseId
          - licenseForUserGuide
          - licenseValidPeriod

云市场配置

配置SPI回调地址,用于接收云市场状态变更回调事件,回调后的业务逻辑处理需服务商自行实现。

云市场SPI配置

在云市场商品配置第一部分 商品接入信息,下方存在配置生产通知模块,在是否配置生产通知若选择是(默认为否),可开启生产通知地址配置,即SPI接口地址配置,输入生产通知地址即可。详细操作,请参见云市场生产SPI立即进行接口调试

image

云市场SPI快速体验

计算巢提供了一键部署的Keygen社区版开源许可证服务,帮助服务商快速搭建许可证系统。该服务不仅支持许可证核心功能(如创建、校验许可证等,可参考云市场接入keygen自定义license),还集成了SPI接口测试环境,可直接用于SPI能力的快速验证与体验。

  1. 部署Keygen社区版开源许可证服务,等待部署完成并获取host地址。

    image

  2. 进入SPI接入调试页面,输入请求地址 {host}:8080

    image

  1. 单击生产请求地址后,单击发送请求

    说明

    本服务模拟SPI实例创建中的返回值。

    image

对接开发/生产环境

  1. 在云市场SPI快速体验一节中,测试服务中模拟了SPI实例创建的返回值内容。示例代码如下:

    from flask import Flask, request, jsonify
    import os
    
    app = Flask(__name__)
    
    ALLOWED_ACTION = 'createInstance'
    
    # 返回的预定义 JSON 格式
    RESPONSE_JSON = {
        "instanceId": "1",
        "hostInfo": {
            "name": "linux server",
            "ip": "127.0.0.1",
            "username": "user",
            "password": "user_password"
        },
        "appInfo": {
            "frontEndUrl": "http://example.com/",
            "adminUrl": "http://example.com/admin",
            "username": "admin",
            "password": "admin_password"
        },
        "info": {
            "key1": "my custom info"
        }
    }
    
    @app.route('/', methods=['GET'])
    def handle_request():
    
        action = request.args.get('action')
    
        if action == ALLOWED_ACTION:
            return jsonify(RESPONSE_JSON)
        else:
            return jsonify({
                "error": f"Invalid action. Expected: '{ALLOWED_ACTION}'"
            }), 400
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)
    
  2. 在实际开发或生产环境中,服务商需将云市场实例状态变更时的SPI回调内容集成到自身软件系统中,以实现完整的许可证激活与生命周期管理流程。具体步骤如下:

    1. 关联许可证生命周期与SPI回调。

      云市场实例的生命周期包含创建、续费、升级、过期、释放等状态(可参见云市场生产SPI)。

      • 选择性集成:服务商根据自身许可证管理需求,选择与业务逻辑相关的状态变更,如实例创建触发许可证激活。

      • 定义回调逻辑:在SPI接口回调中,调用/返回结果均需符合云市场的规范,并确保许可证状态与云市场状态变更一致。

    2. 关键场景的SPI回调处理。

      • 实例创建:需触发许可证激活、创建 ,如返回许可证激活码。

      • 实例续费/升级:需触发如有效期延长或功能权限变更。

      • 实例过期/释放:需触发如许可证终止、自动冻结或回收对应许可证资源。