

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Codebeispiele für die SaaS-Produktintegration
<a name="saas-code-examples"></a>

Sie können die folgenden Codebeispiele verwenden, um Ihr SaaS-Produkt (Software as a Service) in die Produkte zu integrieren AWS Marketplace APIs , die für die Veröffentlichung und Wartung Ihres Produkts erforderlich sind. Weitere Informationen finden Sie in den folgenden Abschnitten.

**Topics**
+ [`ResolveCustomer`Codebeispiel](#saas-resolvecustomer-example)
+ [`GetEntitlement`Code-Beispiel](#saas-getentitlement-example)
+ [`BatchMeterUsage`Code-Beispiel](#saas-batchmeterusage-example)
+ [`BatchMeterUsage`Codebeispiel: Mit Lizenz ARN](#saas-batchmeterusage-licensearn-example)
+ [`BatchMeterUsage`Beispiel für einen Code zur Kennzeichnung der Nutzungszuweisung (optional)](#saas-batchmeterusage-tagging)

## `ResolveCustomer`Codebeispiel
<a name="saas-resolvecustomer-example"></a>

Das folgende Codebeispiel ist für alle Preismodelle relevant. Das Python-Beispiel tauscht ein `x-amzn-marketplace-token` Token gegen ein `CustomerIdentifier``ProductCode`,`LicenseArn`, und aus`CustomerAWSAccountId`. Das `CustomerAWSAccountId` ist die AWS-Konto ID, die dem Abonnement zugeordnet ist, und `LicenseArn` ist eine eindeutige Kennung für eine bestimmte erteilte Lizenz. Diese werden für Software verwendet, die über gekauft wurde AWS Marketplace. Dieser Code wird in einer Anwendung auf Ihrer Registrierungswebsite ausgeführt, wenn Sie von der dorthin weitergeleitet werden AWS Marketplace Management Portal. Die Umleitung ist eine POST-Anforderung, die das Token enthält. 

Weitere Informationen `ResolveCustomer` dazu finden Sie [ResolveCustomer](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_ResolveCustomer.html)in der *AWS Marketplace Metering Service API-Referenz*.

**Anmerkung**  
Verwenden Sie für eine neue Implementierung oder bei der Aktualisierung Ihrer Integration die AWSAccount Kunden-ID anstelle von CustomerIdentifier.

```
# 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
```

### Beispielantwort
<a name="saas-resolvecustomer-example-response"></a>

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

## `GetEntitlement`Code-Beispiel
<a name="saas-getentitlement-example"></a>

Das folgende Codebeispiel ist relevant für SaaS-Produkte mit den Preismodellen Vertrag und Vertrag mit Verbrauch. Im Python-Beispiel wird überprüft, ob ein Kunde über eine aktive Berechtigung verfügt.

Weitere Informationen zu `GetEntitlement` finden Sie [GetEntitlement](https://docs.aws.amazon.com/marketplaceentitlement/latest/APIReference/API_GetEntitlements.html)in der *AWS Marketplace Entitlement Service API-Referenz.*

```
# 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 CustomerIdentifier (for new or updated integrations, use the customer AWS account ID)
        'CUSTOMER_IDENTIFIER': [
            'customerID',
        ]
        # Option 2: Using CustomerAWSAccountId (preferred)
        # 'CUSTOMER_AWS_ACCOUNT_ID': [
        #     'awsAccountId',
        # ]
        # Option 3: Using LICENSE_ARN (to get entitlements for the license)
        # 'LICENSE_ARN': [
        #     'licenseARN',
        # ]
    },
    'NextToken' : 'string',
    'MaxResults': 123
})

# TODO: Verify the dimension a customer is subscribed to and the quantity, 
# if applicable
```

### Beispielantwort
<a name="saas-getentitlement-example-response"></a>

Der zurückgegebene Wert entspricht den Dimensionen, die bei der Erstellung des Produkts im AWS Marketplace Management Portal erstellt wurden.

```
{
   "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`Code-Beispiel
<a name="saas-batchmeterusage-example"></a>

Das folgende Codebeispiel ist relevant für SaaS-Abonnements und Verträge mit Verbrauchspreismodellen, jedoch nicht für SaaS-Vertragsprodukte ohne Verbrauch. Das Python-Beispiel sendet einen Messdatensatz AWS Marketplace , um Ihren Kunden pay-as-you-go Gebühren in Rechnung zu stellen.

```
# 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
#
# You can use either:
# - customerID from the ResolveCustomer response
# - AWS account ID of the buyer

# Import AWS Python SDK
import boto3
from datetime import datetime

# Option 1: Using CustomerIdentifier (for new or updated integrations, use the customer AWS account ID)
usageRecord = [
    {
        'Timestamp': datetime(2015, 1, 1),
        'CustomerIdentifier': 'customerID',
        'Dimension': 'string',
        'Quantity': 123
    }
]

# Option 2: Using CustomerAWSAccountId (preferred)
# usageRecord = [
#     {
#         'Timestamp': datetime(2015, 1, 1),
#         'CustomerAWSAccountId': 'awsAccountId',
#         'Dimension': 'string',
#         'Quantity': 123
#     }
# ]

marketplaceClient = boto3.client('meteringmarketplace')

response = marketplaceClient.batch_meter_usage(
    UsageRecords=usageRecord,
    ProductCode='productCode'
)
```

Weitere Informationen `BatchMeterUsage` dazu finden Sie [BatchMeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_BatchMeterUsage.html)in der *AWS Marketplace Metering Service API-Referenz*.

### Beispielantwort
<a name="saas-batchmeterusage-example-response"></a>

```
{
    '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`Codebeispiel: Mit Lizenz ARN
<a name="saas-batchmeterusage-licensearn-example"></a>

Das folgende Codebeispiel ist relevant für SaaS-Produkte, die Concurrent Agreements unterstützen. Die `LicenseArn` und `CustomerAWSAccountId` werden von der `ResolveCustomer` API zurückgegeben, wenn sich ein Käufer für Ihr Produkt registriert.

```
# 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
)
```

### Beispielantwort
<a name="saas-batchmeterusage-licensearn-example-response"></a>

```
{
    '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`Beispiel für einen Code zur Kennzeichnung der Nutzungszuweisung (optional)
<a name="saas-batchmeterusage-tagging"></a>

Das folgende Codebeispiel ist relevant für SaaS-Abonnements und Verträge mit Nutzungspreismodellen, jedoch nicht für SaaS-Vertragsprodukte ohne Nutzung. Das Python-Beispiel sendet einen Messdatensatz mit entsprechenden Nutzungszuweisungs-Tags an AWS Marketplace , um Ihren Kunden pay-as-you-go Gebühren in Rechnung zu stellen.

```
# 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
#
# You can use either:
# - customerID from the ResolveCustomer response
# - AWS account ID of the buyer

# Import AWS Python SDK
import boto3
import time

# Option 1: Using CustomerIdentifier (for new or updated integrations, use the customer AWS account ID)
usageRecords = [
    {
        "Timestamp": int(time.time()),
        "CustomerIdentifier": "customerID",
        "Dimension": "Dimension1",
        "Quantity": 3,
        "UsageAllocations": [ 
            { 
                "AllocatedUsageQuantity": 2, 
                "Tags": [ 
                    { "Key": "BusinessUnit", "Value": "IT" },
                    { "Key": "AccountId", "Value": "*********" },
                ]
            },
            { 
                "AllocatedUsageQuantity": 1, 
                "Tags": [ 
                    { "Key": "BusinessUnit", "Value": "Finance" },
                    { "Key": "AccountId", "Value": "*********" },
                ]
            },
        ]
    }    
]

# Option 2: Using CustomerAWSAccountId (preferred)
# usageRecords = [
#     {
#         "Timestamp": int(time.time()),
#         "CustomerAWSAccountId": "awsAccountId",
#         "Dimension": "Dimension1",
#         "Quantity": 3,
#         "UsageAllocations": [ 
#             { 
#                 "AllocatedUsageQuantity": 2, 
#                 "Tags": [ 
#                     { "Key": "BusinessUnit", "Value": "IT" },
#                     { "Key": "AccountId", "Value": "*********" },
#                 ]
#             },
#             { 
#                 "AllocatedUsageQuantity": 1, 
#                 "Tags": [ 
#                     { "Key": "BusinessUnit", "Value": "Finance" },
#                     { "Key": "AccountId", "Value": "*********" },
#                 ]
#             },
#         ]
#     }    
# ]

marketplaceClient = boto3.client('meteringmarketplace')

response = marketplaceClient.batch_meter_usage(
    UsageRecords=usageRecords,
    ProductCode="testProduct"
)
```

Weitere Informationen zu `BatchMeterUsage` finden Sie [BatchMeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_BatchMeterUsage.html)in der *AWS Marketplace Metering Service API-Referenz*.

### Beispielantwort
<a name="saas-batchmeterusage-tagging-response"></a>

```
{
    "Results": [
        {
            "Timestamp": "1634691015",
            "CustomerIdentifier": "customerId",
            "CustomerAWSAccountId": "awsAccountId",
            "Dimension": "Dimension1",
            "Quantity": 3,
            "UsageAllocations": [ 
                { 
                    "AllocatedUsageQuantity": 2, 
                    "Tags": [ 
                        { "Key": "BusinessUnit", "Value": "IT" },
                        { "Key": "AccountId", "Value": "*********" }
                    ]
                },
                { 
                    "AllocatedUsageQuantity": 1, 
                    "Tags": [ 
                        { "Key": "BusinessUnit", "Value": "Finance" },
                        { "Key": "AccountId", "Value": "*********" }
                    ]
                }
            ],
            "MeteringRecordId": "8fjef98ejf",
            "Status": "Success"
        }
    ],
    "UnprocessedRecords": [
        {
            "Timestamp": "1634691015",
            "CustomerIdentifier": "customerId",
            "CustomerAWSAccountId": "awsAccountId",
            "Dimension": "Dimension1",
            "Quantity": 3,
            "UsageAllocations": []
        }
    ]
}
```