亚马逊AWS官方博客

快速打通AWS Marketplace SaaS集成流程 (实战指南)

亚马逊云科技AWS Marketplace 是全球云软件一站式交易平台,提供软件即服务(SaaS)、AMI、容器等多种解决方案,企业可快速发现订阅。软件提供商(卖家)通过AWS Marketplace销售SaaS应用,可以接触全球客户,能简化计费和收款流程。

卖家在AWS Marketplace 上架产品,须通过 API以及SNS通知完成集成。本文将带你逐步了解 SaaS 集成的关键环节,展示完整的集成流程与最佳实践。

1.准备工作

定价模式

SaaS 产品有三种收费的定价类型:SaaS订阅、Saa合同 和SaaS合同附带用量。

SaaS 订阅(Subscription) SaaS 合同(Contract) SaaS 合同附带用量(Contract with pay-as-you-go)
合约期限 无固定期限,随时可取消 固定期限(通常为 1 个月 / 1 年 / 3 年) 固定期限基础合约 + 灵活的额外使用量
续订方式 持续订阅直至客户取消 合约到期需手动续订或设置自动续订 基础合约到期需续订,额外使用持续计费
API集成 使用 MeterUsage API 报告使用量 使用 GetEntitlements API 检索客户合同权限 同时使用两种 API
SNS通知 aws-mp-subscription-notification 通知 aws-mp-entitlement-notification 通知 和 aws-mp-subscription-notification 通知 接收所有相关通知

定价维度(dimension)是产品的收费项目,向客户收费的计量单位,比如按用户数收费。合同或订阅维度包含三个部分:API 标识符、名称和产品描述。

购买选项(purchasing options)在合同模式下,有单维度和多维度,是确定买家怎么”买单”。

  • 多维度:买家能购买多个项目并且设置购买数量。比如N个用户数+n GB存储 。
  • 单维度:买家能购买单个项目,无法自定义数量。比如纬度是基础版与专业版 ,买家单选一个。

产品落地页(Fulfilment URL)在提交产品信息过程中是必填的资料。买家订阅后,AWS 通过 HTTP POST 请求自动重定向到此页面。

2. 提交产品信息

在上架SaaS 前,需要创建SaaS产品上架列表,提交产品信息。登录AWS账号后,到 AWS Partner Central 合作伙伴管理门户,选择构建 ,然后选择 SaaS 产品。

上架列表到Limited 状态

创建SaaS产品列表(Create SaaS product),完善产品信息、落地页面、URL、定价退货政策等信息,就可 Submit(提交)。后台验证信息成功后,产品发布到 “受限Limited” 状态。过程可参考《发布 SaaS 产品》操作指南。

后台系统在验证成功后给您回复邮件。邮件内容包括:

  • Product Page for Limited Test: 白名单的AWS账号可查看的产品测试页面。
  • Product Code: 产品唯一标识码,用于API集成。
  • SNS Topic: 您在API集成过程需要订阅的SNS主题,接收用户订阅的状态发生改变消息。
SaaS 产品生命周期
Staging (暂存) 配置的初始阶段,首次点击 Save and exit (保存并退出) 时,会创建的暂存产品。
Limited (受限) 产品信息通过系统校验后进入该状态;此时会有一个详情页,但只对你的账号以及你加入 allowlist(白名单)的人可见,适合做端到端测试与订阅验证。
Public (公开) 当您发布产品,运营团队根据政策审核产品。产品获得批准后, 从受限状态改为公开状态,买家可以订阅并购买您的产品。
Restricted (下架/已限制) 如果您希望停止新用户订阅,可以使用 Update visibility (更新可见性) 来限制该产品。Restricted 状态意味着现有用户可以继续使用产品,但将不再对公众可见。

3. 与买家交接

买家在AWS Marketplace订阅产品后,跳转至落地页(fulfillment URL)。此跳转是通过 HTTP POST 请求携带的临时 x-amzn-marketplace-token 令牌。

此令牌每个客户每次订阅时会生成1次,4小时后过期。使用相同的token调用ResolveCustomer API会返回同一值。过期后,该token将失效。客户需重新在AWS Marketplace 产品再回传到SaaS 产品 。当获得身份信息后,用ResolveCustomer API获取客户身份, 以及用GetEntitlements API获取合同订单详情(适用合同模式)

ResolveCustomer API

将令牌交换为 CustomerIdentifier、CustomerAWSAccountId 和 ProductCode后,我们建议您保存这些资料,以便将来调用。

ResolveCustomerAPI的Python请求示例:

ResolveCustomerAPI响应内容:

{
   "CustomerAWSAccountId": "string",
   "CustomerIdentifier": "string",
   "ProductCode": "string"
}

GetEntitlements API

创建 SaaS 上架列表时,您定义合约类型(服务内容+产品周期)。买家选定合约后,您可以通过 GetEntitlements API获得买家的contract合同信息。

GetEntitlements请求:

GetEntitlements响应内容:

