Tutorial: Automatice sus llamadas a SP-API con un SDK de C#

Automatice sus llamadas a la SP-API con el intercambio de tokens y la autenticación de Login with Amazon (LWA).

Este tutorial le proporciona toda la información necesaria para generar un SDK de C# con el intercambio de tokens Login with Amazon (LWA) y una autenticación para crear su aplicación.

Puedes usar este SDK para integrar las funciones del mercado de Amazon en tus aplicaciones, incluido el acceso a la información de los productos, la gestión de pedidos, la gestión de envíos, etc.

Tutorial

El siguiente tutorial le ayudará a configurar su propio SDK de C# para automatizar las llamadas a SP-API.

Requisitos

Para completar este tutorial, necesita los siguientes requisitos previos:

  • Una aplicación híbrida o SP-API en estado de borrador o publicado
  • Software de entorno de desarrollo integrado (IDE) (en este tutorial se usa el IDE de Visual Studio en el sistema operativo Windows)

Para que tu aplicación pueda conectarse a la API de socios vendedores, debes registrarla y contar con la autorización de un socio vendedor. Si no tienes una aplicación híbrida o SP-API, sigue los pasos para registrarse como desarrollador, registre su solicitud, y Autorización de las aplicaciones de la API de los socios vendedores. Luego, vuelve a este tutorial.

A continuación, configura tu espacio de trabajo para el tutorial.

Paso 1. Configura tu espacio de trabajo

  1. En tu disco local, crea un directorio para este proyecto y asígnale un nombre SwaggerToCL.

  2. Descarga las siguientes herramientas.

  3. Ejecute el siguiente comando para descargar el generador de código 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. Copiar swagger-codegen-cli.jar en tu directorio local C:\\SwaggerToCL.

  5. En GitHub, ve a https://github.com/amzn/selling-partner-api-models/tree/main/models y utilice el siguiente comando para clonar el selling-partner-api-models repositorio a tu directorio local C:\\SwaggerToCL.

    git clone https://github.com/amzn/selling-partner-api-models
  6. Navegue hasta el selling-partner-api-models\\models carpeta en tu copia local del repositorio y copia un archivo JSON de las subcarpetas del modelo a C:\\SwaggerToCL. Este tutorial utiliza el Sellers.json archivo.

  7. En GitHub, ve a https://github.com/amzn/selling-partner-api-models/tree/main/clients/sellingpartner-api-aa-csharp y descarga el sellingpartner-api-aa-csharp carpeta a su ordenador local.

Esta carpeta proporciona clases auxiliares para generar un token de acceso para las API de los socios vendedores de Amazon. Está diseñada para usarse con las bibliotecas de clientes de las API de socios vendedores generadas por Swagger Codegen usando la biblioteca RestSharp. También se puede integrar en proyectos personalizados.

Ahora que has completado la configuración necesaria, el siguiente paso es generar el SDK de Java con las clases de autenticación y autorización proporcionadas en la carpeta sellingpartner-api-aa-csharp.

Paso 2. Genere un SDK de C# con autenticación e intercambio de tokens LWA

  1. Abra Visual Studio.

  2. En el sellingpartner-api-aa-csharp carpeta, selecciona el SellingPartnerAPIAuthAndAuthCSharp.sln archiva y compruébalo usando el construir opción en Visual Studio. Esto genera el Amazon.SellingPartnerAPIAA.dll montaje en la carpeta sellingpartner-api-aa-csharp\\src\\Amazon.SellingPartnerAPIAA\\bin\\Debug\\netstandard2.0.

  3. Abre una terminal y ejecuta los siguientes comandos para generar la biblioteca cliente de C#. El nombre de paquete predeterminado para la biblioteca cliente generada es Swagger.IO. Estos comandos generan las bibliotecas cliente con sus respectivos nombres de API como nombre del paquete en lugar de Swagger.IO.

    • En C:\\SwaggerToCL, crea un archivo JSON llamado csharpConfig.json, abre un editor y añade el siguiente código. Para packageName, usa el mismo nombre de la API para la que quieres generar la biblioteca cliente:
    {"packageName":"SellingPartnerAPI.SellerAPI","targetFramework":"v4.7.2"}

    Ejecute este comando para generar código C# con un nombre de paquete 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 generar código en 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

    El SDK se crea en C:\\SwaggerToCL\\Sellers_CsharpCL. El siguiente paso es escribir la aplicación real y conectarse a la SP-API mediante el SDK de C# generado.

