Tutorial: como automatizar suas chamadas à SP-API usando um SDK em C#

Automatize suas chamadas à SP-API com a troca e autenticação de tokens do Login com a Amazon (LWA).

Este tutorial fornece todas as informações necessárias para gerar um SDK C# com troca de tokens Login with Amazon (LWA) e uma autenticação para criar seu aplicativo.

Você pode usar este SDK para integrar recursos do site da Amazon aos seus aplicativos, incluindo acessar informações do produto, gerenciar pedidos, lidar com remessas e muito mais.

Tutorial

O tutorial a seguir ajudará você a configurar seu próprio SDK de C# para automatizar chamadas de SP-API.

Pré-requisitos

Para concluir este tutorial, você precisa dos seguintes pré-requisitos:

  • Um aplicativo híbrido ou SP-API em estado de rascunho ou publicado
  • Software de ambiente de desenvolvimento integrado (IDE) (esta explicação passo a passo usa o IDE do Visual Studio no sistema operacional Windows)

Antes que seu aplicativo possa se conectar à API do parceiro de vendas, você deve registrá-lo e ele deve ser autorizado por um parceiro de vendas. Se você não tiver um aplicativo híbrido ou SP-API, siga as etapas para registrar-se como desenvolvedor, registrar seu aplicativo, e autorizar aplicativos da API do parceiro de vendas. Feito isso, retorne a este tutorial.

Em seguida, configure seu espaço de trabalho para o tutorial.

Etapa 1. Configure o espaço de trabalho

  1. Em sua unidade local, crie um diretório para esse projeto e nomeie-o SwaggerToCL.

  2. Faça download das seguintes ferramentas.

  3. Execute o seguinte comando para baixar o gerador de código do Swagger:

    wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.13/swagger-codegen-cli-2.4.13.jar -O swagger-codegen-cli.jar
  4. Copie swagger-codegen-cli.jar em seu diretório local C:\\SwaggerToCL.

  5. No GitHub, acesse https://github.com/amzn/selling-partner-api-models/tree/main/models e use o comando a seguir para clonar o repositório selling-partner-api-models para seu diretório local C:\\SwaggerToCL.

    git clone https://github.com/amzn/selling-partner-api-models
  6. Navegue até o selling-partner-api-models\\models pasta em sua cópia local do repositório e copie um arquivo JSON das subpastas do modelo para C:\\SwaggerToCL. Este tutorial usa o Sellers.json arquivo.

  7. No GitHub, acesse https://github.com/amzn/selling-partner-api-models/tree/main/clients/sellingpartner-api-aa-csharp e baixe o sellingpartner-api-aa-csharp pasta para o seu computador local.

Essa pasta contém classes auxiliares para gerar um token de acesso às APIs do parceiro de vendas da Amazon. Foi projetada para uso com as bibliotecas de clientes da API do parceiro de vendas geradas pelo Swagger Codegen usando a biblioteca RestSharp. Ela também pode ser integrada a projetos personalizados.

Com as configurações necessárias concluídas, a próxima etapa é gerar o SDK em Java com as classes de autorização e autenticação fornecidas na pasta sellingpartner-api-aa-csharp.

