View a markdown version of this page

SaaS 產品整合的程式碼範例 - AWS Marketplace

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SaaS 產品整合的程式碼範例

您可以使用下列程式碼範例,將軟體即服務 (SaaS) 產品與發佈和維護產品所需的 AWS Marketplace APIs 整合。如需詳細資訊,請參閱下列區段。

ResolveCustomer 程式碼範例

下列程式碼範例適用於所有定價模型。Python 範例會交換 CustomerIdentifierLicenseArnProductCode和 的x-amzn-marketplace-token字符CustomerAWSAccountIdCustomerAWSAccountId 是與訂閱相關聯的 AWS 帳戶 ID,LicenseArn也是特定授權的唯一識別符。這些用於透過 購買的軟體 AWS Marketplace。當您從 重新導向時,此程式碼會在註冊網站上的應用程式中執行 AWS Marketplace 管理入口網站。重新導向是包含字符的 POST 請求。

如需 的詳細資訊ResolveCustomer,請參閱AWS Marketplace 《計量服務 API 參考》中的 ResolveCustomer

重要

對於新的 SaaS 產品整合, CustomerIdentifier 欄位不會填入 ResolveCustomer API 回應中。使用 CustomerAWSAccountIdLicenseArn來識別客戶。

# Import AWS Python SDK and urllib.parse import boto3 import urllib.parse as urlparse # Resolving Customer Registration Token formFields = urlparse.parse_qs(postBody) regToken = formFields['x-amzn-marketplace-token'][0] # If regToken present in POST request, exchange for customerID if (regToken): marketplaceClient = boto3.client('meteringmarketplace') customerData = marketplaceClient.resolve_customer(RegistrationToken=regToken) productCode = customerData['ProductCode'] customerID = customerData['CustomerIdentifier'] customerAWSAccountId = customerData['CustomerAWSAccountId'] licenseARN = customerData['LicenseArn'] # TODO: Store customer information # TODO: Validate no other accounts share the same customerID

回應範例

{ 'CustomerIdentifier': 'string', 'CustomerAWSAccountId':'string', 'ProductCode': 'string', 'LicenseArn' : 'string' }

GetEntitlement 程式碼範例

下列程式碼範例適用於具有合約的 SaaS 產品,以及具有消耗定價模型的 SaaS 合約。Python 範例會驗證客戶是否具有作用中的權限。

如需 的詳細資訊GetEntitlement,請參閱AWS Marketplace 《權利服務 API 參考》中的 GetEntitlement

# Import AWS Python SDK import boto3 marketplaceClient = boto3.client('marketplace-entitlement', region_name='us-east-1') # Filter entitlements for a specific customerID # # productCode is supplied after the AWS Marketplace Ops team has published # the product to limited # # customerID is obtained from the ResolveCustomer response entitlement = marketplaceClient.get_entitlements({ 'ProductCode': 'productCode', 'Filter' : { # Option 1: Using CustomerAWSAccountId (preferred) 'CUSTOMER_AWS_ACCOUNT_ID': [ 'awsAccountId', ] # Option 2: Using LICENSE_ARN (to get entitlements for the license) # 'LICENSE_ARN': [ # 'licenseARN', # ] # Option 3: Using CustomerIdentifier (existing integrations only, not supported for new integrations) # 'CUSTOMER_IDENTIFIER': [ # 'customerID', # ] }, 'NextToken' : 'string', 'MaxResults': 123 }) # TODO: Verify the dimension a customer is subscribed to and the quantity, # if applicable

回應範例

傳回的值對應於您在 中建立產品時所建立的維度 AWS Marketplace 管理入口網站。

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

BatchMeterUsage 程式碼範例

下列程式碼範例與使用定價模型的 SaaS 訂閱和合約相關,但不與不使用 的 SaaS 合約產品相關。Python 範例會將計量記錄傳送至 AWS Marketplace ,向您的客戶收取pay-as-you-go費用。

重要

BatchMeterUsage 不支援CustomerIdentifier新的 SaaS 產品整合。如需新的整合,請參閱 BatchMeterUsage 程式碼範例:使用授權 ARN

# NOTE: Your application will need to aggregate usage for the # customer for the hour and set the quantity as seen below. # AWS Marketplace can only accept records for up to an hour in the past. # # productCode is supplied after the AWS Marketplace Ops team has # published the product to limited # # customerID is obtained from the ResolveCustomer response # Import AWS Python SDK import boto3 from datetime import datetime usageRecord = [ { 'Timestamp': datetime(2015, 1, 1), 'CustomerIdentifier': 'customerID', 'Dimension': 'string', 'Quantity': 123 } ] marketplaceClient = boto3.client('meteringmarketplace') response = marketplaceClient.batch_meter_usage( UsageRecords=usageRecord, ProductCode='productCode' )

如需 的詳細資訊BatchMeterUsage,請參閱AWS Marketplace 《計量服務 API 參考》中的 BatchMeterUsage

回應範例

{ 'Results': [ { 'UsageRecord': { 'Timestamp': datetime(2015, 1, 1), 'CustomerIdentifier': 'string', 'CustomerAWSAccountId': 'string', 'Dimension': 'string', 'Quantity': 123 }, 'MeteringRecordId': 'string', 'Status': 'Success' | 'CustomerNotSubscribed' | 'DuplicateRecord' }, ], 'UnprocessedRecords': [ { 'Timestamp': datetime(2015, 1, 1), 'CustomerIdentifier': 'string', 'CustomerAWSAccountId': 'string', 'Dimension': 'string', 'Quantity': 123 } ] }

BatchMeterUsage 程式碼範例:使用授權 ARN

下列程式碼範例與支援並行協議的 SaaS 產品相關。當買方註冊您的產品時,ResolveCustomerAPI CustomerAWSAccountId會傳回 LicenseArn和 。

