Services Web de distribution numé rique · Vous pouvez accroître l'efficacité des processus en...

27
Services Web de distribution numé rique Manuel de référence du service GetInvoice

Transcript of Services Web de distribution numé rique · Vous pouvez accroître l'efficacité des processus en...

Services Web de distribution numé rique Manuel de référence du service GetInvoice

2 | Manuel de ré fé rence des services Web

TABLE DES MATIERES Historique des révisions ........................................................................................................................................ 3

1 Introduction ..................................................................................................................................................... 4

1.1 Présentation ........................................................................................................................................... 4

1.2 Documents de support .......................................................................................................................... 4

2 Mise en route .................................................................................................................................................. 4

3 Présentation du service GetInvoice ............................................................................................................... 4

3.1 GetInvoiceList ........................................................................................................................................ 6

3.2 GetInvoiceDetails .................................................................................................................................. 6

3.3 Avantages du service GetInvoice .......................................................................................................... 7

4 Informations de référence sur le service GetInvoice ...................................................................................... 7

4.1 Remarque concernant l'utilisation de plusieurs numéros de compte client spécifique ......................... 7

4.2 Schéma de requête ............................................................................................................................... 8

4.3 Schéma de réponse .............................................................................................................................. 9

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

4.3.2 GetInvoiceDetails .............................................................................................................................. 9

4.4 Schéma d'erreur .................................................................................................................................. 11

4.5 Message de requête ............................................................................................................................ 12

4.5.1 Message de requête - GetInvoiceList .............................................................................................. 12

4.5.2 Message de requête - GetInvoiceDetails ........................................................................................ 13

4.6 Message de réponse ........................................................................................................................... 14

4.6.1 Message de réponse - GetInvoiceList ............................................................................................. 14

4.6.2 Message de réponse - GetInvoiceDetails ....................................................................................... 14

4.7 Messages d'erreur ............................................................................................................................... 19

4.7.1 Exemple de réponse d'erreur .......................................................................................................... 20

5 Annexe ......................................................................................................................................................... 20

5.1 Code C# pour la saisie de plusieurs numéros de compte client spécifique ........................................ 20

5.1.1 Programme principal ....................................................................................................................... 20

5.1.2 Classe Utils ...................................................................................................................................... 21

5.1.3 POCO .............................................................................................................................................. 25

3 | Manuel de ré fé rence des services Web

Historique des révisions Version Date Auteur Commentaires

2.1 22/10/2015 AR Ajout de la section Historique des révisions

2.2 14/12/2015 AR Ajout des champs adsk_vat_number, recurring_po et total_amount dans l'intitulé invoice_header de la réponse GetInvoiceDetails à la section 4.3

2.3 22/12/2015 AR Section 4.2 : longueur maximale du champ purchase_order_number remplacée par 35 caractères

2.4 23/02/2016 RL Ajout des champs bill_per_start_dt et bill_per_end_dt à invoice_items

2.5 23/02/2016 ER Mise à jour de la description pour contract_end

4 | Manuel de ré fé rence des services Web

1 Introduction

1.1 Présentation

La plate-forme de services Web de distribution numérique est une solution d'automatisation permettant de passer des commandes directement entre les partenaires et Autodesk, avec une action limitée des partenaires et sans qu'Autodesk ait à intervenir. Cette nouvelle fonctionnalité opérationnelle va permettre de réaliser de véritables transactions entre les partenaires et Autodesk en matière de services Web B2B.

Pour que les partenaires mettent en oeuvre de façon optimale la plate-forme de services numériques Autodesk, les associés doivent maîtriser les services Web REST, OAuth et JSON. Un exemple d'application cliente (en langage Ruby) est proposé dans le guide de programmation. Il aidera les développeurs des entreprises associées à se servir de l'API de services numériques.

1.2 Documents de support

Guide des développeurs partenaires Autodesk : ce guide accompagne les partenaires dans leur processus d'intégration et les aide à accéder aux services Web de distribution numérique. Il permet également de présenter la plate-forme de services numériques Autodesk aux partenaires à l'aide d'instructions détaillées sur les activités initiales requises pour l'intégration.