{
   "Entitlements": [ 
      { 
         "CustomerAWSAccountId": "string",
         "CustomerIdentifier": "string",
         "Dimension": "string",
         "ExpirationDate": number,
         "ProductCode": "string",
         "Value": { 
            "BooleanValue": boolean,
            "DoubleValue": number,
            "IntegerValue": number,
            "StringValue": "string"
         }
      }
   ],
   "NextToken": "string"
}

当Entitlement 处于活跃时,会返回dimensions(计量维度)和合约期限。当GetEntitlement  查不到信息 ,代表此客戶在产品並沒有有效 Entitlement,您需要处理访问权限更新(比如提示续费或直接拒绝)。

4. 订单变更通知

在新用户订阅后,卖家会收到SNS主题aws-mp-entitlement-notification和aws-mp-subscription-notification发出的通知。

aws-mp-entitlement-notification

买家创建新合约、升级 tier、续费、合约到期时推送。 适用 SaaS 合同 和 SaaS合同加用量。

消息格式:

{
    "action": " entitlement-updated",
    "customer-identifier": " X01EXAMPLEX",
    "product-code": "n0123EXAMPLEXXXXXXXXXXXX",
}

此通知不含变更详情。无论是新合约、升级、续费还是过期,卖家均需调用 GetEntitlements API 获取最新权益信息。

aws-mp-subscription-notification SNS Topic

买家订阅成功、失败、取消时推送。适用所有 SaaS 定价模式。

消息格式:

{
    "action": "<action-name>",
    "customer-identifier": " X01EXAMPLEX",
    "product-code": "n0123EXAMPLEXXXXXXXXXXXX",
    "offer-identifier": "offer-abcexample123",
    "isFreeTrialTermPresent":"true"
}

(架构建议) Amazon SQS 订阅

我们建议用 Amazon SQS 队列订阅 AWS Marketplace提供的 SNS 主题。SNS 是即时推送服务,不提供消息持久化,因此用 SQS 队列作为缓冲层能确保消息在下游系统不会丢失。 具体实践请参考《为 Amazon SQS 队列订阅 Amazon SNS主题》

5. 发出使用量记录 (订阅模式)

在 SaaS subscription订阅模式,您必须主动记录产品使用量,AWS根据上报的使用量向客户收费。AWS Marketplace 不会自动记录,只有在成功接收您发送的记录后,才能完成客户计费。记录通过BatchMeterUsage API被 AWS 平台接收。

BatchMeterUsage API关键要求:

  • 每小时批量上报:推荐定时上报用量(含0 用量),单批≤25 条。
  • 负载:单次请求≤1MB
  • 时间窗口:
    • 订阅后6小时内上报有效
    • 订阅取消,需要在1小时内补齐所有用量。

代码示例

client = boto3.client('meteringmarketplace', region_name = 'us-east-1')

response = client.batch_meter_usage(
    UsageRecords=[
        {
            'Timestamp': '1677177560',
            'CustomerIdentifier': '<CUSTOMER_ID>',
            'Dimension': '<DIMENSION_ID>',
            'Quantity': 10
        },
    ],
    ProductCode='<PRODUCT_CODE>'
)

(架构建议) Amazon DynamoDB 存记录
使用 DynamoDB 无服务器数据库去持久化计量记录,DynamoDB 按客户/产品/时间/维度索引记录,支持 TTL 自动清理过期数据,完美匹配计量场景的高写入、低读模式。

测试

您可使用白名单账号模拟买家视角,订阅产品验证完整流程,确保所有集成点正常工作后继续下步。

产品访问链接:

  • 产品发布到Limited 后,在邮件找到产品测试页信息。
  • 或打开SaaS 产品页面,选择您的产品, 点击View on AWS Marketplace,直接跳转买家视角的产品页。

在Limited 阶段的产品,维度定价自动是 $0.01。确切定价在公开发布时才需调整。当测试完成后,您可以参考文档将产品发布到公开(Public)状态。产品公开审核流程通常需要 3-7个工作日或更久, 具体时间取决于运营团队。验证完后, 您将收到产品状态变更通知。此时您可以在平台提交定价

市场推广功能

产品发布后, 建议启用以下服务推广产品:

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

刘雨珊

亚马逊AWS解决方案架构师,位于香港,负责种类业务繁多的中小型企业及初创公司在AWS的解决方案架构设计,同时支持客户业务出海与全球化部署。拥有多年海外工作经验,曾在澳大利亚AWS负责企业客户的云上技术支持与最佳实践落地。

杨浩洛

AWS合作伙伴解决方案架构师,现于AWS专门协助 ISV 及合作伙伴拓展其方案,并专注于 SaaS 及 Marketplace 领域。在加入AWS前曾为互联网初创技术共同创始人,并曾于创业圈担任初创导师。之前亦在各服务商及分销商曾任职架构师,帮助客户部署商业系统及云架构。

AWS 架构师中心: 云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用