# NOTE: Your application will need to aggregate usage for the # customer for the hour and set the quantity as seen below. # AWS Marketplace can only accept records for up to an hour in the past. # # LicenseArn and CustomerAWSAccountId are returned by the ResolveCustomer # API when a buyer registers to your product # Import AWS Python SDK import boto3 from datetime import datetime usageRecord = [{ 'LicenseArn' : 'licenseArn', 'Timestamp': datetime(2015, 1, 1), 'CustomerAWSAccountId': 'awsAccountId', 'Dimension': 'string', 'Quantity': 123 }] marketplaceClient = boto3.client('meteringmarketplace') response = marketplaceClient.batch_meter_usage( UsageRecords = usageRecord )

回應範例

{ 'Results': [ { 'UsageRecord': { 'Timestamp': datetime(2015, 1, 1), 'CustomerIdentifier': 'string', 'CustomerAWSAccountId': 'string', 'Dimension': 'string', 'Quantity': 123, 'LicenseArn': 'string' }, 'MeteringRecordId': 'string', 'Status': 'Success' | 'CustomerNotSubscribed' | 'DuplicateRecord' }, ], 'UnprocessedRecords': [ { 'Timestamp': datetime(2015, 1, 1), 'CustomerIdentifier': 'string', 'CustomerAWSAccountId': 'string', 'Dimension': 'string', 'Quantity': 123, 'LicenseArn': 'string' } ] }

BatchMeterUsage 使用用量配置標記程式碼範例 (選用)

下列程式碼範例與 SaaS 訂閱和具有用量定價模型的合約相關,但不適用於不使用 的 SaaS 合約產品。Python 範例會傳送具有適當用量分配標籤的計量記錄給 AWS Marketplace ,以向您的客戶收取pay-as-you-go費用。

此範例使用 LicenseArnCustomerAWSAccountId,會在買方註冊您的產品時由 ResolveCustomer API 傳回。使用 LicenseArn支援具有並行協議的產品,其中單一買方可以擁有相同產品的多個作用中協議。

# NOTE: Your application will need to aggregate usage for the # customer for the hour and set the quantity as seen below. # AWS Marketplace can only accept records for up to an hour in the past. # # LicenseArn and CustomerAWSAccountId are returned by the # ResolveCustomer API when a buyer registers to your product. # Import AWS Python SDK import boto3 from datetime import datetime, timezone usageRecords = [ { "Timestamp": datetime.now(timezone.utc).replace(minute=0, second=0, microsecond=0), "CustomerAWSAccountId": "111122223333", "Dimension": "Dimension1", "LicenseArn": "arn:aws:license-manager::123456789012:license:l-exampleLicense12345", "Quantity": 10000, "UsageAllocations": [ { "AllocatedUsageQuantity": 5000, "Tags": [ {"Key": "user", "Value": "john"}, {"Key": "feature", "Value": "data-processing"}, {"Key": "job-name", "Value": "job11111"}, ] }, { "AllocatedUsageQuantity": 2500, "Tags": [ {"Key": "user", "Value": "john"}, {"Key": "feature", "Value": "data-storage"}, {"Key": "cluster-name", "Value": "cluster11111"}, ] }, { "AllocatedUsageQuantity": 2500, "Tags": [ {"Key": "user", "Value": "jane"}, {"Key": "feature", "Value": "data-storage"}, {"Key": "cluster-name", "Value": "cluster22222"}, ] }, ] }, { "Timestamp": datetime.now(timezone.utc).replace(minute=0, second=0, microsecond=0), "CustomerAWSAccountId": "111122223333", "Dimension": "Dimension2", "LicenseArn": "arn:aws:license-manager::123456789012:license:l-exampleLicense12345", "Quantity": 2000, "UsageAllocations": [ { "AllocatedUsageQuantity": 1000, "Tags": [ {"Key": "user", "Value": "john"}, {"Key": "feature", "Value": "data-processing"}, {"Key": "job-name", "Value": "job11111"}, ] }, { "AllocatedUsageQuantity": 1000, "Tags": [ {"Key": "user", "Value": "jane"}, {"Key": "feature", "Value": "data-processing"}, {"Key": "job-name", "Value": "job22222"}, ] }, ] } ] marketplaceClient = boto3.client('meteringmarketplace', region_name='us-east-1') response = marketplaceClient.batch_meter_usage( UsageRecords=usageRecords )

如需 的詳細資訊BatchMeterUsage,請參閱《 AWS Marketplace Metering Service API 參考》中的 BatchMeterUsage

回應範例

{ "Results": [ { "UsageRecord": { "Timestamp": "2025-06-05T14:00:00Z", "CustomerIdentifier": "customerID", "CustomerAWSAccountId": "111122223333", "Dimension": "Dimension1", "Quantity": 10000, "LicenseArn": "arn:aws:license-manager::123456789012:license:l-exampleLicense12345", "UsageAllocations": [ { "AllocatedUsageQuantity": 5000, "Tags": [ { "Key": "user", "Value": "john" }, { "Key": "feature", "Value": "data-processing" }, { "Key": "job-name", "Value": "job11111" } ] }, { "AllocatedUsageQuantity": 2500, "Tags": [ { "Key": "user", "Value": "john" }, { "Key": "feature", "Value": "data-storage" }, { "Key": "cluster-name", "Value": "cluster11111" } ] }, { "AllocatedUsageQuantity": 2500, "Tags": [ { "Key": "user", "Value": "jane" }, { "Key": "feature", "Value": "data-storage" }, { "Key": "cluster-name", "Value": "cluster22222" } ] } ] }, "MeteringRecordId": "8fjef98ejf", "Status": "Success" } ], "UnprocessedRecords": [] }