Documentation de l'API d'authentification : ce document guide les partenaires à travers le processus de génération d'informations d'identification, de signatures et de jetons d'accès nécessaires à l'utilisation des API de service. Il contient également des informations sur le développement d'une application d'intégration de partenaire. Il fournit une présentation de base de l'intégration des services Web et décrit le développement d'une application standard.

2 Mise en route

Dans le cadre du processus d'intégration, les partenaires sont associés à un numéro de compte client spécifique (CSN) unique et leur application est enregistrée auprès d'Autodesk. Pour plus d'informations sur le processus d'intégration, reportez-vous au manuel Guide des développeurs partenaires Autodesk.

3 Présentation du service GetInvoice Il se peut que l'auteur de la demande ait indiqué une plage de dates (date de début et date de fin). Dans ce cas, le service ne peut pas communiquer tous les détails de la facture pour une période donnée, car il se peut qu'un grand nombre de factures ait été émises au cours de cette période.

Deux opérations sont définies dans ce service pour la récupération des informations sur les factures :

getInvoiceList

getInvoiceDetails

5 | Manuel de ré fé rence des services Web

L'illustration ci-dessus représente le service getInvoice. Vous pouvez accroître l'efficacité des processus en mettant en oeuvre la plate-forme de services numériques Autodesk. La série d'illustrations ci-après présente l'expérience utilisateur dans la boutique en ligne. La première capture d'écran indique le mode d'appel de l'opération getInvoiceList. Les clients fournissent une plage de dates pour obtenir les factures correspondant à cette période. En fonction des données saisies, le client peut consulter toutes les factures émises au cours de cette période.

6 | Manuel de ré fé rence des services Web

Une fois la liste des factures communiquée, les clients peuvent obtenir des informations concernant un numéro de facture, de bon de commande ou de commande spécifique, comme illustré dans la capture d'écran ci-après.

3.1 GetInvoiceList

Le but de cette opération est d'obtenir la liste des factures du système principal si les données saisies incluent uniquement une plage de dates. Une fois que l'auteur de la demande a reçu la réponse, il appelle le service getInvoiceDetails en indiquant le numéro de facture, le numéro de bon de commande ou le numéro de commande. Les entrées suivantes sont nécessaires pour appeler le service :

1. customer_number

2. invoice_date_from

3. invoice_date_to

3.2 GetInvoiceDetails

Le but de cette opération est d'obtenir les détails de facture associés à des données spécifiques. Cette opération peut être appelée à l'aide des informations suivantes :

1. customer_number et purchase_order_number/invoice_number/sales_order_number

Si les trois paramètres (po_number, invoice_number et order_number) figurent dans une requête de service, la priorité des critères de recherche est définie comme suit :

1. invoice_number (élevée)

2. purchase_order_number

3. sales_order_number (faible)

Remarque : seule une facture valide sera remplie dans la réponse de l'API GetInvoice.

7 | Manuel de ré fé rence des services Web

3.3 Avantages du service GetInvoice

1. Il s'agit d'un service Web REST optimisé accessible facilement depuis n'importe quelle application via

une connexion HTTP(S).

2. Les partenaires peuvent ainsi récupérer les informations de facturation lorsque cela s'avère nécessaire,

ce qui évite d'avoir à rechercher des factures au format PDF dans des e-mails ou des données IDoc

dans le cadre d'un échange de données informatisé.

3. Le service offre aux partenaires la flexibilité nécessaire pour rechercher des factures émises au cours

d'une plage de dates spécifique. Par ailleurs, il peut fournir des numéros de facture, des numéros de

bon de commande ou des numéros de commande.

4. Les partenaires peuvent adapter les données des factures et le plug-in à leur système interne en

fonction de leurs besoins.

4 Informations de référence sur le service GetInvoice

4.1 Remarque concernant l'utilisation de plusieurs numéros de compte client spécifique

Le service GetInvoice ne prend en charge qu'un numéro de compte client spécifique (CSN) par requête. Si un partenaire possède plusieurs numéros de compte client spécifique, il doit pouvoir appeler le service plusieurs fois pour obtenir les informations correspondantes. Pour cela, vous pouvez programmer une boucle dans l'application connectée afin que le service GetInvoice soit appelé dès lors qu'un numéro de compte client spécifique est disponible. Il est important qu'un script de ce type prenne également en charge la génération des informations d'identification et des jetons d'accès pour chaque appel. Un exemple complet de ce type de script figure dans la section Annexe du présent Manuel de référence des services. Voici ci-dessous le segment correspondant à l'exemple mentionné. // 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 =