Etapa 2. Gere um SDK C# com troca e autenticação de tokens LWA

  1. Abra o Visual Studio.

  2. Na sellingpartner-api-aa-csharp pasta, selecione o SellingPartnerAPIAuthAndAuthCSharp.sln arquivo e construa-o usando o construir opção no Visual Studio. Isso gera o Amazon.SellingPartnerAPIAA.dll montagem na pasta sellingpartner-api-aa-csharp\\src\\Amazon.SellingPartnerAPIAA\\bin\\Debug\\netstandard2.0.

  3. Abra um terminal e execute os seguintes comandos para gerar a biblioteca cliente C#. O nome do pacote padrão para a biblioteca cliente gerada é Swagger.IO. Esses comandos geram as bibliotecas do cliente com seus respectivos nomes de API como nome do pacote em vez de Swagger.IO.

    • Em C:\\SwaggerToCL, crie um arquivo JSON chamado csharpConfig.json, abra um editor e adicione o código a seguir. Para packageName, use o mesmo nome da API para a qual você deseja gerar a biblioteca cliente:
    {"packageName":"SellingPartnerAPI.SellerAPI","targetFramework":"v4.7.2"}

    Execute este comando para gerar código C# com um nome de pacote personalizado:

    java -jar C:\SwaggerToCL\swagger-codegen-cli.jar generate -i C:\SwaggerToCL\[name of model].json -l csharp -t [path to selling-partner-api-models\clients\sellingpartner-api-aa-csharp folder]\src\Amazon.SellingPartnerAPIAA\resources\swagger-codegen\templates\ -o C:\SwaggerToCL\[name of client library] -c C:\SwaggerToCL\csharpConfig.json

    Este comando usa Sellers.json para gerar código C#:

    java -jar C:\SwaggerToCL\swagger-codegen-cli.jar generate -i C:\SwaggerToCL\Sellers.json -l csharp -t C:\SwaggerToCL\sellingpartner-api-aa-csharp\src\Amazon.SellingPartnerAPIAA\resources\swagger-codegen\templates\ -o C:\SwaggerToCL\Sellers_CsharpCL -c C:\SwaggerToCL\csharpConfig.json

    O SDK é criado em C:\\SwaggerToCL\\Sellers_CsharpCL. A próxima etapa é escrever o aplicativo real e conectar-se à SP-API usando o SDK C# gerado.

