Services Web de distribution numé rique · Vous pouvez accroître l'efficacité des processus en...
Transcript of Services Web de distribution numé rique · Vous pouvez accroître l'efficacité des processus en...
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.