8 | Manuel de ré fé rence des services Web

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);

4.2 Schéma de requête

Les détails des paramètres des messages de requête sont indiqués dans le tableau suivant pour les éléments getInvoiceList() et getInvoiceDetails().

Elément Type de champ

Longueur/Format d'entrée

Utilisation

Elé

me

nts

ge

tIn

vo

ice

Lis

t()

customer_number Chaîne Longueur :

10 caractères au maximum

Obligatoire

Invoice_date_from Date Format : ISO 8601

AAAA-MM-JJ Obligatoire

invoice_date_to Date Format : ISO 8601

AAAA-MM-JJ Obligatoire

Elé

me

nts

getI

Inv

oic

eD

eta

ils

()

customer_number Chaîne Longueur :

10 caractères au maximum

Obligatoire

invoice_number Chaîne Longueur :

10 caractères au maximum

Un ou tous les éléments peuvent être transmis avec

l'élément customer_number

purchase_order_number

Chaîne Longueur :

35 caractères au maximum

sales_order_number

Chaîne Longueur :

10 caractères au maximum

9 | Manuel de ré fé rence des services Web

4.3 Schéma de réponse

4.3.1 GetInvoiceList

Nom de champ Description

invoice_number Numéro de facture

bill_to_customer Numéro client 1

purchase_order_number Numéro de bon de commande du client

invoice_date Date d'émission indiquée dans le document Format : ISO 8601 AAAA-MM-JJ

transaction_type Description du type de document

invoice_total_amount Montant dans la devise du document

invoice_currency Clé de devise

account_doc_description Description de l'élément

customer_po_number Numéro de bon de commande du client

sales_order_number Numéro de document de vente et de distribution

4.3.2 GetInvoiceDetails

Nom de champ Description

invoice_bankinfo

invoice_number Numéro de document de vente et de distribution

name Nom de la banque

bank_keys Clés bancaires

bank_number Numéro de banque

bank_branchid Succursale de la banque

bank_account_number Numéro de compte bancaire

currency Devise de la banque