Etapa 3. Conecte-se à API do parceiro de vendas usando o SDK C# gerado

  1. No Visual Studio IDE, navegue até sua biblioteca gerada Vendedores_CSharpCL e abra a pasta .sln arquivo. O .sln arquivo de pacote terá o nome fornecido em Etapa 2. Gere um SDK C# com troca e autenticação de tokens LWA. Neste exemplo, o nome do arquivo do pacote é SellingPartnerAPI.SellerAPI.sln.

  2. Clique com o botão direito no SellingPartnerAPI.SellerAPI arquivo e selecione Adicionar > Referências.

  3. Na Referências janela, escolha Navegar, navegue até sellingpartner-api-aa csharp/src/Amazon.SellingPartnerAPIAA/bin/Debug/netstandard2.0 e escolha Amazon.SellingPartnerAPIAA.dll.

  4. Repita as etapas de 1 a 3 para o SellingPartnerAPI.SellerAPI.Test arquivo.

  5. Navegue até a pasta Sellers_CsharpCL gerada da biblioteca, clique com o botão direito do mouse no arquivo SellingPartnerAPI.SellerAPI, escolha Opções > Geral e altere a estrutura de destino para .net Framework v4.7 e superior.

  6. Repita a etapa 5 para o SellingPartnerAPI.SellerAPI.Test arquivo.

  7. Clique com o botão direito no SellingPartnerAPI.SellerAPI arquivar e escolher Gerenciar pacotes NuGet. Verifique se você tem as seguintes versões de pacote (caso contrário, instale os respectivos pacotes NuGet):

    • JsonSubTypes 1.2.0 ou todos
    • Newtonsoft.json 12.0.3 ou todos
    • RestSharp 106.12.0
    • RateLimiter 2.2.0 ou mais recente (isso também instalará ComposableAsync.Core)
  8. Clique com o botão direito no SellingPartnerAPI.SellerAPI.Test arquivar e escolher Gerenciar pacotes NuGet. Instale o Unidade 2.6.4 pacote.

    📘

    Instalação manual de pacotes NuGet

    Em alguns cenários (por exemplo, usando o iOS), as versões necessárias nos pacotes NuGet aparecem, mas pode haver um erro. Caso isso ocorra, você deve adicionar manualmente os pacotes da pasta de pacotes no sistema de arquivos:

    1. No Sellers_CsharpCL, navegue até a pasta .sln gerada da biblioteca e abra o arquivo {{2}}.
    2. Clique com o botão direito no SellingPartnerAPI.SellerAPI arquivo e selecione Adicionar > Referências.
    3. Na Referências janela, escolha Navegar, navegue até sellingpartner-api-aa csharp/src/Amazon.SellingPartnerAPIAA/bin/Debug/netstandard2.0, escolha a pasta da biblioteca do cliente gerada (por exemplo, Sellers_CsharpCL) e, em seguida, escolha pacotes e adicione o pacote para o qual você está enfrentando o erro.
  9. Na SellingPartnerAPI.SellerAPI.Test > Api pasta, abra o [Modelname]Tests.cs arquivo e adicione o seguinte código:

    using System; using System.IO; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Reflection; using RestSharp; using SellingPartnerAPI.SellerAPI.Client; using SellingPartnerAPI.SellerAPI.Api; using SellingPartnerAPI.SellerAPI.Model; using Amazon.SellingPartnerAPIAA; namespace SellingPartnerAPI.SellerAPI.Test { class SellersApiTests { public static void Main(string[] args) { try { LWAAuthorizationCredentials lwaAuthorizationCredentials = new LWAAuthorizationCredentials { ClientId = "amzn1.application-oa2-client.******************", ClientSecret = "***********************************", RefreshToken = "Atzr|***********************************", Endpoint = new Uri("https://api.amazon.com/auth/o2/token") }; SellersApi sellersApi = new SellersApi.Builder() .SetLWAAuthorizationCredentials(lwaAuthorizationCredentials) .Build(); GetMarketplaceParticipationsResponse result = sellersApi.GetMarketplaceParticipations(); Console.WriteLine(result.ToJson()); } catch (LWAException e) { Console.WriteLine("LWA Exception when calling SellersApi#getMarketplaceParticipations"); Console.WriteLine(e.getErrorCode()); Console.WriteLine(e.getErrorMessage()); Console.WriteLine(e.Message); } catch (ApiException e) { Console.WriteLine("Exception when calling SellersApi#getMarketplaceParticipations"); Console.WriteLine(e.Message); } } } }

    LWAAuthorizationCredentials parâmetros da instância:

NomeDescriçãoObrigatório
ClientIdSeu identificador de cliente do LWA. Para obter mais informações, consulte Visualizar as informações e credenciais do aplicativo.Sim
ClientSecretYour LWA client secret. For more information, refer to Viewing your application information and credentialsSim
RefreshTokenThe LWA refresh token. Get this value when the selling partner authorizes your application. For more information, refer to Authorizing Selling Partner API Applications.No. Include RefreshToken if the operation that you call in the following step requires selling partner authorization. All operations that are not grantless operations require selling partner authorization. If you include RefreshToken, do not include Scopes.
ScopesThe scope of the LWA authorization grant. You can specify one or more Scopes values:
- ScopeNotificationsAPI. For the Notifications API.
- ScopeMigrationAPI. For the Authorization API.
Não. Inclua Scopes se a operação que você chamar na etapa a seguir for uma operação sem concessão. Se você incluir Scopes, não inclua RefreshToken.
EndpointO URI do servidor de autenticação do LWA.Sim
Example of an operation call that requires selling partner authorization:

```csharp
using Amazon.SellingPartnerAPIAA;
LWAAuthorizationCredentials lwaAuthorizationCredentials = new LWAAuthorizationCredentials
{
  ClientId = "myClientId",
  ClientSecret = "myClientSecret",
  RefreshToken = "Aztr|...",
  Endpoint = new Uri(""https://api.amazon.com/auth/o2/token"")
};
```

Example of a grantless operation call:

```csharp
using Amazon.SellingPartnerAPIAA;
LWAAuthorizationCredentials lwaAuthorizationCredentials = new LWAAuthorizationCredentials
{
  ClientId = "myClientId",
  ClientSecret = "myClientSecret",
  Scopes = new List<string>() { ScopeConstants.ScopeNotificationsAPI, ScopeConstants.ScopeMigrationAPI }
  Endpoint = new Uri(""https://api.amazon.com/auth/o2/token"")
};
```
  1. Para visualizar a saída do código, você precisa convertê-lo em um aplicativo de console. Para fazer isso, clique com o botão direito do mouse no SellingPartnerAPI.SellerAPI.Test arquivar e escolher Opções.

  2. Na Opções do projeto janela, no painel de navegação esquerdo, expanda Construir, em seguida, escolha Geral. Na Geração de código seção, escolha Alvo de compilação e selecione Executável com GUI. Escolha OK.

  3. Crie e execute o projeto.

Solucionar problemas de um SDK C#

Erros de IRestRequest: “RestSharp Version=105.0.0.0. Culture=neutral. PublicKevToken=598062e77f915f75 está definido em um assembly que não é referenciado. Você deve adicionar uma referência ao assembly {{2}}”

Clique para expandir a resposta. Atualize o pacote do {{0}} para a versão 106.12.0.0. Verifique a referência para garantir que a versão 106.12 tenha sido atualizada com êxito. Se a versão 105.0.0.0 continuar sendo exibida, remova a versão antiga da referência e adicione o pacote 106.12.0.0 manualmente da pasta de pacotes com a biblioteca de clientes gerada.

“O tipo ou o nome do espaço de nomes {{0}} não foi encontrado (está faltando uma diretiva de uso ou uma referência de assembly?)”

Selecione para expandir a resposta.

In some scenarios, even though you have the required version in the NuGet packages for Newtonsoft, you need to manually add the package from the package folder in the file system. To resolve this, use the following steps:

  1. In Visual Studio, right-click your generated SDK package and choose Add, then References.

  2. Na janela de referências do assembly .Net, clique em browse**.

  3. Navigate to the generated client library folder in localpackages and add the specific package for Newtonsoft.

“Mensagem: Não foi possível carregar o tipo de campo SellingPartnerAPI.servicesApi.Client.ApiClient:rateLimiter (3) devido a: Não foi possível carregar o arquivo ou o assembly ComposableAsync.Core, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null ou uma de suas dependências.”

Selecione para expandir a resposta.

Se você receber esse erro depois de criar e executar seu código, isso significa que o pacote de dependência ComposableAsync.Core foi baixado, mas não foi incluído como referência. Certifique-se de adicionar manualmente a dll como referência.

Problemas de mapeamento com modelos

Selecione para expandir a resposta.

O modelo ItemAsin foi gerado com o tipo JsonObject, mas a string necessária ItemAttributes requer o JsonObjectAttribute. Você pode usar esse comando, que usa a API de itens do catálogo, para importar o mapeamento necessário para os modelos:

`java -jar swagger-codegen-cli.jar generate -i catalogItems_2022-04-01.json -l csharp -t sellingpartner-api-aa-csharp\src\Amazon.SellingPartnerAPIAA\resources\swagger-codegen\templates —import-mappings ItemAttributes=Newtonsoft.Json.JsonObjectAttribute —import-mappings ItemAsin=System.string -o catalogItems2022-04-01_import`

HttpRequestHeaders.ToJson(): nenhum método adequado foi encontrado para a substituição.”

Selecione para expandir a resposta.

Substitua a palavra-chave override por virtual. Declare os métodos como virtual para que possam ser substituídos.

public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); }

“O nome BaseValidate não existe no contexto atual”

Selecione para expandir a resposta.

Remova o comentário dos métodos mencionados na classe:

// IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) // { // foreach (var x in BaseValidate(validationContext)) // yield return x; // yield break; // }

Esta página ajudou você?