28
Servicios web de distribución digital (DDWS) GetInvoice - Manual del servicio

Servicios web de distribución digital (DDWS) GetInvoice - Manual … · documento llamado Guía de programación, se ofrece un ejemplo de aplicación cliente (escrita en lenguaje

  • Upload
    buithu

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Servicios web de distribución digital (DDWS) GetInvoice - Manual del servicio

2 | Manual de referencia del servicio web

CONTENIDO Historial de revisiones ...................................................................................................................................... 3

1 Introducción .............................................................................................................................................. 4

1.1 Descripción general .......................................................................................................................... 4

1.2 Documentación complementaria ....................................................................................................... 4 2 Para empezar ........................................................................................................................................... 4

3 Descripción general del servicio GetInvoice .............................................................................................. 5

3.1 GetInvoiceList ................................................................................................................................... 7

3.2 GetInvoiceDetails ............................................................................................................................. 7

3.3 Ventajas del servicio GetInvoice ....................................................................................................... 7

4 Información de referencia del servicio GetInvoice ...................................................................................... 8 4.1 Una nota sobre varios CSN .............................................................................................................. 8

4.2 Esquema de solicitud ........................................................................................................................ 9

4.3 Esquema de respuesta ..................................................................................................................... 9

4.3.1 GetInvoiceList ............................................................................................................................... 9

4.3.2 GetInvoiceDetails........................................................................................................................ 10

4.4 Esquema de error ........................................................................................................................... 12 4.5 Mensaje de solicitud ....................................................................................................................... 12

4.5.1 Mensaje de solicitud: GetInvoiceList ........................................................................................... 13

4.5.2 Mensaje de solicitud: GetInvoiceDetails ...................................................................................... 14

4.6 Mensaje de respuesta..................................................................................................................... 14

4.6.1 Mensaje de respuesta: GetInvoiceList ......................................................................................... 15 4.6.2 Mensaje de respuesta: GetInvoiceDetails.................................................................................... 15

4.7 Mensajes de error ........................................................................................................................... 19

4.7.1 Ejemplo de respuesta de error .................................................................................................... 21

5 Apéndice ................................................................................................................................................ 21

5.1 Código en C# para introducir varios CSN ........................................................................................ 21

5.1.1 Programa principal ...................................................................................................................... 21 5.1.2 Clase Utils .................................................................................................................................. 23

5.1.3 POCO......................................................................................................................................... 26

3 | Manual de referencia del servicio web

Historial de revisiones Versión Fecha Autor Comentarios 2.1 22/10/2015 AR Se ha agregado la

sección de historial de revisiones.

2.2 14/12/2015 AR Se han añadido los campos adsk_vat_number, recurring_po, total_amount en invoice_header para la respuesta de GetInvoiceDetails en la sección 4.3.

2.3 22/12/2015 AR Se ha cambiado la longitud máxima de purchase_order_number a 35 caracteres en la sección 4.2.

2.4 23/02/2016 RL Se han añadido los campos bill_per_start_dt y bill_per_end_dt a invoice_items.

2.5 23/02/2016 ER Se ha actualizado la descripción de contract_end.

4 | Manual de referencia del servicio web

1 Introducción 1.1 Descripción general

La plataforma de servicios web de distribución digital (DDWS) es una solución de automatización que permite a nuestros distribuidores realizar pedidos directamente a Autodesk; este proceso requiere muy pocos pasos por parte de los distribuidores y ninguno por parte de Autodesk. Esta nueva función de negocio permitirá realizar verdaderas transacciones de servicio web B2B entre los distribuidores y Autodesk.

Para que los distribuidores disfruten de una implementación eficaz de la plataforma de servicios digitales de Autodesk, las filiales deberán familiarizarse con los servicios web de REST, OAuth y JSON. En un documento llamado Guía de programación, se ofrece un ejemplo de aplicación cliente (escrita en lenguaje Ruby) que ayudará a los desarrolladores de las filiales a usar la API del servicio digital.

1.2 Documentación complementaria • Guía para desarrolladores de distribuidores de Autodesk: esta guía ayudará a los

distribuidores en su proceso de incorporación y acceso a los servicios de DDWS. La guía sirve también para presentar a los distribuidores la plataforma de servicios digitales de Autodesk, con instrucciones paso a paso que les guiarán a través de las actividades iniciales necesarias para la integración.

• Documentación de la API de autenticación: este documento guía a los distribuidores a través del proceso de generación de credenciales, firmas y tokens de acceso necesarios para utilizar las API del servicio. También contiene información para el desarrollo de la aplicación de integración de un distribuidor. Proporciona información básica acerca de la integración del servicio web y muestra el desarrollo de una aplicación típica.

2 Para empezar

Como parte del proceso de incorporación, los distribuidores deberán estar asociados con un único número específico del cliente (CSN, del inglés Customer Specific Number) y su aplicación deberá estar registrada con Autodesk. Para obtener más información sobre el proceso de incorporación, consulte la Guía para desarrolladores de distribuidores de Autodesk.

5 | Manual de referencia del servicio web

3 Descripción general del servicio GetInvoice Pueden existir casos en los que la entrada realizada por el solicitante tenga un intervalo de fechas (fecha de inicio y fecha de fin). En este caso, el servicio no puede proporcionar todos los detalles de la factura para un determinado periodo de tiempo, ya que existe la posibilidad de tener una gran cantidad de facturas a lo largo de cualquier período determinado.

Existen dos operaciones definidas en este servicio para la extracción de facturas:

• getInvoiceList • getInvoiceDetails

El diagrama anterior es una descripción del servicio getInvoice. Al implementar la plataforma de servicios digitales de Autodesk, puede realizar sus procesos de forma más eficaz. La siguiente serie de gráficos muestra una experiencia del usuario con la tienda web. Esta primera captura de pantalla muestra cómo se va a llamar la operación getInvoiceList. Los clientes introducirán un intervalo de fechas para obtener las facturas correspondientes a un determinado periodo. En función de esta entrada, se mostrarán al cliente todas las facturas que caigan dentro del intervalo de fechas.

6 | Manual de referencia del servicio web

Después de recibir la lista de facturas, los clientes pueden obtener detalles de las facturas para un determinado número de factura, número de pedido de compra o número de pedido de ventas, tal como se muestra en la siguiente captura de pantalla.

7 | Manual de referencia del servicio web

3.1 GetInvoiceList La finalidad de esta operación es obtener la lista de facturas de un sistema administrativo si la entrada solo incluye un intervalo de fechas. Una vez que el solicitante reciba la respuesta, llamará a getInvoiceDetails usando como entrada el número de factura, el número de pedido de compra o el número de pedido de ventas. Las siguientes entradas son necesarias para llamar al servicio:

1. customer_number

2. invoice_date_from

3. invoice_date_to

3.2 GetInvoiceDetails

La finalidad de esta operación es obtener los detalles de las facturas para una entrada determinada. Para llamar a esta operación, se pueden usar los siguientes conjuntos de entradas:

1. customer_number y purchase_order_number/ invoice_number / sales_order_number

Si los tres parámetros (po_number, invoice_number y order_number) están presentes en una solicitud de servicio, la prioridad de los criterios de búsqueda se definirá de la siguiente manera:

1. invoice_number (alta) 2. purchase_order_number 3. sales_order_number (baja)

Nota: Solo se rellenará una factura válida como parte de la respuesta de la API de GetInvoice.

3.3 Ventajas del servicio GetInvoice 1. Un servicio web de REST optimizado que se puede consumir fácilmente desde cualquier aplicación a

través de una conexión HTTP(s). 2. La capacidad de recuperar la información de la factura por distribuidor cuando sea necesario, lo que

permite ahorrar el esfuerzo de buscar facturas en formato PDF en mensajes de correo electrónico o en datos de EDI IDoc.

3. El servicio ofrece a los distribuidores la flexibilidad de buscar facturas dentro de determinados intervalos de fecha o mediante los números de las facturas, los números de pedidos de compra o los números de ventas.

4. Los distribuidores pueden personalizar los datos de las facturas y agregarlos a su sistema interno según sea necesario.

8 | Manual de referencia del servicio web

4 Información de referencia del servicio GetInvoice 4.1 Una nota sobre varios CSN

El servicio GetInvoice solo admite un único customer_number (CSN) por solicitud. Si un distribuidor tiene varios CSN, entonces ese distribuidor debería tener la capacidad de llamar al servicio varias veces para obtener la información correspondiente. Una forma de hacer esto podría ser programar un bucle en la aplicación de conexión que llame al servicio GetInvoice una vez para cada uno de los CSN disponibles. Es importante que dicha secuencia de comandos también gestione la generación de credenciales y tokens de acceso para cada llamada. Un ejemplo completo de dicha secuencia de comandos se puede encontrar en la sección Apéndice de este Manual de referencia del servicio. A continuación, se incluye el segmento relevante de dicho ejemplo. // Looping through each CSN var container = new List<ResponseContainer>(); foreach (var csn in credentials.CSNs) { // Signing partner's credentials var firstSignature = Utils.GetFirstSignature(credentials); // Sending request to OAuth server to generate an Access Token var tokenDetails = Utils.CallOAuthEndPoint(firstSignature); // Signing Access Token var secondSignature = Utils.GetSecondSignature(tokenDetails, credentials); // Calling Get Invoice WebService var endPoint = string.Format("https://enterprise-api-stg.autodesk.com/v1/invoices?customer_number={0}&invoice_date_from=2015-08-01&invoice_date_to=2015-09-01", csn); var invoice = Utils.GetInvoices(endPoint, secondSignature, csn); // Storing WebService's response var invoiceContainer = JsonConvert.DeserializeObject<InvoiceContainer>(invoice); container.Add(new ResponseContainer { CSN = csn, Response = invoiceContainer }); } // Writing response to file var json = JsonConvert.SerializeObject(container, Formatting.Indented); Utils.WriteJsonToFile(json);

9 | Manual de referencia del servicio web

4.2 Esquema de solicitud Los detalles de los parámetros del mensaje de solicitud están en la tabla siguiente para ambos getInvoiceList () y getInvoiceDetails().

Elemento Tipo de campo

Longitud/formato de entrada

Utilización

Elem

ento

s de

ge

tInvo

iceL

ist()

customer_number Cadena Longitud: máx. 10 caracteres Obligatorio

Invoice_date_from Fecha Formato: ISO 8601 AAAA-MM-DD Obligatorio

invoice_date_to Fecha Formato: ISO 8601 AAAA-MM-DD Obligatorio

Elem

ento

s de

ge

tIInv

oice

Det

ails

() customer_number Cadena Longitud: máx. 10 caracteres Obligatorio

invoice_number Cadena Longitud: 10 caracteres máx.

Es posible pasar uno o todos junto

con customer_number

purchase_order_number Cadena Longitud: máx. 35

caracteres

sales_order_number Cadena Longitud: máx. 10

caracteres

4.3 Esquema de respuesta

4.3.1 GetInvoiceList

Nombre de campo Descripción invoice_number Número de factura bill_to_customer Número de cliente 1 purchase_order_number Número de orden de compra del cliente invoice_date Fecha de publicación en el documento

Formato: ISO 8601 AAAA-MM-dd

transaction_type Descripción del tipo de documento invoice_total_amount Cantidad en la moneda del documento invoice_currency Clave de moneda account_doc_description Texto de elemento customer_po_number Número de orden de compra del cliente sales_order_number Número de documento de distribución y ventas

10 | Manual de referencia del servicio web

4.3.2 GetInvoiceDetails

Nombre de campo Descripción invoice_bankinfo

invoice_number Número de documento de distribución y ventas name Nombre del banco bank_keys Claves bancarias bank_number Número del banco bank_branchid Sucursal de banco bank_account_number Número de cuenta bancaria currency Moneda del banco

alternative_bank_account Número de cuenta del banco alternativo (para número de cuenta ambiguo)

lockbox_number Número de LockBox swiftcode Código SWIFT para pagos internacionales iban IBAN (número de cuenta bancaria internacional) bank_control_key Clave de control bancaria country País address Dirección del banco city Ciudad district Distrito region Región (estado, provincia, distrito) postalcode Código postal/Apdo. de correos tel_number Número de teléfono fax_number Número de teléfono de fax

additional Información adicional - Código ABI/Código CAB/GIRO/Código de clasificación, etc.

invoice_header invoice_date Fecha de facturación para índice e impresión de facturación

Formato: ISO 8601

invoice_number Número de documento de ventas y distribución po_date Fecha de orden de compra del cliente

Formato: ISO 8601

order_date Fecha de pedido de ventas Formato: ISO 8601 AAAA-MM-dd

purchase_order_number Número de pedido de compra del cliente customer_po_number Número de pedido de compra de la parte de destino transaction_type Car 20 ship_date Fecha

Formato: ISO 8601 AAAA-MM-dd

invoice_currency Moneda del documento SD sales_order_number Pedido contract_number Referencia interna deñ cliente o del proveedor

11 | Manual de referencia del servicio web

payment_term Términos de pago payment_due Fecha de vencimiento del pago

Formato: ISO 8601 AAAA-MM-dd

local_currency Clave de moneda exchange_rate Tasa de cambio para la determinación del precio vat_number Número de registro del IVA delivery_code Incoterms (parte 1) delivery_description Incoterms (parte 2) delivery_number Entrega numbers_item Número natural tax_amount Importe del impuesto en la moneda del documento tax_type Tipo de impuesto tax_rate Tasa de impuesto freight_charge Carga de mercancías tracking_number Número de hoja de ruta opportunity_id Identificador de la oportunidad extra_po_identifier Identificador de compra adicional invoice_amount Valor neto en la moneda del documento weight_total Peso total weight_uom Unidad de peso reserve_header_field Campo encabezado de copia de seguridad adsk_vat_number Número de registro del IVA de Autodesk recurring_po Pedido de compra para pedidos en la suscripción periódica total_amount Valor neto + impuestos

invoice_items invoice_number Documento de facturación line_number Elemento de facturación sku Número de material sku_description Texto corto para elemento de pedido de venta physical_media Valor de ELD de valor char invoice_currency Moneda del documento SD contract_start Fecha de inicio del contrato

Formato: ISO 8601 AAAA-MM-dd

contract_end Fecha de finalización del contrato Formato: ISO 8601 AAAA-MM-DD Para suscripciones periódicas (mensual y anual), se aplican las siguientes reglas. Cuando el contrato se cancela, el campo contract_end muestra la fecha de cancelación. Cuando el contrato está en vigor, el campo contract_end muestra el texto "Contrato de renovación automática".

quantity Cantidad facturada real

12 | Manual de referencia del servicio web

quantity_uom Unidad base de medida seats Número natural unit_price Precio por unidad unit_discount Descuento unitario net_value Valor neto del elemento de facturación en la moneda del

documento serial_number Número de serie current_serial_number Número de serie actual old_serial_number Número de serie anterior partner_subs_id Número de suscripción de distribuidor vat_description Texto de IVA reserve_item_field Campo elemento de copia de seguridad bill_per_start_dt Fecha de inicio del período de facturación bill_per_end_dt Fecha de finalización del período de facturación

invoice_partners invoice_number Número de documento de distribución y ventas line_number Artículo de facturación partner_type Tipo de cliente partner_number Número de cliente 1 contact_number Número de la persona de contacto partner_name Nombre street Número de la casa y la calle po_box Apdo. de correos city Ciudad postal_code Código postal pobox_postal_code Código postal del apdo. de correos country Nombre del país tel_number Primer número de teléfono fax_number Número de fax district Distrito region Región (estado, provincia, distrito) country_iso Código ISO del país

4.4 Esquema de error

Nombre de campo Descripción status Respuesta de confirmación: “OK”, “FAILED”, “ERROR” message Mensaje para fallo o errores transactionid ID único de transacción (combinación de número de factura y sello

horario)

4.5 Mensaje de solicitud En función de los parámetros de entrada, se ejecutará la operación getInvoiceList() o la operación getInvoiceDetails(). Si la entrada tiene parámetros “f echa de inicio” y “fecha de fin”, entonces se ejecutará getInvoiceList(). Si la entrada tiene el Número de orden de compra, Número de factura o Número de pedido de ventas, se invocará getInvoiceDetails(). A continuación, se incluyen solicitudes de ejemplo de ambas operaciones.

13 | Manual de referencia del servicio web

4.5.1 Mensaje de solicitud: GetInvoiceList

http://enterprise-api-stg.autodesk.com/v1/invoices?customer_number=5117338390&invoice_date_from=2014-06-01&invoice_date_to=2014-06-30 Message Headers Content-Type: application/json Authorization: Bearer <<Access Token>> CSN: <<CSN>> signature: <<Signed Access Token>> timestamp: <<Timestamp for the signed Access Token>>

14 | Manual de referencia del servicio web

4.5.2 Mensaje de solicitud: GetInvoiceDetails

4.6 Mensaje de respuesta

http://enterprise-api-stg.autodesk.com/v1/invoices?customer_number=5163338143&invoice_number=9052068717 Message Headers Content-Type: application/json Authorization: Bearer <<Access Token>> CSN: <<CSN>> signature: <<Signed Access Token>> timestamp: <<Timestamp for the signed Access Token>> OR http://enterprise-api-stg.autodesk.com/v1/invoices?customer_number=5163338143&invoice_number=9052068717&sales_order_number=7355393800 Message Headers Content-Type: application/json Authorization: Bearer <<Access Token>> CSN: <<CSN>> signature: <<Signed Access Token>> timestamp: <<Timestamp for the signed Access Token>> OR http://enterprise-api-stg.autodesk.com/v1/invoices?customer_number=5163338143&invoice_number=905206871&purchase_order_number=712100000424 Message Headers Content-Type: application/json Authorization: Bearer <<Access Token>> CSN: <<CSN>> signature: <<Signed Access Token>> timestamp: <<Timestamp for the signed Access Token>> OR http://enterprise-api-stg.autodesk.com/v1/invoices?customer_number=5163338143&invoice_number=9052068717&sales_order_number=7355393800&purchase_order_number=712100000424 Message Headers Content-Type: application/json Authorization: Bearer <<Access Token>> CSN: <<CSN>> signature: <<Signed Access Token>> timestamp: <<Timestamp for the signed Access Token>>

15 | Manual de referencia del servicio web

Nota: Autodesk enviará una respuesta con la siguiente estructura. Los distribuidores pueden cambiar el formato de la respuesta a distintas estructuras en función de sus necesidades.

4.6.1 Mensaje de respuesta: GetInvoiceList

{ "status": "OK", "transaction_id": "INV701765101433844843", "message": [ { "invoice_number": "9052238559", "purchase_order_number": "9833356789", "bill_to_customer": "5163338143", "invoice_date": "2014-06-11”, "customer_po_number": "", "transaction_type": "Invoice", "invoice_total_amount": 328.5, "invoice_currency": "USD", "account_doc_description": "", "sales_order_number": "7333403750" }, { "invoice_number": "9052158556", "purchase_order_number ": "7865345690", "bill_to_customer ": "5163268143", "invoice_date": "2014-06-24", "customer_po_number ": "", "transaction_type": "Invoice", "invoice_total_amount: 2161.53, "invoice_currency": "USD", "account_doc_description ": "", "sales_order_number ": "7052971819" } ] }

4.6.2 Mensaje de respuesta: GetInvoiceDetails

{ "status": "OK", "transaction_id": "INV701765101433844843", "message": [ { "invoice_bankinfo": [ { “invoice_number”:” 9044468717”, "name": "Merghle", "bank_keys": "", "bank_number": "",

16 | Manual de referencia del servicio web

"bank_branchid": "", "bank_account_number": "", "currency": "", "alternative_bank_account": "", "lockbox_number": "", "swiftcode": "", “iban": "", "bank_control_key": "", "country": "", "address": "", "city": "Carol Stream, IL 60132-2188", “district”:””, "region": "", "postalcode": "", "tel_number":”", "fax_number ": "", "additional": "MAIL PAYMENTS TO: AUTODESK, INC. C/O MERGHLE" }, { “invoice_number”:” 9054468717”, "name": "Merghle", "bank_keys": "", "bank_number": "", "bank_branchid": "", "bank_account_number": "40574469", "currency": "", "alternative_bank_account": "", "lockbox_number": "", "swiftcode": "", "iban": "", "bank_control_key": "", "country": "", "address": "", "city": "", “district”:””, "region": "", "postalcode": "", "tel_number":”", "fax_number ": "", "additional": "ABA# 021000089/WIRE PAYMENTS TO:" } ], "invoice_header": [ { "invoice_date": "2014-10-24", "invoice_number": "9052333717", "po_date": "2014-07-09", "order_date": "2014-09-24", "purchase_order_number": "D20000036_R2D2", "customer_po_number": "", "transaction_type": "Invoice", "ship_date": null, "invoice_currency": "USD",

17 | Manual de referencia del servicio web

"sales_order_number": "7354493780", "contract_number": "D44000442", "payment_term": "30", "payment_due": "Up to 11/23/2014 without deduction", "local_currency": "USD", "exchange_rate": 1, "vat_number": "", "delivery_code": "CIF", "delivery_description": "FOB Origin", "delivery_number": "", "numbers_of_items": 1, "tax_amount": 0, "tax_type": "TPS;TVQ", "tax_rate": "7.975%;7%", "tracking_number": "1ZR43W412049469", "extra_po_identifier": "", "freight_charge": 0, "opportunity_id": "", " invoice_amount": 30, "weight_total": 0, "weight_uom": "", "reserve_header_field": "" } ], "invoice_items": [ { "invoice_number": "9033338717", "line_number": "000050", "sku": "961F1-WW6573-L994", "sku_description": "ADSKFD 2014 TL:MT SUB WW ELD", “physical_media”:””, "invoice_currency": "USD", "contract_start": "2014-09-24", "contract_end": "2015-12-31", "quantity": 1, "quantity_uom": "EA", "seats": 0, "unit_price": 30, "unit_discount": 0, "net_value": 30, "serial_number": "364-72262293", "current_serial_number": "", "old_serial_number": "", "partner_subs_id": "", “vat_description”:””, "reserve_item_field": "", "bill_per_start_dt": "2016-02-22T00:00:00+0000", "bill_per_end_dt": "2016-03-21T00:00:00+0000" } ], "invoice_partners": [ { "invoice_number": "9052222717",

18 | Manual de referencia del servicio web

"line_number": "000000", "partner_type": "", "partner_number": "", "contact_number": "0000000000", "partner_name": "Autochair Inc.", "street": "McInnis Parkway", "po_box": "", "city": "SAN ROFFEL", "postal_code": "94903", "pobox_postal_code": "", "country": "USA", "tel_number": "415-507-5000", "fax_number": "", "district": "MARIN", "region": "CA" }, { "invoice_number": "9033368717", "line_number": "000000", "partner_type": "Sold to", "partner_number": "5162644143", "contact_number": "0000000000", "partner_name": "Quechua Rentals", "street": "410 Terry Ave N", "po_box": "", "city": "Seattle", "postal_code": "98109-5210", "pobox_postal_code": "", "country": "USA", "tel_number": "", "fax_number": "", "district": "KING", "region": "WA" }, { "invoice_number": "9054558717", "line_number": "000000", "partner_type": "Bill to", "partner_number": "5163268143", "contact_number": "0000000000", "partner_name": "Quechua Rentals", "street": "410 Terry Ave N", "po_box": "", "city": "Seattle", "postal_code": "93109-5210", "pobox_postal_code": "", "country": "USA", "tel_number": "", "fax_number": "", "district": "KING", "region": "WA" }, {

19 | Manual de referencia del servicio web

"invoice_number": "9053338717", "line_number": "000000", "partner_type": "Ship to", "partner_number": "5166668390", "contact_number": "0000000000", "partner_name": "Quechua Rentals", "street": "410 Terry Ave N", "po_box": "", "city": "Seattle", "postal_code": "98209-5210", "pobox_postal_code": "", "country": "USA", "tel_number": "", "fax_number": "", "district": "KING", "region": "WA" }, { "invoice_number": "9053368717", "line_number": "000050", "partner_type": "Reseller", "partner_number": "5162644143", "contact_number": "0000000000", "partner_name": "Quechua Rentals", "street": "410 Terry Ave N", "po_box": "", "city": "Seattle", "postal_code": "98229-5210", "pobox_postal_code": "", "country": "USA", "tel_number": "", "fax_number": "", "district": "KING", "region": "WA" } ] } ] }

Nota: En el caso de varios tipos de impuestos y tipos de cambio, el servicio devolverá datos como se muestra a continuación.

Aquí los valores estás separados con ";" y tax_type y tax_rate se incluirán en secuencia (es decir, tax_rate 7,975% corresponde al tipo de impuesto "TPS" y tax_rate "7%" corresponde a tax_type "TVQ")

4.7 Mensajes de error

La siguiente tabla muestra los códigos de error y sus respectivos mensajes de error presentes en los mensajes de respuesta si se detecta un error:

20 | Manual de referencia del servicio web

Mensaje de error

Código de error Descripción del error

Indique el número de cliente. UAN-GEN-00108 Número de cliente con valor en blanco

El campo no se puede dejar en blanco. Introduzca la fecha.

UAN-GEN-00108

Fecha de factura desde / fecha de factura hasta con un valor en blanco

El intervalo de fechas no debe ser superior a 90 días. Compruebe la entrada y vuelva a intentarlo.

UAN-GEN-00141

Para comprobar si el intervalo de fechas es superior a 90 días

El Número de cliente no debe superar los 10 caracteres. Compruebe la entrada y vuelva a intentarlo.

UAN-GEN-00123

Para comprobar si Número de cliente tiene más de 10 caracteres

Introduzca una Fecha de inicio válida en el formato AAAA-MM-DD.

UAN-GEN-00119

Para comprobar el formato de fecha

Introduzca una Fecha de fin válida en el formato AAAA-MM-DD

UAN-GEN-00119

Para comprobar el formato de fecha

Problema del sistema que impide el procesamiento. Inténtelo de nuevo más tarde

UAN-GEN-00122

Excepción técnica

Número de factura debería tener 10 caracteres exactamente. Compruebe la entrada y vuelva a intentarlo.

UAN-GEN-00123

Para comprobar si Número de factura es menor o mayor de 10 caracteres

El Número de pedido de ventas debe tener 10 caracteres exactos. Compruebe la entrada y vuelva a intentarlo.

UAN-GEN-00123

Para comprobar si el Número de pedido de ventas es menor o mayor de 10 caracteres

La Fecha de inicio de la factura debe ser anterior a la Fecha de fin de la factura.

UAN-INV-00002

Para comprobar si el valor de Fecha desde de factura es anterior a la Fecha hasta de factura

El número de cliente suministrado no es válido.

APG-DWS-INV-002

Si el CSN enviado por el distribuidor no es válido

{ "status": "OK", "transaction_id": "INV701111351434507983", "message": [] }

- Capa de servicio para devolver una respuesta con un mensaje en blanco si no se encuentra ningún registro para la búsqueda actual

21 | Manual de referencia del servicio web

4.7.1 Ejemplo de respuesta de error

5 Apéndice 5.1 Código en C# para introducir varios CSN

A continuación se muestra un ejemplo de un archivo de comandos que pueden escribir los distribuidores para introducir varios CSN en el servicio GetInvoice. Dado que el servicio GetInvoice solo puede procesar un único CSN por solicitud, es necesario programar la aplicación con este requisito en mente. Una forma de hacer esto es programar un bucle que realiza una solicitud para cada CSN suministrado, teniendo en cuenta la generación de firmas y los tokens de acceso. A continuación se muestra un ejemplo de código que realiza ese proceso.

5.1.1 Programa principal

using System; using System.Collections.Generic; using System.Text; using MultipleInvoiceCallPoC.POCOs; using Newtonsoft.Json; using System.Diagnostics; using System.Threading; namespace MultipleInvoiceCallPoC { class Program { static void Main(string[] args) { //"Acquiring credentials var credentials = new Credentials { BasePath = "https://www.example.com", ConsumerKey = "AbM03alqHyT3uv3D3cYQV0gq8K0kkKNf", ConsumerSecret = "SCqY7IKSoIZ1ZbY5", CSNs = new List<string>() { "51626566", "51626567", "51626568", "51626569",

{ "status": "Error", "transactionid": "INV51046287871433503736", "message": [ { "error_code": "UAN-GEN-00108", "error_message": "Please enter Customer Number" } ] }

22 | Manual de referencia del servicio web

"51626570" } }; // Looping through each CSN var container = new List<ResponseContainer>(); foreach (var csn in credentials.CSNs) { // Signing partner's credentials var firstSignature = Utils.GetFirstSignature(credentials); // Sending request to OAuth server to generate an Access Token var tokenDetails = Utils.CallOAuthEndPoint(firstSignature); // Signing Access Token var secondSignature = Utils.GetSecondSignature(tokenDetails, credentials); // Calling Get Invoice WebService var endPoint = string.Format("https://enterprise-api-stg.autodesk.com/v1/invoices?customer_number={0}&invoice_date_from=2015-08-01&invoice_date_to=2015-09-01", csn); var invoice = Utils.GetInvoices(endPoint, secondSignature, csn); // Storing WebService's response var invoiceContainer = JsonConvert.DeserializeObject<InvoiceContainer>(invoice); container.Add(new ResponseContainer { CSN = csn, Response = invoiceContainer }); } // Writing response to file var json = JsonConvert.SerializeObject(container, Formatting.Indented); Utils.WriteJsonToFile(json); } } }

23 | Manual de referencia del servicio web

5.1.2 Clase Utils

public class Utils { /// <summary> /// Sets up the OAuth URL end-point and headers to be send in the request in order to /// generate the Access Token /// </summary> /// <param name="url">String that contains the OAuth URL end-point</param> /// <param name="firstSignature">Class that contains Partner's signed credentials</param> /// <returns>String with a JSON object</returns> public static string GetAccesToken(string url, FirstSignature firstSignature) { var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("Authorization", string.Format("Basic {0}", firstSignature.Base64Credentials)); request.Headers.Add("signature", firstSignature.SignedSignature); request.Headers.Add("timestamp", string.Format("{0}", firstSignature.Timestamp)); return GetResponse(request); } /// <summary> /// Sets up the GetInvoice URL end-point, headers for the request and a particular CSN /// </summary> /// <param name="url">String that contains the GetInvoices end-point</param> /// <param name="secondSignature">Class that contains a signed Access Token</param> /// <param name="csn">String that contains CSN</param> /// <returns>String with a JSON object</returns> public static string GetInvoices(string url, SecondSignature secondSignature, string csn) { var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.ContentType = "application/json"; request.Headers.Add("Authorization", secondSignature.Authorization); request.Headers.Add("CSN", csn); request.Headers.Add("signature", secondSignature.SignedSignature); request.Headers.Add("timestamp", string.Format("{0}", secondSignature.Timestamp)); return GetResponse(request); } /// <summary> /// Gets a response from an Internet resource /// </summary> /// <param name="request">Requet data </param> /// <returns>String with a JSON object</returns>

24 | Manual de referencia del servicio web

public static string GetResponse(HttpWebRequest request) { try { var response = (HttpWebResponse)request.GetResponse(); var enc = System.Text.Encoding.GetEncoding("utf-8"); var responseStream = new StreamReader(response.GetResponseStream(), enc); var result = string.Empty; result = responseStream.ReadToEnd(); response.Close(); return result; } catch (Exception e) { Trace.WriteLine(e.Message); return string.Empty; } } /// <summary> /// Calls Invoices Endpoint and retrieves a list of invoices /// </summary> /// <param name="firstSignature">Class that contains Partner's signed credentials</param> /// <returns>Class with access token data</returns> public static AccessToken CallOAuthEndPoint(FirstSignature firstSignature) { var url = "https://enterprise-api-dev.autodesk.com/v2/oauth/generateaccesstoken?grant_type=client_credentials"; var details = Utils.GetAccesToken(url, firstSignature); var tokenDetails = JsonConvert.DeserializeObject<AccessToken>(details); return tokenDetails; } /// <summary> /// Takes Partner's credentials and signs them /// </summary> /// <param name="credentials">Class with partner's credentials data</param> /// <returns>class containing partner's signed credentials</returns> public static FirstSignature GetFirstSignature(Credentials credentials) { var credTemp = string.Format("{0}:{1}", credentials.ConsumerKey, credentials.ConsumerSecret); var firstSignature = new FirstSignature { Base64Credentials = Base64Encode(credTemp), Timestamp = GetEpochTimestamp() }; var message = string.Format("{0}{1}{2}", credentials.BasePath, credentials.ConsumerKey, firstSignature.Timestamp); firstSignature.SignedSignature = GenerateSignature(message, credentials.ConsumerSecret);

25 | Manual de referencia del servicio web

return firstSignature; } /// <summary> /// Takes Access Token and signs it /// </summary> /// <param name="token">Class with access token data</param> /// <param name="credentials">Class with partner's credentials data</param> /// <returns>classs containing a signed access token</returns> public static SecondSignature GetSecondSignature(AccessToken token, Credentials credentials) { var secondSignature = new SecondSignature { Timestamp = GetEpochTimestamp(), CSN = credentials.CSN, Authorization = string.Format("Bearer {0}", token.access_token) }; var message = string.Format("{0}{1}{2}", credentials.BasePath, token.access_token, secondSignature.Timestamp); secondSignature.SignedSignature = GenerateSignature(message, credentials.ConsumerSecret); return secondSignature; } /// <summary> /// Encode string to base64 /// </summary> /// <param name="plainText">String to be encoded</param> /// <returns>Enconded string</returns> public static string Base64Encode(string plainText) { var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); return System.Convert.ToBase64String(plainTextBytes); } /// <summary> /// Decodes base64 string /// </summary> /// <param name="base64EncodedData">String to be decoded</param> /// <returns>Decoded string</returns> public static string Base64Decode(string base64EncodedData) { var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); } /// <summary> /// Gets Epoch Unix timestamp /// </summary> /// <returns>Epoch Unix timestamp</returns> public static int GetEpochTimestamp() { return (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;

26 | Manual de referencia del servicio web

} /// <summary> /// Hashing of the signature using HMACSHA256 /// </summary> /// <param name="message">String with the message to be hashed</param> /// <param name="secret">String with the consumer secret</param> /// <returns>Hashed string</returns> public static string GenerateSignature(string message, string secret) { var encoding = new System.Text.ASCIIEncoding(); byte[] keyByte = encoding.GetBytes(secret); byte[] messageBytes = encoding.GetBytes(message); using (var hmacsha256 = new HMACSHA256(keyByte)) { byte[] hashmessage = hmacsha256.ComputeHash(messageBytes); return Convert.ToBase64String(hashmessage); } } /// <summary> /// Prints a JSON object to a file /// </summary> /// <param name="json">String with a JSON Object</param> public static void WriteJsonToFile(string json) { using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\temp\json.txt")) { file.WriteLine(json); } } }

5.1.3 POCO namespace MultipleInvoiceCallPoC { /// <summary> /// Class used to store Access Token data /// </summary> public class AccessToken { public string access_token { get; set; } public string expires_in { get; set; } public string token_type { get; set; } } } namespace MultipleInvoiceCallPoC.POCOs { /// <summary> /// Class used to encapsulate the Partner's credentials data

27 | Manual de referencia del servicio web

/// </summary> public class Credentials { public string BasePath { get; set; } public string CSN { get; set; } public List<string> CSNs { get; set; } public string ConsumerKey { get; set; } public string ConsumerSecret { get; set; } } } namespace MultipleInvoiceCallPoC.POCOs { /// <summary> /// Class used to encapsulate the Partner's signed credentials /// </summary> public class FirstSignature { public string Base64Credentials { get; set; } public int Timestamp { get; set; } public string SignedSignature { get; set; } } } namespace MultipleInvoiceCallPoC.POCOs { /// <summary> /// Class used to encapsulate a signed Access Token /// </summary> public class SecondSignature { public string SignedSignature { get; set; } public int Timestamp { get; set; } public string Authorization { get; set; } public string CSN { get; set; } } } namespace MultipleInvoiceCallPoC.POCOs { /// <summary> /// Class that represents an Invoice /// </summary> public class Invoice { public string invoice_number { get; set; } public string purchase_order_number { get; set; } public string sales_order_number { get; set; } public string bill_to_customer { get; set; } public string invoice_date { get; set; } public string transaction_type { get; set; } public string invoice_total_amount { get; set; } public string invoice_currency { get; set; } public string account_doc_description { get; set; } public string customer_po_number { get; set; }

28 | Manual de referencia del servicio web

} /// <summary> /// Class used to contain Invoice data retreived from calling GetInvoices end-point /// </summary> public class InvoiceContainer { public string status { get; set; } public string transaction_id { get; set; } public Invoice[] message { get; set; } } /// <summary> /// Auxiliary class for display purposes used to contain Invoice data for a particular CSN /// </summary> public class ResponseContainer { public string CSN { get; set; } public InvoiceContainer Response{get; set;} } }

Nota: Este Manual de referencia del servicio es para uso exclusivo de los destinatarios a los que se dirige y puede contener información propietaria o confidencial que puede ser información reservada o estar protegida frente a la divulgación. Queda totalmente prohibida cualquier revisión, uso, difusión o distribución no autorizados.