alternative_bank_account Autre numéro de compte bancaire (si le numéro de compte n'est pas clair)

lockbox_number Numéro LockBox

swiftcode Code SWIFT pour les paiements internationaux

iban IBAN (International Bank Account Number)

bank_control_key Clé de contrôle de la banque

country Pays

address Adresse de la banque

city Ville

district District

region Région (état, région, département)

postalcode Code postal/Boîte postale

tel_number Numéro de téléphone

fax_number Numéro de fax

additional Informations supplémentaires : Code guichet/ABI/CAB/GIRO, etc.

invoice_header

invoice_date Date de facturation (index de facturation et impression) Format : ISO 8601

invoice_number Numéro de document de vente et de distribution

10 | Manuel de ré fé rence des services Web

po_date Date du bon de commande du client Format : ISO 8601

order_date Date de la commande Format : ISO 8601 AAAA-MM-JJ

purchase_order_number Numéro de bon de commande du client

customer_po_number Numéro de bon de commande du réceptionnaire

transaction_type 20 caractères

ship_date Date Format : ISO 8601 AAAA-MM-JJ

invoice_currency Devise du document de vente et de distribution

sales_order_number Commande

contract_number Référence interne du client ou du fournisseur

payment_term Conditions de paiement

payment_due Date d'échéance du paiement Format : ISO 8601 AAAA-MM-JJ

local_currency Clé de devise

exchange_rate Taux de change pour la détermination des prix

vat_number Numéro de TVA

delivery_code Incoterms (1re partie)

delivery_description Incoterms (2e partie)

delivery_number Livraison

numbers_item Nombre naturel

tax_amount Montant de la taxe dans la devise du document

tax_type Type de taxe

tax_rate Taux d'imposition

freight_charge Frais de transport

tracking_number Numéro de bon de transport

opportunity_id ID de l'opportunité

extra_po_identifier Identificateur d'achat supplémentaire

invoice_amount Valeur nette dans la devise du document

weight_total Poids total

weight_uom Unité de poids

reserve_header_field Champ d'en-tête de sauvegarde

adsk_vat_number Numéro de TVA Autodesk

recurring_po Bon des commandes sous abonnement récurrent

total_amount Valeur nette + taxes

invoice_items

invoice_number Document de facturation

line_number Elément de facturation

sku Numéro de produit

sku_description Courte description de l'article du bon de commande

physical_media Valeur ELD issue de la valeur de caractère

invoice_currency Devise du document de vente et de distribution

contract_start Date de début du contrat Format : ISO 8601 AAAA-MM-JJ

11 | Manuel de ré fé rence des services Web

contract_end Date de fin du contrat Format : ISO 8601 AAAA-MM-JJ Concernant les abonnements récurrents (mensuels et annuels), les règles suivantes s'appliquent. Si le contrat est annulé, le champ contract_end affiche la date d'annulation. Si le contrat est en vigueur, le champ contract_end affiche le texte "Contrat à renouvellement automatique".

quantity Quantité réelle facturée

quantity_uom Unité de mesure de base

seats Nombre naturel

unit_price Prix unitaire

unit_discount Remise unitaire

net_value Valeur nette de l'article facturé dans la devise du document

serial_number Numéro de série

current_serial_number Numéro de série actuel

old_serial_number Ancien numéro de série

partner_subs_id Numéro d'abonnement partenaire

vat_description Description de la TVA

reserve_item_field Champ d'article de sauvegarde

bill_per_start_dt Date de début de la période de facturation

bill_per_end_dt Date de fin de la période de facturation

invoice_partners

invoice_number Numéro de document de vente et de distribution

line_number Elément de facturation

partner_type Type de client

partner_number Numéro client 1

contact_number Numéro du contact

partner_name Nom

street Numéro de bâtiment et rue

po_box Boîte postale

city Ville

postal_code Code postal

pobox_postal_code Boîte postale - Code postal

country Nom du pays

tel_number Numéro de téléphone principal

fax_number Numéro de fax

district District

region Région (état, région, département)

country_iso Code ISO du pays

4.4 Schéma d'erreur

Nom de champ Description

status Réponse de confirmation : "OK", "ECHEC", "ERREUR"

message Message d'échec ou d'erreur

transactionid ID de transaction unique (combinaison numéro de facture et horodatage)

12 | Manuel de ré fé rence des services Web

4.5 Message de requête

En fonction des paramètres d'entrée, l'opération getInvoiceList() ou getInvoiceDetails() est appelée. Si l'entrée comprend les paramètres "date de début" et "date de fin", l'opération getInvoiceList() est appelée. Si l'entrée comprend le numéro de bon de commande, de facture ou de commande, l'opération getInvoiceDetails() est appelée. Voici ci-dessous des exemples de requêtes pour les deux opérations.

4.5.1 Message de requête - 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>>

13 | Manuel de ré fé rence des services Web

4.5.2 Message de requête - GetInvoiceDetails

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>>

14 | Manuel de ré fé rence des services Web

4.6 Message de réponse

Remarque : Autodesk envoie une réponse dont la structure est la suivante. Les partenaires peuvent la personnaliser en fonction de leurs besoins.

4.6.1 Message de réponse - 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 Message de réponse - GetInvoiceDetails

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

15 | Manuel de ré fé rence des services Web

"bank_keys": "", "bank_number": "", "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",

16 | Manuel de ré fé rence des services Web

"ship_date": null, "invoice_currency": "USD", "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": [

17 | Manuel de ré fé rence des services Web

{ "invoice_number": "9052222717", "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"

18 | Manuel de ré fé rence des services 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" } ] } ] }

Remarque : si plusieurs types de taxe et taux d'imposition sont utilisés, le service renvoie des données au format présenté ci-après.

Dans cet exemple, les valeurs sont séparées par le signe ";" et les éléments tax_type et tax_rate sont répertoriés successivement (l'élément tax_rate associé à la valeur 7.975% correspond au type de taxe "TPS", tandis que l'élément tax_rate associé à la valeur 7% désigne le type de taxe "TVQ").

19 | Manuel de ré fé rence des services Web

4.7 Messages d'erreur

Le tableau suivant répertorie les codes d'erreur et les messages correspondants qui s'affichent dans les messages de réponse, le cas échéant :

Message d'erreur Code d'erreur Description de l'erreur

Veuillez fournir le numéro client UAN-GEN-00108 Le numéro client n'est pas indiqué

Le champ doit être renseigné. Veuillez entrer la date

UAN-GEN-00108

La date de début ou de fin de la facture n'est pas indiquée

La plage de dates ne peut pas s'étendre à plus de 90 jours. Veuillez vérifier les données fournies et réessayer

UAN-GEN-00141

L'utilisateur doit vérifier si la plage de dates s'étend sur plus de 90 jours

Le numéro client ne doit pas dépasser 10 caractères. Veuillez vérifier les données fournies et réessayer

UAN-GEN-00123

L'utilisateur doit vérifier si le numéro client comporte plus de 10 caractères

Veuillez entrer une date de début valide au format AAAA-MM-JJ

UAN-GEN-00119

L'utilisateur doit vérifier le format de date

Veuillez entrer une date de fin valide au format AAAA-MM-JJ

UAN-GEN-00119

L'utilisateur doit vérifier le format de date

Traitement impossible en raison d'une erreur système. Veuillez réessayer ultérieurement

UAN-GEN-00122

Exception technique

Le numéro de facture doit comporter 10 caractères précisément. Veuillez vérifier les données fournies et réessayer

UAN-GEN-00123

L'utilisateur doit vérifier si le numéro de facture comporte plus ou moins de 10 caractères

Le numéro de commande doit comporter 10 caractères précisément. Veuillez vérifier les données fournies et réessayer

UAN-GEN-00123

L'utilisateur doit vérifier si le numéro de commande comporte plus ou moins de 10 caractères

La date de début de facturation doit être antérieure à la date de fin de facturation

UAN-INV-00002

L'utilisateur doit s'assurer que la date de début de facturation est antérieure à sa date de fin

Le numéro client fourni n'est pas valide.

APG-DWS-INV-002

Le numéro de compte client spécifique envoyé par le partenaire est incorrect

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

- Si aucun enregistrement n'est trouvé pour la recherche en cours, la couche de service permettant de répondre par un message vide est fournie.

20 | Manuel de ré fé rence des services Web

4.7.1 Exemple de réponse d'erreur

5 Annexe

5.1 Code C# pour la saisie de plusieurs numéros de compte client spécifique

Voici un exemple de script que les partenaires peuvent écrire pour indiquer plusieurs numéros de compte client spécifique dans le service GetInvoice. Etant donné que le service GetInvoice ne peut traiter qu'un numéro de compte client spécifique par requête, cette caractéristique doit être prise en compte lors de la programmation de l'application. Pour cela, il est nécessaire de programmer une boucle qui envoie une requête pour chaque numéro de compte client spécifique fourni, en prenant en compte la génération des signatures et des jetons d'accès. Un exemple de code permettant d'exécuter cette opération est présenté ci-dessous.

5.1.1 Programme 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",

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

21 | Manuel de ré fé rence des services Web

CSNs = new List<string>() { "51626566", "51626567", "51626568", "51626569", "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); } } }

5.1.2 Classe 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

22 | Manuel de ré fé rence des services Web

/// </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> 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);

23 | Manuel de ré fé rence des services Web

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); 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>

24 | Manuel de ré fé rence des services Web

/// <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; } /// <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>

25 | Manuel de ré fé rence des services Web

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 /// </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; }

26 | Manuel de ré fé rence des services Web

} } 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; } } /// <summary> /// Class used to contain Invoice data retreived from calling GetInvoices end-point /// </summary> public class InvoiceContainer { public string status { get; set; }

27 | Manuel de ré fé rence des services Web

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;} } }

Remarque : ce manuel de référence des services s'adresse uniquement aux destinataires visés et peut contenir des informations propriétaires et/ou confidentielles. Toute révision, utilisation, divulgation ou distribution sans autorisation préalable est interdite.