Guía de casos de uso Reports API v2020-09-04
Cómo permitir que los sellers obtengan reportes de Amazon que los ayuden a administrar su selling business.
Versión API: 2020-09-04
¿Qué es la API de reporte?
A partir del 27 de junio de 2023 , la Selling Partner API para Reports v2020-09-04 ya no estará disponible y todas las llamadas fallarán. Las integraciones que dependen de la API de Reports deben migrar a Reports v2021-06-30 para evitar la interrupción del servicio.
Terminología
- Cipher block chaining . El Cipher block chaining es un algoritmo que utiliza un cifrado de bloques para proporcionar seguridad de la información, como confidencialidad o autenticidad. Este algoritmo utiliza un vector de inicialización y una clave para cifrar los datos.
- URL prefirmada de Amazon S3 . Una URL para un bucket de S3 desde el que puede descargar un objeto sin permisos ni credenciales de seguridad de AWS. En algunos casos, el objeto puede comprimirse, en cuyo caso
compressionAlgorithm
se devuelve además de la URL. La URL caduca después de 5 minutos.
Tutorial: Solicitar y recuperar un reporte
Estos son los pasos de alto nivel para solicitar un reporte:
-
Llama a operación
createReport
, especificando el reporte type y los marketplaces que está solicitando, y cualquier parámetro opcional que desee.Amazon recibe la solicitud de reporte. Si la operación tiene éxito, la respuesta incluye un
reportId
. -
Llame periódicamente la operación
getReport
, pasando el valorreportId
del paso anterior, hasta el valorprocessingStatus
El valor en la respuesta indica que el procesamiento ha terminado. El procesamiento habrá terminado cuando el valorprocessingStatus
es igualCANCELLED
,DONE
oFATAL
. En este punto, la respuesta incluye unreportDocumentId
si hay datos de reporte disponibles. -
Llame a la operación getReportDocument, pasando el valor
reportDocumentId
del paso anterior.Amazon devuelve una URL preestablecida para la ubicación del documento del reporte junto con los detalles de cifrado. En algunos casos, el objeto puede comprimirse, en cuyo caso
compressionAlgorithm
se devuelve además de la URL. La URL caduca después de 5 minutos. -
Descargar y descifrar el reporte.
requisitos previos
Para completar este tutorial, necesitará:
- Un reporte type para solicitar. Consulte los valores de reportType para obtener una lista de los reporte types disponibles.
- Autorización del seller para el que está llamando. Consulte la Guía para desarollador de la Selling Partner API para obtener más información.
- Una comprensión del cifrado del lado del cliente mediante el Cipher block chaining (CBC). Para definiciones, consulte Terminología .
- Para usar el código de ejemplo en esta guía, una instalación funcional de Java Development Kit (JDK), incluida la biblioteca javax.crypto.
Pasos
- Solicitar un reporte
- Confirme que el procesamiento del reporte se ha completado
- Recuperar el reporte
Paso 1. Solicitar un reporte
Solicite un reporte especificando el reporte type y los marketplaces que está solicitando, y cualquier parámetro opcional.
- Llama la operación
createReport
, pasando los siguientes parámetros:
Cuerpo de la solicitud:
Nombre | Descripción | Requerido |
---|---|---|
reportOptions | Información adicional pasada a reporte. Esto varía según el reporte type. Tipo: ReportOptions | No |
reportType | El reporte type. Para obtener más información, consulte valores de reporte type . Tipo: string | Sí |
dataStartTime | El inicio de un rango de fecha y hora, en formato de fecha y hora ISO 8601, que se utiliza para seleccionar los datos para informar. El valor predeterminado es ahora. El valor debe ser anterior o igual a la fecha y hora actual. No todos los reporte types hacen uso de esto. Tipo: string (date-time) | No |
dataEndTime | El final de un rango de fecha y hora, en formato de fecha y hora ISO 8601, utilizado para seleccionar los datos para informar. El valor predeterminado es ahora. El valor debe ser anterior o igual a la fecha y hora actual. No todos los reporte types hacen uso de esto. Tipo: string (date-time) | No |
marketplaceIds | Una lista de identificadores de marketplace. El contenido del documento del reporte incluirá datos de todos los marketplaces especificados, a menos que el reporte type indique lo contrario. Tipo: array | Sí |
Ejemplo de solicitud:
POST https://sellingpartnerapi-na.amazon.com/reports/2020-09-04/reports
{
"reportType": "GET_MERCHANT_LISTINGS_ALL_DATA",
"dataStartTime": "2019-12-10T20:11:24.000Z",
"marketplaceIds": [
"A1PA6795UKMFR9",
"ATVPDKIKX0DER"
]
}
Respuesta
Una respuesta exitosa incluye la siguiente propiedad:
Nombre | Descripción |
---|---|
reportId | El identificador del reporte. Este identificador es único solo en combinación con una seller ID. Tipo: string |
Ejemplo de respuesta:
{
"payload":
{
"reportId": "ID323"
}
}
Paso 2. Confirme que el procesamiento del reporte se ha completado
Después de llamar al createReport
Amazon recibe la solicitud y comienza a procesar el reporte. A continuación, debe confirmar que el procesamiento se ha completado antes de continuar.
Llame periódicamente al getReport
, pasando el valor reportId
del paso anterior, hasta el valor processingStatus
El valor en la respuesta indica que el procesamiento ha terminado. El procesamiento habrá terminado cuando el valor processingStatus
es igual CANCELLED
, DONE
o FATAL
. En este punto, la respuesta incluye un reportDocumentId
si hay datos de reporte disponibles.
Aquí están los valores processingStatus
que confirman que el procesamiento ha terminado:
CANCELLED
- El reporte fue cancelado. Hay dos formas de cancelar un reporte: una solicitud de cancelación explícita antes de que el reporte comience a procesarse o una cancelación automática si no hay datos para devolver.DONE
- El reporte ha completado el procesamiento y unreportDocumentId
está disponible.FATAL
- El reporte se detuvo debido a un error fatal y unreportDocumentId
puede estar presente. Si está presente, el reporte representado por el valorreportDocumentId
puede explicar por qué finalizó el procesamiento del reporte.
La siguiente processingStatus
Los valores indican que el procesamiento no ha finalizado y debe continuar llamando a la operación getReport hasta que la operación devuelva un processingStatus
de CANCELLED
, DONE
o FATAL
.
IN_PROGRESS
- El reporte se está procesando.IN_QUEUE
- El reporte aún no ha comenzado a procesarse. Puede estar esperando otroIN_PROGRESS
reporte.
Nota : la operación getReport solo sirve información para solicitudes de reportes programados o bajo demanda que se crearon en los últimos 90 días.
Parámetro de ruta:
Nombre | Descripción | Requerido |
---|---|---|
reportId | El identificador del reporte. Este identificador es único solo en combinación con una seller ID. Tipo: string | Sí |
Ejemplo de solicitud:
GET https://sellingpartnerapi-na.amazon.com/reports/2020-09-04/reports/ID323
Respuesta
Una respuesta exitosa incluye lo siguiente:
Nombre | Descripción | Esquema |
---|---|---|
payload | La payload para el valor getReport operación. | Report |
Ejemplo de respuesta
{
"payload": {
"reportId": "ID323",
"reportType": "GET_MERCHANT_LISTINGS_ALL_DATA",
"dataStartTime": "2019-12-11T13:47:20.677Z",
"dataEndTime": "2019-12-12T13:47:20.677Z",
"createdTime": "2019-12-10T13:47:20.677Z",
"processingStatus": "DONE",
"processingStartTime": "2019-12-10T13:47:20.677Z",
"processingEndTime": "2019-12-12T13:47:20.677Z",
"reportDocumentId": "DOC-b8b0-4226-b4b9-0ee058ea5760"
}
}
Paso 3. Recuperar el reporte
Para recuperar el reporte, consulte Cómo recuperar un reporte .
Tutorial: programar y recuperar reporte
Puede programar solicitudes de reporte para que se envíen periódicamente, utilizando el valor createReportSchedule
operación. Utilice la enumeración de período para especificar el período de tiempo. Para identificar qué reporte se pueden programar, revise los valores de reporte type en la documentación de la Selling Partner API.
Estos son los pasos de alto nivel para programar y recuperar reporte:
-
Llama la operación
createReportSchedule
para crear un cronograma para enviar periódicamente solicitudes de reporte. EspecificarreportType
,marketplaceIds
y valoresperiod
y cualquier parámetro opcional. Para valores dereportType
, consulte valores de reporte type. Para valoresperiod
, véase enumeración de períodos .Nota : si ya existe un cronograma de reporte con el mismo reporte type e ID de marketplace, se cancelará y se reemplazará con este. De lo contrario, se creará un nuevo calendario de reporte.
-
Llame periódicamente al
getReports
operación usando un intervalo que es similar al programa que configuró en el paso anterior.Si una llamada a la operación getReports tiene éxito, la respuesta contiene una array de información del reporte, que incluye
reportDocumentId
valores si los datos del reporte están disponibles.Nota : la operación getReports solo sirve información para solicitudes de reportes programados o bajo demanda que se crearon en los últimos 90 días.
-
Para cada
reportDocumentId
:-
Llama la operación
getReportDocument
, pasando el valorreportDocumentId
.Amazon devuelve una URL preestablecida para la ubicación del documento del reporte junto con los detalles de cifrado. En algunos casos, el objeto puede comprimirse, en cuyo caso
compressionAlgorithm
se devuelve además de la URL. La URL caduca después de 5 minutos. -
Descargar y descifrar el reporte.
-
requisitos previos
Para completar este tutorial, necesitará:
- Un reporte type para programar. Consulte los valores de reportType para obtener una lista de los reporte types disponibles.
- Autorización del seller para el que está llamando. Consulte la Guía para desarolladores de la Selling Partner API para obtener más información.
- Una comprensión del cifrado del lado del cliente mediante el Cipher block chaining (CBC). Para definiciones, consulte Terminología .
- Para usar el código de ejemplo en esta guía, una instalación funcional de Java Development Kit (JDK), incluida la biblioteca javax.crypto.
Pasos
- Crear un cronograma para las solicitudes de reporte
- Recuperar periódicamente información sobre los reportes programados
- Recuperar los reporte
Paso 1: Cree un cronograma para las solicitudes de reporte
Llama la operación createReportSchedule
para crear un cronograma para enviar solicitudes de reporte, especificando el valor reportType
, markeplaceIds
, y period
valores y cualquier parámetro opcional. Consulte los valores de reportType para obtener una lista de los reporte types disponibles.
- Llama la operación
createReportSchedule
y pasar los siguientes parámetros:
Parámetro del Body:
Nombre | Descripción | Requerido |
---|---|---|
reportType | El tipo de reporte. Tipo: string | Sí |
marketplaceIds | Una lista de identificadores de marketplace para el calendario de reporte. Tipo: array | Sí |
reportOptions | Información adicional pasada a reporte. Esto varía según el reporte type. Tipo: ReportOptions | No |
period | Uno de un conjunto de períodos ISO 8601 predefinidos que especifica la frecuencia con la que se debe crear un reporte. Tipo: enum ( Period ) | Sí |
nextReportCreationTime | La fecha y la hora en que la programación creará su próximo reporte, en formato de fecha y hora ISO 8601. Tipo: string (date-time) | No |
Ejemplo de solicitud:
POST https://sellingpartnerapi-na.amazon.com/reports/2020-09-04/schedules
{
"reportType": "GET_XML_BROWSE_TREE_DATA",
"period": "P2D",
"marketplaceIds":["ATVPDKIKX0DER"]
}
Respuesta
Una respuesta exitosa incluye lo siguiente:
Nombre | Descripción | Esquema |
---|---|---|
payload | La payload para la operación createReportSchedule. | CreateReportScheduleResult |
Ejemplo de respuesta:
{
"payload":
{
"reportScheduleId": "ID323"
}
}
Paso 2: recuperar periódicamente información sobre los reportes programados
Llame periódicamente la operación getReports
usando un intervalo que es similar al horario que configuró. Querrá intentar programar estas llamadas para que ocurran después de que los reportes programados probablemente se hayan completado.
- Llama la operación
getReports
periódicamente para recuperar información sobre los reportes programados, pasando los siguientes parámetros:
Parámetros de query:
Nombre | Descripción | Requerido |
---|---|---|
reportTypes | Una lista de reporte types usados para filtrar reporte. Cuando reportTypes se proporciona, también se pueden proporcionar los otros parámetros de filtro (processingStatuses, marketplaceIds, createdSince, createdUntil) y pageSize.Cualquiera reportTypes o nextToken se requiere.Tipo: array | No |
processingStatuses | Una lista de estados de procesamiento utilizados para filtrar reporte. Tipo: < enum ( ProcessingStatuses ) > array | No |
marketplaceIds | Una lista de identificadores de marketplace utilizados para filtrar reporte. Los reporte devueltos coincidirán con al menos uno de los marketplaces que especifique. Tipo: array | No |
pageSize | El número máximo de reporte para devolver en una sola llamada. Tipo: Integer | No |
createdSince | La primera fecha y hora de creación del reporte para que los reporte se incluyan en la respuesta, en formato de fecha y hora ISO 8601. El valor predeterminado es hace 90 días. Los reporte se conservan durante un máximo de 90 días. Tipo: string (date-time) | No |
createdUntil | La última fecha y hora de creación del reporte para que los reporte se incluyan en la respuesta, en formato de fecha y hora ISO 8601. El valor predeterminado es ahora. Tipo: string (date-time) | No |
nextToken | Un token de string devuelto en la respuesta a su solicitud anterior. nextToken se devuelve cuando el número de resultados supera el valor de tamaño de página especificado. Para obtener la siguiente página de resultados, llame a la operación getReports e incluya este token como el único parámetro. Especificar nextToken con cualquier otro parámetro hará que la solicitud falle. Tipo: string | No |
Ejemplo de solicitud:
GET https://sellingpartnerapi-na.amazon.com/reports/2020-09-04/reports?reportTypes=GET_XML_BROWSE_TREE_DATA
Respuesta
Una respuesta exitosa incluye lo siguiente:
Nombre | Descripción | Esquema |
---|---|---|
payload | La payload para la operación getReports. | ReportList |
ficha siguiente | Devuelto cuando el número de resultados supera el tamaño de página. Para obtener la siguiente página de resultados, llame a getReports con este token como único parámetro. | string |
La array de payload en la respuesta contiene uno objeto Report
consulte Report
para cada reporte procesado y cada objeto de reporte contiene el archivo reportDocumentId
.
Nota : se devuelve información sobre los reportes programados y a pedido. Para identificar los reportes programados, busque la presencia de un reportScheduleId
en el valor Report
objeto en la respuesta. El reportScheduleId
indica qué horario envió esta solicitud de reporte.
- Para cada
reportDocumentId
, salva el valorreportDocumentId
y vaya al paso 3 para recuperar el reporte.
Ejemplo de respuesta:
{
"nextToken": "VGhpcyB0b2tlbiBpcyBvcGFxdWUgYW5kIGludGVudGlvbmFsbHkgb2JmdXNjYXRlZA==",
"payload": [
{
"reportType": "GET_XML_BROWSE_TREE_DATA",
"processingEndTime": "2020-09-23T22:52:59+00:00",
"processingStatus": "DONE",
"marketplaceIds": ["ATVPDKIKX0DER"],
"reportDocumentId": "FOO_eae0a7b7-6c33-4191-ad1a-f31ac1ae0ce3",
"reportId": "ID222",
"dataEndTime": "2020-09-23T22:52:24+00:00",
"createdTime": "2020-09-23T22:52:43+00:00",
"processingStartTime": "2020-09-23T22:52:49+00:00",
"reportScheduleId": "ID323",
"dataStartTime": "2020-09-23T22:37:24+00:00"
}
]
}
Paso 3: recuperar el reporte
Para recuperar un reporte, consulte Cómo recuperar un reporte .
Cómo recuperar un reporte
Obtenga su reporte obteniendo primero la información requerida para recuperar un documento de reporte y luego descargando y descifrando el reporte.
Pasos
Paso 1. Obtener la información necesaria para recuperar el reporte
Llame a la operación getReportDocument para obtener la información necesaria para recuperar el contenido de un documento de reporte. Esto incluye una URL preestablecida para el documento del reporte, así como la información necesaria para descifrar el contenido del documento. En algunos casos, el objeto puede comprimirse, en cuyo caso compressionAlgorithm
se devuelve además de la URL. La URL caduca después de 5 minutos.
- Llama la operación
getReportDocument
, pasando el siguiente parámetro:
Parámetro de ruta:
Nombre | Descripción | Requerido |
---|---|---|
reportDocumentId | El identificador del documento de reporte. Tipo: string | Sí |
Ejemplo de solicitud:
GET https://sellingpartnerapi-na.amazon.com/reports/2020-09-04/documents/DOC-b8b0-4226-b4b9-0ee058ea5760
Respuesta
Una respuesta exitosa incluye los siguientes elementos:
Nombre | Descripción |
---|---|
reportDocumentId | El identificador del documento de reporte. Este identificador es único solo en combinación con una seller ID. |
URL | Una URL prefirmada para el documento del reporte. Si compressionAlgorithm no se devuelve, puede descargar el reporte directamente desde esta URL. Esta URL caduca después de 5 minutos.Tipo: string |
encryptionDetails | Detalles de cifrado necesarios para descifrar el contenido de un documento de reporte. Tipo: ReportDocumentEncryptionDetails |
compressionAlgorithm | Si el contenido del documento del reporte se comprimió, el compressionAlgorithm utilizado se devuelve en esta propiedad y debe descomprimir el reporte cuando lo descarga. De lo contrario, puede descargar el reporte directamente. Consulte el Paso 2. Descargue y descifre el reporte en la guía de casos de uso, donde se proporciona un código de ejemplo. Tipo: enum ( compressionAlgorithm ) |
Ejemplo de respuesta:
{
"payload": {
"reportDocumentId": "DOC-b8b0-4226-b4b9-0ee058ea5760",
"url": "https://d34o8swod1owfl.cloudfront.net/SampleResult%2BKey%3DSample%2BINITVEC%3D58+fa+bf+a7+08+11+95+0f+c1+a8+c6+e0+d5+6f+ae+c8",
"encryptionDetails": {
"standard": "AES",
"initializationVector": "58 fa bf a7 08 11 95 0f c1 a8 c6 e0 d5 6f ae c8",
"key": "Sample"
}
}
}
- Salva el valor
key
,initializationVector
,url
, ycompressionAlgorithm
(propiedad opcional) para usar en el Paso 2.
Paso 2. Descargar y descifrar el reporte
Deberá descargar y descifrar el reporte utilizando la información devuelta en el paso anterior. El siguiente código de ejemplo junto con las clases proporcionadas en el Selling Partner API Documents Helper pueden ayudar. También puede usar los principios demostrados en el código de ejemplo y en el código del asistente de documentos SP-API para guiarlo en la creación de aplicaciones en otros lenguajes de programación.
-
Utilice lo siguiente como entradas para el código de ejemplo:
- Los valores de
key
,initializationVector
,url
ycompressionAlgorithm
opcional del paso anterior son argumentoskey
,initializationVector
,url
, ycompressionAlgorithm
opcionales en el métododownloadAndDecrypt
de la claseDownloadExample
.
- Los valores de
Nota : es responsabilidad del desarollador mantener siempre el cifrado en reposo. El contenido de reporte sin cifrar nunca debe almacenarse en el disco, ni siquiera temporalmente, porque los reporte pueden contener información confidencial. El código de ejemplo que proporcionamos demuestra este principio.
Código de ejemplo (Java)
// DownloadExample.java
import java.io.BufferedReader;
import java.io.IOException;
import com.amazon.spapi.documents.CompressionAlgorithm;
import com.amazon.spapi.documents.DownloadBundle;
import com.amazon.spapi.documents.DownloadHelper;
import com.amazon.spapi.documents.DownloadSpecification;
import com.amazon.spapi.documents.exception.CryptoException;
import com.amazon.spapi.documents.exception.HttpResponseException;
import com.amazon.spapi.documents.exception.MissingCharsetException;
import com.amazon.spapi.documents.impl.AESCryptoStreamFactory;
public class DownloadExample {
final DownloadHelper downloadHelper = new DownloadHelper.Builder().build();
// The key, initializationVector, url, and compressionAlgorithm are obtained from the response to
// the getReportDocument operation.
public void downloadAndDecrypt(String key, String initializationVector, String url, String compressionAlgorithm) {
AESCryptoStreamFactory aesCryptoStreamFactory =
new AESCryptoStreamFactory.Builder(key, initializationVector).build();
DownloadSpecification downloadSpec = new DownloadSpecification.Builder(aesCryptoStreamFactory, url)
.withCompressionAlgorithm(CompressionAlgorithm.fromEquivalent(compressionAlgorithm))
.build();
try (DownloadBundle downloadBundle = downloadHelper.download(downloadSpec)) {
// This example assumes that the downloaded file has a charset in the content type, e.g.
// text/plain; charset=UTF-8
try (BufferedReader reader = downloadBundle.newBufferedReader()) {
String line;
do {
line = reader.readLine();
// Process the decrypted line.
} while (line != null);
}
}
catch (CryptoException | HttpResponseException | IOException | MissingCharsetException e) {
// Handle exception here.
}
}
}
Mejores prácticas
Esperar cambios en los reporte
Amazon agrega periódicamente nuevos campos y valores de campo a los reporte. Asegúrese de que cualquier analizador de reporte que incorpore a sus aplicaciones pueda manejar correctamente este tipo de actualizaciones de reporte.
No confíe en la estructura de identificación del documento
No debe confiar en el formato y la estructura de los identificadores de documentos. El formato y la estructura están sujetos a cambios.
Updated over 1 year ago