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
-
Em sua unidade local, crie um diretório para esse projeto e nomeie-o
SwaggerToCL
. -
Faça download das seguintes ferramentas.
- Software de IDE (esta explicação passo a passo usa o IDE Visual Studio no sistema operacional Windows)
- GNU Wget
- Java 8 ou mais recente
-
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 -
Copie
swagger-codegen-cli.jar
em seu diretório localC:\\SwaggerToCL
. -
No GitHub, acesse
https://github.com/amzn/selling-partner-api-models/tree/main/models
e use o comando a seguir para clonar o repositórioselling-partner-api-models
para seu diretório localC:\\SwaggerToCL
.git clone https://github.com/amzn/selling-partner-api-models -
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 paraC:\\SwaggerToCL
. Este tutorial usa oSellers.json
arquivo. -
No GitHub, acesse
https://github.com/amzn/selling-partner-api-models/tree/main/clients/sellingpartner-api-aa-csharp
e baixe osellingpartner-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
-
Abra o Visual Studio.
-
Na
sellingpartner-api-aa-csharp
pasta, selecione oSellingPartnerAPIAuthAndAuthCSharp.sln
arquivo e construa-o usando o construir opção no Visual Studio. Isso gera oAmazon.SellingPartnerAPIAA.dll
montagem na pastasellingpartner-api-aa-csharp\\src\\Amazon.SellingPartnerAPIAA\\bin\\Debug\\netstandard2.0
. -
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 deSwagger.IO
.- Em
C:\\SwaggerToCL
, crie um arquivo JSON chamadocsharpConfig.json
, abra um editor e adicione o código a seguir. ParapackageName
, 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.jsonEste 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.jsonO 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. - Em
Etapa 3. Conecte-se à API do parceiro de vendas usando o SDK C# gerado
-
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
. -
Clique com o botão direito no
SellingPartnerAPI.SellerAPI
arquivo e selecione Adicionar > Referências. -
Na Referências janela, escolha Navegar, navegue até
sellingpartner-api-aa csharp/src/Amazon.SellingPartnerAPIAA/bin/Debug/netstandard2.0
e escolhaAmazon.SellingPartnerAPIAA.dll
. -
Repita as etapas de 1 a 3 para o
SellingPartnerAPI.SellerAPI.Test
arquivo. -
Navegue até a pasta
Sellers_CsharpCL
gerada da biblioteca, clique com o botão direito do mouse no arquivoSellingPartnerAPI.SellerAPI
, escolha Opções > Geral e altere a estrutura de destino para .net Framework v4.7 e superior. -
Repita a etapa 5 para o
SellingPartnerAPI.SellerAPI.Test
arquivo. -
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 todosNewtonsoft.json 12.0.3
ou todosRestSharp 106.12.0
RateLimiter 2.2.0
ou mais recente (isso também instalaráComposableAsync.Core
)
-
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:
- No
Sellers_CsharpCL
, navegue até a pasta.sln
gerada da biblioteca e abra o arquivo {{2}}. - Clique com o botão direito no
SellingPartnerAPI.SellerAPI
arquivo e selecione Adicionar > Referências. - 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.
- No
-
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:
Nome | Descrição | Obrigatório |
---|---|---|
ClientId | Seu identificador de cliente do LWA. Para obter mais informações, consulte Visualizar as informações e credenciais do aplicativo. | Sim |
ClientSecret | Your LWA client secret. For more information, refer to Viewing your application information and credentials | Sim |
RefreshToken | The 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. |
Scopes | The 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 . |
Endpoint | O 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"")
};
```
-
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. -
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.
-
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}}”
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:
-
In Visual Studio, right-click your generated SDK package and choose
Add
, thenReferences
. -
Na janela de referências do assembly .Net, clique em
browse
**. -
Navigate to the generated client library folder in local → packages 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.”
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.”
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”
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;
// }
Updated 23 days ago