Serviços da Web de distribuição digital (DDWS) GetInvoice

Transcrição

Serviços da Web de distribuição digital (DDWS) GetInvoice
Serviços da Web de distribuição digital (DDWS)
GetInvoice - Manual do serviço
ÍNDICE
1
Introdução ...................................................................................................................................................... 3
1.1
Visão geral ............................................................................................................................................. 3
1.2
Documentos de suporte ........................................................................................................................ 3
2
Introdução ...................................................................................................................................................... 3
3
Visão geral do serviço Obter fatura ................................................................................................................ 3
4
3.1
GetInvoiceList ........................................................................................................................................ 5
3.2
GetInvoiceDetails .................................................................................................................................. 5
3.3
Vantagens do serviço GetInvoice .......................................................................................................... 5
Informações de referência do serviço GetInvoice .......................................................................................... 6
4.1
Nota sobre vários CSNs ........................................................................................................................ 6
4.2
Esquema de solicitação ......................................................................................................................... 7
4.3
Esquema de resposta ............................................................................................................................ 7
4.3.1
GetInvoiceList .................................................................................................................................... 7
4.3.2
GetInvoiceDetails............................................................................................................................... 8
4.4
Esquema de erro ................................................................................................................................. 10
4.5
Mensagem de solicitação .................................................................................................................... 10
4.5.1
Mensagem de solicitação - GetInvoiceList ...................................................................................... 10
4.5.2
Mensagem de solicitação - GetInvoiceDetails ................................................................................ 11
4.6
4.6.1
Mensagem de resposta - GetInvoiceList ......................................................................................... 12
4.6.2
Mensagem de resposta - GetInvoiceDetails ................................................................................... 12
4.7
4.7.1
5
Mensagem de resposta ....................................................................................................................... 12
Mensagens de erro .............................................................................................................................. 17
Amostra de resposta de erro ........................................................................................................... 18
Apêndice ...................................................................................................................................................... 18
5.1
Código C# para inserir vários CSNs ................................................................................................... 18
5.1.1
Programa principal........................................................................................................................... 18
5.1.2
Classe de Utilitários ......................................................................................................................... 19
5.1.3
POCOs ............................................................................................................................................ 23
Histórico de revisão
Versão
2.1
Data
22/10/2015
Autor
Aline Romero
Comentários
Seção Histórico de
revisão adicionada
2 | Manual de referência do serviço da Web
1 Introdução
1.1 Visão geral
A plataforma do Serviço da Web de distribuição digital (DDWS) é uma solução para realização de
pedidos criada diretamente por nossos Parceiros para a Autodesk, com pouco toque dos Parceiros e
nenhum toque da Autodesk.Este novo recurso de negócios permitirá as transações de serviço Web B2B
verdadeiras entre os Parceiros e a Autodesk.
Para os Parceiros têm a implementação efetiva da Plataforma de serviços digitais da Autodesk, as
afiliadas precisarão ter familiaridade com os serviços da Web REST, o OAuth e o JSON. Uma amostra de
um aplicativo de cliente é fornecida (gravado na linguagem Ruby) em um documento Guia de
programação, que ajudarão os chamados desenvolvedores afiliados a consumirem a API do serviço
digital.
1.2 Documentos de suporte
2

Guia do desenvolvedor para parceiros da Autodesk: este guia ajuda os Parceiros no processo
de apresentação e no acesso aos serviços do DDWS. O guia também serve para apresentar aos
Parceiros a Plataforma de serviços digitais da Autodesk, usando instruções passo a passo que os
orientam nas atividades iniciais necessárias para integração.

Documentação da API de autenticação: este documento orientará os Parceiros pelo processo
de geração de credenciais, assinaturas e tokens de acesso necessários para usar as APIs do
serviço. Ele também contém informações para o desenvolvimento de um aplicativo de integração
de um Parceiro. Ele fornece a compreensão básica da integração do serviço da Web e demonstra
o desenvolvimento de um aplicativo típico.
Introdução
Como parte do processo de apresentação, os Parceiros serão associados a um único Número específico
do cliente (CSN) e terão seu aplicativo registrado com a Autodesk.
Para obter mais detalhes sobre o processo de integração, consulte o Guia do desenvolvedor para
parceiros da Autodesk.
3 Visão geral do serviço Obter fatura
Pode haver situações em que o solicitante que faz a entrada tem um intervalo de datas (de data e para
data). Nesse caso, o serviço não pode fornecer todos os detalhes da fatura para um determinado
período, pois há uma chance de ter uma quantidade enorme de faturas durante um determinado período.
Há duas operações definidas neste serviço para pesquisa de faturas:
 getInvoiceList
 getInvoiceDetails