Paso 3. Conéctate a la API del socio vendedor mediante el SDK de C# generado

  1. En el IDE de Visual Studio, navegue hasta la biblioteca generada Vendedores_CSharpCL carpeta y abre el .sln archivo. El .sln el archivo del paquete tendrá el nombre indicado en Paso 2. Genere un SDK de C# con autenticación e intercambio de tokens LWA. En este ejemplo, el nombre del archivo del paquete es SellingPartnerAPI.SellerAPI.sln.

  2. Haga clic derecho en el SellingPartnerAPI.SellerAPI archivar y seleccionar Añadir > Referencias.

  3. En el Referencias ventana, elige Navegar, navegue hasta sellingpartner-api-aa csharp/src/Amazon.SellingPartnerAPIAA/bin/Debug/netstandard2.0 y elige Amazon.SellingPartnerAPIAA.dll.

  4. Repita los pasos 1 a 3 para el SellingPartnerAPI.SellerAPI.Test archivo.

  5. Ve a la carpeta Sellers_CsharpCL de la biblioteca que has generado, haz clic con el botón derecho del ratón en el archivo SellingPartnerAPI.SellerAPI, selecciona Opciones > General y cambia el marco de trabajo de destino a .net Framework v4.7 o superior.

  6. Repita el paso 5 para SellingPartnerAPI.SellerAPI.Test archivo.

  7. Haga clic derecho en el SellingPartnerAPI.SellerAPI archiva y elige Gestione los paquetes NuGet. Asegúrese de tener las siguientes versiones de paquetes (de lo contrario, instale los paquetes NuGet respectivos):

    • JsonSubTypes 1.2.0 o todos
    • Newtonsoft.json 12.0.3 o todos
    • RestSharp 106.12.0
    • RateLimiter 2.2.0 o más reciente (esto también instalará ComposableAsync.Core)
  8. Haga clic derecho en el SellingPartnerAPI.SellerAPI.Test archiva y elige Gestione los paquetes NuGet. Instala el Nunit 2.6.4 paquete.

    📘

    Instalación manual de los paquetes NuGet

    En algunos casos (por ejemplo, utilizando IOS), aparecen las versiones requeridas en los paquetes NuGet, pero puedes encontrarte con un error. En este caso, debes añadir manualmente los paquetes desde la carpeta de paquetes del sistema de archivos:

    1. En Sellers_CsharpCL, ve a la carpeta .sln de la biblioteca que has generado y abre el archivo {{2}}.
    2. Haga clic derecho en el SellingPartnerAPI.SellerAPI archivar y seleccionar Añadir > Referencias.
    3. En el Referencias ventana, elige Navegar, navegue hasta sellingpartner-api-aa csharp/src/Amazon.SellingPartnerAPIAA/bin/Debug/netstandard2.0, elija la carpeta de la biblioteca cliente generada (por ejemplo, Sellers_CsharpCL), luego elige paquetes y añada el paquete en el que se produce el error.
  9. En el SellingPartnerAPI.SellerAPI.Test > Api carpeta, abre el [Modelname]Tests.cs archiva y añade el siguiente 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 de instancia:

NombreDescripciónObligatorio
ClientIdTu identificador de cliente de LWA. Para obtener más información, consulta Cómo ver la información y las credenciales de tu aplicación.
ClientSecretYour LWA client secret. For more information, refer to Viewing your application information and credentials
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.
No. Incluye Scopes si la operación a la que llamas en el paso siguiente es una operación sin concesión. Si incluyes Scopes, no incluyas RefreshToken.
EndpointEl URI del servidor de autenticación de LWA.
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 ver la salida del código, debe convertirlo en una aplicación de consola. Para hacerlo, haga clic con el botón derecho en SellingPartnerAPI.SellerAPI.Test archiva y elige Opciones.

  2. En el Opciones de proyecto ventana, en el panel de navegación izquierdo, expanda Construir, luego elige General. En el Generación de código sección, elige Objetivo de compilación y selecciona Ejecutable con GUI. Elige BIEN.

  3. Cree y ejecute el proyecto.

Solución de problemas de un SDK de C#

Errores de IRestRequest: "RestSharp Version=105.0.0.0. Culture=neutral. PublicKevToken=598062e77f915f75 se define en un ensamblado al que no se hace referencia. Debes añadir una referencia al ensamblado {{2}}"

Selecciona esta opción para ampliar la respuesta. Actualiza el paquete {{0}} a la versión 106.12.0.0. Consulta la referencia para asegurarte de que la versión 106.12 se ha actualizado correctamente. Si sigue mostrando 105.0.0.0, elimina la versión anterior de la referencia y añade manualmente el paquete 106.12.0.0 desde la carpeta de paquetes que contiene la biblioteca cliente generada.

"No se puede encontrar el tipo o nombre del espacio de nombres {{0}} (¿falta una directiva de uso o una referencia de ensamblaje?)"

Selecciona esta opción para ampliar la respuesta.

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. En la ventana de referencias de .Net Assembly, elige browse**.

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

"Mensaje: No se ha podido cargar el tipo de campo SellingPartnerAPI.servicesApi.Client.ApiClient:rateLimiter (3) debido a: No se ha podido cargar el archivo o el ensamblado ComposableAsync.Core, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null o una de sus dependencias".

Selecciona esta opción para ampliar la respuesta.

Si recibes este error después de compilar y ejecutar el código, entonces el paquete de dependencias ComposableAsync.Core se ha descargado pero no se ha incluido como referencia. Asegúrate de añadir manualmente la dll como referencia.

Problemas de asignación con modelos

Selecciona esta opción para ampliar la respuesta.

El modelo ItemAsin se generó con el tipo JsonObject, pero la cadena requerida ItemAttributes requiere JsonObjectAttribute. Puedes usar este comando, que usa la API Artículos del catálogo , para importar la asignación requerida para los 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(): no se ha encontrado ningún método adecuado para sustituir".

Selecciona esta opción para ampliar la respuesta.

Modifica la palabra clave override con virtual. Declara los métodos como virtual para que puedan anularse.

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

"El nombre BaseValidate no existe en el contexto actual"

Selecciona esta opción para ampliar la respuesta.

Quita los comentarios de los métodos mencionados en la clase:

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

¿Te ha ayudado esta página?