3 | Manual de referência do serviço da Web
O diagrama acima é uma indicação do serviço getInvoice. Ao implementar a plataforma de serviços digitais da
Autodesk, você pode tornar seus processos mais eficientes. A próxima série de gráficos ilustra uma
experiência do usuário com a loja da Web.
Esta primeira captura de tela mostra como a operação getInvoiceList será chamada. Os clientes vão inserir
um intervalo de datas para obter as faturas correspondentes a um determinado período. Com base nessa
entrada, todas as faturas que estão nesse intervalo de datas serão exibidas para o cliente.
Depois de obter a lista de faturas, os clientes podem obter os detalhes da fatura para um número de fatura,
número de ordem de compra, número do pedido de vendas específico, como mostrado a seguir na captura de
tela.
4 | Manual de referência do serviço da Web
3.1 GetInvoiceList
A finalidade desta operação é obter a lista de faturas de um sistema de back-end se a entrada inclui
somente um intervalo de datas. Depois que o solicitante receber a resposta, ele(a) chamará
getInvoiceDetails usando Número da fatura / Número da ordem de compra / Número do pedido de
vendas como entrada. As seguintes entradas são necessárias para executar o serviço:
1. customer_number
2. invoice_date_from
3. invoice_date_to
3.2 GetInvoiceDetails
A finalidade desta operação é obter os detalhes da fatura de uma entrada especificada. Esta operação
pode ser chamada usando os seguintes conjuntos de entradas:
1. customer_number e purchase_order_number/ invoice_number / sales_order_number
Se todos os três parâmetros (po_number, invoice_number e order_number) estão presentes em uma
solicitação de serviço, a prioridade dos critérios de pesquisa será definida da seguinte maneira:
1. invoice_number (baixo)
2. purchase_order_number
3. sales_order_number (baixo)
Nota: apenas uma fatura válida será preenchida como parte da resposta da API GetInvoice.
3.3 Vantagens do serviço GetInvoice
1. Um serviço da Web REST leve que podem ser consumido facilmente em qualquer aplicativo por meio
da conexão HTTP(s).
5 | Manual de referência do serviço da Web
2. A capacidade de recuperar as informações da fatura por Parceiros quando necessário, eliminando a
necessidade de procurar as faturas em PDF em e-mails ou dados de EDI IDoc.
3. O serviço fornece flexibilidade para os Parceiros procurarem faturas dentro de intervalos de datas
específicos ou fornecendo números de fatura, de ordem de compra ou de pedido
4. Os Parceiros podem personalizar a data da fatura e o plug-in do sistema interno conforme necessário.
4 Informações de referência do serviço GetInvoice
4.1 Nota sobre vários CSNs
O serviço GetInvoice oferece suporte a apenas um único customer_number (CSN) por solicitação. Se
um Parceiro tiver vários CSNs, esse Parceiro deverá poder chamar o serviço várias vezes para obter as
informações correspondentes. Uma forma de fazer isso seriar programa um loop em sua conexão de
aplicativo que executa o serviço GetInvoice uma vez para cada CSN disponível. É importante que um
script assim também controle a geração de credenciais e os tokens de acesso de cada chamada. Um
exemplo de um script assim pode ser encontrado na seção Apêndice deste Manual de referência do
serviço. Abaixo, incluímos o segmento relevante do dito exemplo.
// 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-apistg.autodesk.com/v1/invoices?customer_number={0}&invoice_date_from=2015-0801&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);
6 | Manual de referência do serviço da Web
4.2 Esquema de solicitação
Os detalhes dos Parâmetros de mensagem de solicitação na tabela a seguir para getInvoiceList() e
getInvoiceDetails().
Elementos de
getIInvoiceDetails()
Elementos de
getInvoiceList()
Elemento
customer_number
Invoice_date_from
invoice_date_to
customer_number
invoice_number
purchase_order_numb
er
sales_order_number
Tipo de
campo
Comprimento/formato
de entrada
Sequência
de
caracteres
Comprimento: máx. 10
caracteres
Obrigatório
Data
Formato: ISO 8601
AAAA-MM-DD
Obrigatório
Data
Formato: ISO 8601
AAAA-MM-DD
Obrigatório
Comprimento: máx. 10
caracteres
Obrigatório
Sequência
de
caracteres
Sequência
de
caracteres
Sequência
de
caracteres
Sequência
de
caracteres
Utilização
Comprimento: máx. 10
caracteres
Qualquer um ou
todos podem ser
passados com o
customer_number
Comprimento: máx. 10
caracteres
4.3 Esquema de resposta
4.3.1
GetInvoiceList
Nome do campo
invoice_number
bill_to_customer
purchase_order_number
invoice_date
Descrição
Número da fatura
Número do cliente 1
Número da ordem de compra do cliente
Data de publicação no documento
Formato: ISO 8601
AAAA-MM-DD
transaction_type
invoice_total_amount
invoice_currency
account_doc_description
customer_po_number
sales_order_number
Descrição do tipo de documento
Quantidade na moeda do documento
Chave da moeda
Texto do item
Número da ordem de compra do cliente
Número do documento de vendas e distribuição
7 | Manual de referência do serviço da Web
4.3.2
GetInvoiceDetails
Nome do campo
Descrição
Dados de cabeçalho da fatura (invoice_header)
invoice_date
Data de cobrança para o índice de cobrança e a impressão
Formato: ISO 8601
invoice_number
po_date
Número do documento de vendas e distribuição
Data da ordem de compra do cliente
Formato: ISO 8601
order_date
Data do pedido de vendas
Formato: ISO 8601
AAAA-MM-DD
purchase_order_number
customer_po_number
transaction_type
ship_date
Número da ordem de compra do cliente
Número da ordem de compra das informações de envio
20 caracteres
Data
Formato: ISO 8601
AAAA-MM-DD
invoice_currency
sales_order_number
contract_number
payment_term
payment_due
Moeda do documento SD
Pedido
Referência interna do cliente ou fornecedor
Termos de pagamento
Data de vencimento do pagamento
Formato: ISO 8601
AAAA-MM-DD
local_currency
exchange_rate
vat_number
delivery_code
delivery_description
delivery_number
numbers_of_items
tax_amount
tax_type
tax_rate
freight_charge
tracking_number
opportunity_id
extra_po_identifier
invoice_amount
weight_total
weight_uom
reserve_header_field
invoice_number
line_number
Sku
Chave da moeda
Taxa de troca para determinação de preços
Número de registro IVA
Incoterms (parte 1)
Incoterms (parte 2)
Entrega
Número natural
Valor de impostos na moeda do documento
Tipo de taxa
Taxa de impostos
Custo de frete
Número do Waybill
ID da oportunidade
Identificador de compra adicional
Valor líquido na moeda do documento
Peso total
Unidade de peso
Campo de cabeçalho de backup
Dados de item da fatura (invoice_items)
Documento de cobrança
Item de cobrança
Número do material
8 | Manual de referência do serviço da Web
sku_description
physical_media
invoice_currency
contract_start
Texto curto para o item do pedido de vendas
Valor de ELD do valor de caractere
Moeda do documento SD
Data de início do contrato
Formato: ISO 8601
AAAA-MM-DD
contract_end
Data de término do contrato
Formato: ISO 8601
AAAA-MM-DD
Quantity
quantity_uom
Seats
unit_price
unit_discount
net_value
serial_number
current_serial_number
old_serial_number
partner_subs_id
vat_description
reserve_item_field
Quantidade cobrada realmente
Unidade de medida base
Número natural
Preço unitário
Desconto da unidade
Valor líquido do item de cobrança na moeda do documento
Número de série
Número de série atual
Número de série antigo
N° de Subs do parceiro
Texto de IVA
Campo de item de backup
Data de parceiro da fatura (invoice_partners)
invoice_number
Número do documento de vendas e distribuição
line_number
Item de cobrança
partner_type
Tipo de cliente
partner_number
Número do cliente 1
contact_number
Número da pessoa de contato
partner_name
Nome
Street
Rua e número da residência
po_box
Caixa postal
City
Cidade
postal_code
CEP
pobox_postal_code
CEP da caixa postal
Country
Chave do país
tel_number
Primeiro número de telefone
fax_number
Número do fax
District
Distrito
Region
Região (Estado, Província e País)
BankDetails (invoice_bankinfo)
invoice_number
Número do documento de vendas e distribuição
name
Nome do banco
bank_keys
Chaves do banco
bank_number
Número do banco
bank_branchid
Agência bancária
bank_account_number
Número da conta bancária
currency
Moeda do banco
Número de conta bancária alternativa (para números de conta
alternative_bank_account
ambíguos)
lockbox_number
Número de LockBox
9 | Manual de referência do serviço da Web
swiftcode
iban
bank_control_key
country
address
city
district
region
postalcode
Código SWIFT para pagamentos internacionais
IBAN (Número de conta bancária nternacional)
Chave de controle do banco
País
tel_number
Nº do telefone
N° do fax
Código info-ABI/código CAB/GIRO/código de classificação etc.
adicional
fax_number
additional
Endereço do banco
Cidade
Distrito
Região (Estado, Província e País)
CEP / Caixa postal
4.4 Esquema de erro
Nome do campo
status
message
transactionid
Descrição
Resposta de confirmação: "OK", "FALHA", "ERRO"
Mensagem de falha ou erros
ID exclusivo de transação (combinação de número da fatura e
registro de data e hora)
4.5 Mensagem de solicitação
Em função dos parâmetros de entrada, a operação getInvoiceList() ou getInvoiceDetails() será
executada. Se a entrada tiver os parâmetros "de data" e "para data", getInvoiceList() será executado.
Se a entrada tiver o Número da ordem de compra, o Número da fatura ou o Número do pedido de
vendas, getInvoiceDetails() será executado.
Abaixo estão as solicitações de amostra para as operações.
4.5.1
Mensagem de solicitação - GetInvoiceList
http://enterprise-apistg.autodesk.com/v1/invoices?customer_number=5117338390&invoice_date_from=201406-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>>
10 | Manual de referência do serviço da Web
4.5.2
Mensagem de solicitação - GetInvoiceDetails
http://enterprise-apistg.autodesk.com/v1/invoices?customer_number=5113338390&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-apistg.autodesk.com/v1/invoices?customer_number=5113338390&invoice_number=9052068717&sal
es_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-apistg.autodesk.com/v1/invoices?customer_number=5113338390&invoice_number=905206871&pur
chase_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-apistg.autodesk.com/v1/invoices?customer_number=5113338390&invoice_number=9052068717&sal
es_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>>
11 | Manual de referência do serviço da Web
4.6 Mensagem de resposta
Nota: a Autodesk enviará uma resposta com a estrutura a seguir. Os Parceiros podem reformatar para
diferentes estruturas de acordo com suas necessidades.
4.6.1
Mensagem de resposta - GetInvoiceList
{
"status": "OK",
"transaction_id": "INV701765101433844843",
"message": [
{
"invoice_number": "9052238559",
"purchase_order_number": "9833356789",
"bill_to_customer": "5117444390",
"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 ": "5117338390",
"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
Mensagem de resposta - GetInvoiceDetails
{
"status": "OK",
"transaction_id": "INV701765101433844843",
"message": [
{
"invoice_bankinfo": [
{
12 | Manual de referência do serviço da Web
“invoice_number”:” 9044468717”,
"name": "Merghle",
"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",
13 | Manual de referência do serviço da Web
"customer_po_number": "",
"transaction_type": "Invoice",
"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": ""
}
],
"invoice_partners": [
14 | Manual de referência do serviço da 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": "5117344490",
"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": "5117338390",
"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"
15 | Manual de referência do serviço da 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": "5113333390",
"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: no caso de vários tipos de impostos e taxas de impostos, o serviço retornará os dados como
mostrado abaixo.
Aqui os valores são separados por ';', e tax_type e tax_rate serão fornecidos na sequência (por
exemplo, tax_rate de 7,975% corresponde ao tipo de impostos "TPS" e tax_rate de 7% corresponde ao
tax_type "TVQ")
16 | Manual de referência do serviço da Web
4.7 Mensagens de erro
A tabela a seguir mostra os códigos de erro e as respectivas mensagens de erro presentes na
resposta mensagens caso um erro seja encontrado:
Mensagem de erro
Código de erro
Descrição do erro
Insira o Número do cliente
UAN-GEN-00108
Número do cliente com valor em
branco
O campo não pode ser deixado em
branco. Insira a data
UAN-GEN-00108
De data da fatura / Para data da
fatura com valor em branco
O intervalo de datas não deve ter mais
de 90 dias. Verifique sua entrada e tente
novamente
UAN-GEN-00141
Para verificar se um intervalo de
datas tem mais de 90 dias
O número do cliente não pode ter mais
de 10 caracteres. Verifique sua entrada
e tente novamente
UAN-GEN-00123
Para verificar se o Número do
cliente tem mais de 10 caracteres
Insira a De data válida no formato
AAAA-MM-DD
UAN-GEN-00119
Para verificar o formato de data
Insira a Para data válida no formato
AAAA-MM-DD
UAN-GEN-00119
Para verificar o formato de data
Problema do sistema que impede o
processamento. Tente novamente mais
tarde
UAN-GEN-00122
Exceção técnica
Número da fatura deve ter exatos 10
caracteres. Verifique sua entrada e
tente novamente
UAN-GEN-00123
Para verificar se o número da
fatura
menos ou mais de 10 caracteres
O Número do pedido de vendas deve
ter exatos 10 caracteres. Verifique sua
entrada e tente novamente
UAN-GEN-00123
Para verificar se o número do
pedido de vendas é menor ou
mais de 10 caracteres
De data da fatura deve ser anterior à
Para data da fatura
UAN-INV-00002
Para verificar se o valor De data
da fatura é anterior à Para data da
fatura
O Número do cliente fornecido é
inválido.
APG-DWS-INV002
Se o CSN enviado pelo parceiro
for inválido
{
-
A camada do serviço para
responder com a mensagem em
branco se não houver nenhum
registro encontrado para a
pesquisa atual
"status": "OK",
"transaction_id":
"INV701111351434507983",
"message": []
}
17 | Manual de referência do serviço da Web
4.7.1
Amostra de resposta de erro
{
"status": "Error",
"transactionid": "INV51046287871433503736",
"message": [
{
"error_code": "UAN-GEN-00108",
"error_message": "Please enter Customer Number"
}
]
}
5 Apêndice
5.1 Código C# para inserir vários CSNs
O seguinte é um exemplo de script que os Parceiros podem gravar para inserir vários CSNs no
serviço GetInvoice. Já que o serviço GetInvoice só pode processar um único CSN por solicitação, é
necessário programar seu aplicativo com isso em mente. Uma forma de fazer isso é programar um
loop que faz uma solicitação para cada CSN fornecido, levando em consideração a geração de
assinaturas e tokens de acesso. Um exemplo de código que faz isso é mostrado abaixo.
5.1.1
using
using
using
using
using
using
using
Programa principal
System;
System.Collections.Generic;
System.Text;
MultipleInvoiceCallPoC.POCOs;
Newtonsoft.Json;
System.Diagnostics;
System.Threading;
namespace MultipleInvoiceCallPoC
{
class Program
{
static void Main(string[] args)
{
//"Acquiring credentials
var credentials = new Credentials
{
BasePath = "https://www.example.com",
ConsumerKey = "DcM03alqHyT3uv2P2cYQV0gq8K0qqKNf",
ConsumerSecret = "VBqY7IKSoIW2ZbZ3",
CSNs = new List<string>()
{
"70044566",
"70044567",
"70044568",
18 | Manual de referência do serviço da Web
"70044569",
"70044570"
}
};
// 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-apistg.autodesk.com/v1/invoices?customer_number={0}&invoice_date_from=2015-0801&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 de Utilitários
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>
19 | Manual de referência do serviço da Web
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);
var result = string.Empty;
result = responseStream.ReadToEnd();
response.Close();
return result;
}
20 | Manual de referência do serviço da Web
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-apidev.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>
/// <returns>classs containing a signed access token</returns>
public static SecondSignature GetSecondSignature(AccessToken token, Credentials
credentials)
{
var secondSignature = new SecondSignature
21 | Manual de referência do serviço da Web
{
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>
public static string GenerateSignature(string message, string secret)
{
var encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(secret);
byte[] messageBytes = encoding.GetBytes(message);
22 | Manual de referência do serviço da Web
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
POCOs
namespace MultipleInvoiceCallPoC
{
/// <summary>
/// Class used to store Access
/// </summary>
public class AccessToken
{
public string access_token
public string expires_in {
public string token_type {
}
}
Token data
{ get; set; }
get; set; }
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; }
}
}
namespace MultipleInvoiceCallPoC.POCOs
{
23 | Manual de referência do serviço da Web
/// <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; }
public string transaction_id { get; set; }
public Invoice[] message { get; set; }
}
/// <summary>
24 | Manual de referência do serviço da Web
/// 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 referência do serviço é para uso exclusivo pelos destinatários
pretendidos e pode conter informações proprietárias e/ou confidenciais que podem ser
privilegiadas ou protegidas contra divulgação. Qualquer revisão, utilização, divulgação ou
distribuição não autorizada é proibida.
25 | Manual de referência do serviço da Web

Documentos relacionados