Delphi: Integração fácil com o Delivery Pharmacy
Introdução
Bem-vindo à nossa documentação!
Aqui você encontrará todas as informações necessárias para integrar seu sistema desenvolvido em Delphi com o Delivery Pharmacy.
Existem algumas opções distintas na qual você poderá decidir qual a que faz mais sentido para você.
Confira abaixo um resumo de cada forma de integração disponível:
- API
A forma mais direta e mais recomendada de se fazer a integração.
O Delivery Pharmacy possui uma API REST onde você poderá estar sempre atualizando os dados de seus produtos, promoções, formas de pagamento, etc e também recebendo os dados dos pedidos efetuados no Delivery Pharmacy.
Requer conhecimento de comunicação com APIs (Client REST, Indy ou outro), procotolo HTTP e JSON. - SDK
O SDK encapsula toda a comunicação com a API do Delivery Pharmacy, eliminando assim a necessidade de conhecimento prévio sobre comunicação com APIs.
Possui uma única unit (SDK.DeliveryPharmacy.V2.pas) que possui a classe TDeliveryPharmacy que contém todos os métodos necessários para fazer a comunicação com a API do Delivery Pharmacy.
Requer conhecimento de procotolo HTTP e JSON. - DLL
A DLL encapsula toda a comunicação com a API do Delivery Pharmacy, eliminando assim a necessidade de conhecimento prévio sobre comunicação com APIs.
A DLL contém todos os métodos necessários para fazer a comunicação com a API do Delivery Pharmacy.
Requer conhecimento de procotolo HTTP e JSON. - Componentes
Compatível com Delphi XE8 ou superior, faz toda a comunicação com a API, bastando apenas utilizar os componentes, suas propriedades e seus métodos.
São apenas seis componentes:
TDPManager
Responsável pelo gerenciamento das comunicações com a API, incluindo os dados de login.
TDPProduto
Responsável por cadastrar e atualizar os dados dos produtos.
TDPFormaPagamento
Responsável por cadastrar as formas de pagamento.
TDPPromocao e TDPPromocaoProduto
Responsáveis por cadastrar e atualizar as promoções.
TDPPedido
Responsável por receber os dados dos pedidos efetuados no Delivery Pharmacy.
Podem ser utilizados tanto em VCL quanto em FMX (Firemonkey).
Não requer conhecimento prévio. - sHub
O sHub é um sincronizador de dados desenvolvido pela Synapse Tecnologia possibilitando que outros softwares se comuniquem com nossas tecnologias.
O sHub é 100% compatível com o Delivery Pharmacy e para que o seu sistema sincronize dados com o Delivery Pharmacy, você não precisa alterar uma linha sequer no seu código-fonte.
Você precisará apenas criar triggers e tabelas no seu banco de dados seguindo as estruturas descritas na documentação do sHub na seção "Delivery Pharmacy".
Requer instalação e configuração no cliente.
O banco de dados do seu software deverá ser um dos suportados pelo sHub.
(Confira a lista de bancos compatíveis na documentação do sHub)
E aí? Decidiu qual a forma que faz mais sentido para você?
Então selecione tal opção no menu lateral para ter mais informações sobre a mesma.
Ainda tem dúvidas?
Então entre em contato conosco, pois teremos imenso prazer em ajudá-lo.
API
A documentação completa da API do Delivery Pharmacy está disponível em https://api.deliverypharmacy.com.br/docs
SDK
Baixe o SDK clicando aqui.
Após baixar o SDK, descompacte e adicione o arquivo SDK.DeliveryPharmacy.V2.pas ao projeto do seu software.
Baixe o Sample do SDK com todos os exemplos de uso, clicando aqui.
Adicione a unit SDK.DeliveryPharmacy.V2 no uses da unit onde vai instanciar o objeto.
SDK.DeliveryPharmacy.V2;
Antes de instanciar o objeto pela primeira vez, execute o comando abaixo:
O token, o ID da empresa e o ID do ERP serão fornecidos pela Synapse Tecnologia.
Crie um variável do tipo TDeliveryPharmacy:
LSDK: TDeliveryPharmacy;
Instancie o objeto:
Não se esquece de destruir o objeto da memória após seu uso:
Resumo:
unit Teste;interface procedure Teste;implementation uses SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy;begin //Coloque os dados de acesso aqui //Executar uma única vez no sistema antes de instanciar o objeto TDeliveryPharmacy pela primeira vez //Pode ser na inicialização do sistema //O ID do ERP será fixo para todos os seus clientes //O token e o ID da empresa serão diferentes para cada cliente TDeliveryPharmacy.Configure('Informe o token aqui' ,'Informe o ID da empresa aqui' ,'Informe o ID do ERP aqui' ); LSDK := TDeliveryPharmacy.Create;try // Adicione aqui o seu código (...)finally LSDK.Free;end; end; end.
O objeto possui um método chamado Response que armazena a resposta da última requisição feita à API.
Através do método Response, você consegue extrair as seguintes informações:
- StatusCode (Integer)
Código de status retornado pela API segundo o protocolo HTTP. - StatusText (String)
Texto do status retornado pela API segundo o protocolo HTTP. - StatusText (TJSONValue)
JSON retornado pela API. - isOK (Boolean)
Em caso de sucesso na requisição (StatusCode entre 200 e 299) retornará true.
Exemplo de uso do Response:
unit Teste;interface function Teste: String;implementation uses System.SysUtils, SDK.DeliveryPharmacy.V2;function Teste: String;var LSDK: TDeliveryPharmacy;begin LSDK := TDeliveryPharmacy.Create;try LSDK.GetPedidos;// Consulta os pedidos disponíveis if LSDK.Response.isOKthen begin Result := 'Status Code: ' + LSDK.Response.StatusCode.ToString + sLineBreak + 'Status Text: ' + LSDK.Response.StatusText + sLineBreak + 'JSON: ' + LSDK.Response.JSON.ToString;end else Result := 'Deu erro na requisição com o Status Code (' + LSDK.Response.StatusCode.ToString + ')';finally LSDK.Free;end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses System.JSON, SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy; LJSON: TJSONObject; LJSONCodigosBarras: TJSONArray;begin LSDK := TDeliveryPharmacy.Create;try LJSONCodigosBarras := TJSONArray.Create .Add('7896094921344' ) .Add('7896026303002' ); LJSON := TJSONObject.Create .AddPair('codigo' ,'1' )// Código do produto no software da loja .AddPair('nome' ,'BUSCOFEM 400MG C 10 CAPS' )// Nome do produto no software da loja .AddPair('valor' ,26.14 )// Valor/Preço de venda do produto na loja .AddPair('indisponivel ',false )// Disponibilidade do item na loja // (Item sem estoque e/ou indisponível informar "true") .AddPair('inativo' ,false )// Item inativo ou deletado na loja // (Se item estiver inativo ou for deletado na loja // deve ser informado "true") .AddPair('codigo_barras' ,'7896094921344' )// Código de barras do produto no software da loja .AddPair('lista_codigo_barras ',LJSONCodigosBarras )// Matriz com todos os códigos de barras do produto no // software da loja, inclusive o código informado no // campo "CodigoBarras" // Os próximos campos são opcionais, envie se quiser, mas quanto mais informações sobre o produto, melhor. .AddPair('descricao' ,'Breve descrição do produto' )// Descrição do produto (Detalhes, características // e informações do produto) .AddPair('quantidade_caixa' ,0 )// Quantidade de itens na caixa/pack. (Para venda de // itens em caixas/pack fechados) .AddPair('valor_promocao' ,24.5 )// Valor/Preço promocional do produto na loja .AddPair('estoque' ,15 )// Quantidade em estoque do produto na loja .AddPair('principio_ativo' ,'Ibuprofeno' );// Princípio ativo do produto LSDK.PostProduto(LJSON );finally LSDK.Free;// Obs.: Não há a necessidade de destruir o LJSON, pois o mesmo será destruído pelo método PostProduto. end; end; end.
Exemplo de JSON do Response em caso de sucesso:
{
"id_produto": "1723566393557x626282918175512703"
}
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses System.JSON, SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy; LJSON: TJSONObject; LJSONCodigosBarras: TJSONArray;begin LSDK := TDeliveryPharmacy.Create;try LJSONCodigosBarras := TJSONArray.Create .Add('7896094921344' ) .Add('7896026303002' ); LJSON := TJSONObject.Create .AddPair('codigo' ,'1' )// Código do produto no software da loja .AddPair('nome' ,'BUSCOFEM 400MG C 10 CAPS' )// Nome do produto no software da loja .AddPair('valor' ,26.14 )// Valor/Preço de venda do produto na loja .AddPair('indisponivel ',false )// Disponibilidade do item na loja // (Item sem estoque e/ou indisponível informar "true") .AddPair('inativo' ,false )// Item inativo ou deletado na loja // (Se item estiver inativo ou for deletado na loja // deve ser informado "true") .AddPair('codigo_barras' ,'7896094921344' )// Código de barras do produto no software da loja .AddPair('lista_codigo_barras ',LJSONCodigosBarras )// Matriz com todos os códigos de barras do produto no // software da loja, inclusive o código informado no // campo "CodigoBarras" // Os próximos campos são opcionais, envie se quiser, mas quanto mais informações sobre o produto, melhor. .AddPair('descricao' ,'Breve descrição do produto' )// Descrição do produto (Detalhes, características // e informações do produto) .AddPair('quantidade_caixa' ,0 )// Quantidade de itens na caixa/pack. (Para venda de // itens em caixas/pack fechados) .AddPair('valor_promocao' ,24.5 )// Valor/Preço promocional do produto na loja .AddPair('estoque' ,15 )// Quantidade em estoque do produto na loja .AddPair('principio_ativo' ,'Ibuprofeno' );// Princípio ativo do produto // O que muda nesse método é a obrigação de informar o ID do produto para que o mesmo possa ser modificado no Delivery Pharmacy LSDK.PutProduto('1722006460810x103346268033777660' ,LJSON );finally LSDK.Free;// Obs.: Não há a necessidade de destruir o LJSON, pois o mesmo será destruído pelo método PutProduto. end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses System.JSON, SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy; LJSON: TJSONObject;begin LSDK := TDeliveryPharmacy.Create;try LJSON := TJSONObject.Create .AddPair('valor' ,26.14 )// Valor/Preço de venda do produto na loja .AddPair('indisponivel ',false )// Disponibilidade do item na loja // (Item sem estoque e/ou indisponível informar "true") .AddPair('inativo' ,false )// Item inativo ou deletado na loja // (Se item estiver inativo ou for deletado na loja // deve ser informado "true") // Os próximos campos são opcionais, envie se quiser, mas quanto mais informações sobre o produto, melhor. .AddPair('valor_promocao' ,24.5 );// Valor/Preço promocional do produto na loja // O que muda nesse método é que o JSON informado possui menos campos LSDK.PutProdutoValor('1722006460810x103346268033777660' ,LJSON );finally LSDK.Free;// Obs.: Não há a necessidade de destruir o LJSON, pois o mesmo será destruído pelo método PutProdutoValor. end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses System.JSON, SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy; LJSON: TJSONObject;begin LSDK := TDeliveryPharmacy.Create;try LJSON := TJSONObject.Create .AddPair('ativa' ,true )// Promoção ativa informar "true" e se inativa informar "false" .AddPair('inicio' ,'2024-07-01' )// Data inicial da promoção no formato yyyy-mm-dd .AddPair('termino' ,'2024-07-31' )// Data final da promoção no formato yyyy-mm-dd .AddPair('nome' ,'Nome da promoção' )// Nome da promoção .AddPair('codigo' ,'1' )// Código da promoção no software da loja .AddPair('tipo' ,0 );// Informar 0 (Desconto Porcentagem) ou 1 (Desconto Valor) LSDK.PostPromocao(LJSON );finally LSDK.Free;// Obs.: Não há a necessidade de destruir o LJSON, pois o mesmo será destruído pelo método PostPromocao. end; end; end.
Exemplo de JSON do Response em caso de sucesso:
{
"id_promocao": "1723566393557x626282918175512703"
}
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses System.JSON, SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy; LJSON: TJSONObject;begin LSDK := TDeliveryPharmacy.Create;try LJSON := TJSONObject.Create .AddPair('ativa' ,true )// Promoção ativa informar "true" e se inativa informar "false" .AddPair('inicio' ,'2024-07-01' )// Data inicial da promoção no formato yyyy-mm-dd .AddPair('termino' ,'2024-07-31' )// Data final da promoção no formato yyyy-mm-dd .AddPair('nome' ,'Nome da promoção' )// Nome da promoção .AddPair('codigo' ,'1' )// Código da promoção no software da loja .AddPair('tipo' ,0 );// Informar 0 (Desconto Porcentagem) ou 1 (Desconto Valor) // O que muda nesse método é a obrigação de informar o ID do produto para que o mesmo possa ser modificado no Delivery Pharmacy LSDK.PutPromocao('1722006460810x103346268033777660' ,LJSON );finally LSDK.Free;// Obs.: Não há a necessidade de destruir o LJSON, pois o mesmo será destruído pelo método PutPromocao. end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy;begin LSDK := TDeliveryPharmacy.Create;try LSDK.DeletePromocao('1722006460810x103346268033777660' );finally LSDK.Free;end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses System.JSON, SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy; LJSON: TJSONObject;begin LSDK := TDeliveryPharmacy.Create;try LJSON := TJSONObject.Create .AddPair('porcentagem' ,5.5 )// Porcentagem do desconto a ser aplicado sobre o preço do produto. // (Se Tipo da promoção for "Desconto Porcentagem") .AddPair('valor' ,0 );// Valor do produto com desconto aplicado. // (Se Tipo da promoção for "Desconto Valor") LSDK.PostPromocaoProduto('1723566393557x626282918175512703' ,'1722006460810x103346268033777660' ,LJSON );finally LSDK.Free;// Obs.: Não há a necessidade de destruir o LJSON, pois o mesmo será destruído pelo método PostPromocaoProduto. end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy;begin LSDK := TDeliveryPharmacy.Create;try LSDK.DeletePromocaoProduto('1723566393557x626282918175512703' ,'1722006460810x103346268033777660' );finally LSDK.Free;end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses System.JSON, SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy; LJSON: TJSONObject;begin LSDK := TDeliveryPharmacy.Create;try LJSON := TJSONObject.Create .AddPair('codigo' ,'1' )// Código da forma de pagamento no software da loja .AddPair('nome' ,'Pix' )// Nome da forma de pagamento no software da loja .AddPair('pedir_troco' ,False );// Se forma de pagamento permitir troco informar "true" (Ex.: Dinheiro) // e se não permitir informar "false" (Ex.: Cartão Crédito) LSDK.PostFormaPagto(LJSON );finally LSDK.Free;// Obs.: Não há a necessidade de destruir o LJSON, pois o mesmo será destruído pelo método PostFormaPagto. end; end; end.
Exemplo de JSON do Response em caso de sucesso:
{
"id_forma_pagto": "1723566393557x626282918175512703"
}
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy;begin LSDK := TDeliveryPharmacy.Create;try LSDK.GetPedidos;finally LSDK.Free;end; end; end.
Exemplo de JSON do Response em caso de sucesso:
{
"pedidos":
[
"1723566393557x626282918175512703" ,
"1720462212611x950696853734970401"
]
}
No exemplo acima, estão disponíveis 2 pedidos.
Caso não tenha nenhum pedido disponível, o JSON do Response será assim:
{
"pedidos": []
}
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy;begin LSDK := TDeliveryPharmacy.Create;try LSDK.GetPedido('1720462212611x950696853734970401' );finally LSDK.Free;end; end; end.
Exemplo de JSON do Response em caso de sucesso:
{
"id_cliente" : "1715884613190x897532733560975800" ,
"cliente_cpf" : "123.456.789-09" ,
"cliente_email" : "cliente@exemplo.com.br" ,
"cliente_nome" : "Hélio" ,
"cliente_endereco_logradouro" : "Rua das Alamedas" ,
"cliente_endereco_numero" : "20" ,
"cliente_endereco_complemento" : "" ,
"cliente_endereco_referencia" : "" ,
"cliente_endereco_bairro" : "Centro" ,
"cliente_endereco_cidade" : "Santo Antônio de Pádua" ,
"cliente_endereco_uf" : "RJ" ,
"cliente_endereco_cep" : "28470-000" ,
"cliente_telefone" : "(22) 00000-1111" ,
"forma_entrega" : "Entrega no Endereço" ,
"forma_pagamento" : "1" ,
"nao_precisa_troco" : false ,
"troco_para" : 10.00 ,
"status_efetuado" : "2024-07-08 18:10:27" ,
"status_pronto_entrega" : "2024-07-08 18:10:57" ,
"status_saiu_entrega" : "" ,
"status_entrega" : "" ,
"status_sincronizado" : "2024-07-17 15:53:56" ,
"status_cancelado" : "2024-07-17 15:53:52" ,
"status_motivo_cancelamento" : "Teste" ,
"cupom" : "" ,
"valor_cupom" : 0.00 ,
"valor_taxa_entrega" : 0.00 ,
"valor_produtos" : 0.40 ,
"valor_total" : 0.40 ,
"numero_pedido" : 52 ,
"vendedor_email" : "" ,
"id_vendedor" : "" ,
"produtos" :
[
{
"codigo" : "6702" ,
"quantidade" : 1 ,
"vr_unitario" : 0.40 ,
"vr_total" : 0.4
},
{
"codigo" : "6542" ,
"quantidade" : 3 ,
"vr_unitario" : 1.50 ,
"vr_total" : 4.5
}
]
}
| Campo | Descrição | Tipo |
|---|---|---|
| id_cliente | ID do cliente no Delivery Pharmacy | String |
| cliente_cpf | CPF do cliente | String |
| cliente_email | e-Mail do cliente que fez o pedido | String |
| cliente_nome | Nome do cliente | String |
| cliente_endereco_logradouro | Nome da rua, praça, avenida, etc | String |
| cliente_endereco_numero | Número do endereço | String |
| cliente_endereco_complemento | Complemento do endereço | String |
| cliente_endereco_referencia | Ponto de referência do endereço | String |
| cliente_endereco_bairro | Nome do bairro | String |
| cliente_endereco_cidade | Nome da cidade | String |
| cliente_endereco_uf | UF da cidade | String |
| cliente_endereco_cep | CEP do endereço | String |
| cliente_telefone | Telefone do cliente | String |
| forma_entrega | "Entrega no Endereço" ou "Retirar na Loja" | String |
| forma_pagamento | Código da forma de pagamento | String |
| nao_precisa_troco | Se é necessário enviar troco ou não | Boolean |
| troco_para | Valor para calcular troco | Double |
| status_efetuado | Data e hora que efetuado o pedido | TDateTime |
| status_pronto_entrega | Data e hora que pedido foi para pronto para entrega | TDateTime |
| status_saiu_entrega | Data e hora que pedido foi para saiu para entrega | TDateTime |
| status_entrega | Data e hora que pedido foi entregue | TDateTime |
| status_sincronizado | Data e hora que pedido foi sincronizado | TDateTime |
| status_cancelado | Data e hora que pedido foi cancelado | TDateTime |
| status_motivo_cancelamento | Motivo do cancelamento do pedido | String |
| cupom | Nome/Titulo do cupom de desconto aplicado no pedido. Ex.: DESCONTO20 |
String |
| valor_cupom | Valor do desconto cupom de desconto aplicado no pedido | Double |
| valor_taxa_entrega | Valor da taxa de entrega aplicada no pedido | Double |
| valor_produtos | Valor dos produtos (sem descontos e taxa de entrega) | Double |
| valor_total | Valor total liquido do pedido | Double |
| numero_pedido | Número sequencial do pedido no Delivery Pharmacy | Integer |
| vendedor_email | Email do vendedor (Quando usado o link de venda) | String |
| id_vendedor | ID do vendedor no Delivery Pharmacy | String |
| produtos | Lista com os produtos do pedido | TJSONArray |
| codigo | ID do produto no Delivery Pharmacy | String |
| quantidade | Quantidade do produto do pedido | Double |
| vr_unitario | Valor unitário do produto do pedido (com descontos) | Double |
| vr_total | Valor total (quantidade x unitário) do produto do pedido (com descontos) | Double |
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy;begin LSDK := TDeliveryPharmacy.Create;try LSDK.PutPedidoSincronizado('1720462212611x950696853734970401' );finally LSDK.Free;end; end; end.
Exemplo de uso:
unit Teste;interface procedure Teste;implementation uses SDK.DeliveryPharmacy.V2;procedure Teste;var LSDK: TDeliveryPharmacy;begin LSDK := TDeliveryPharmacy.Create;try LSDK.PutPedidoCancelado('1720462212611x950696853734970401' ,'Cancelado por falta de estoque' );finally LSDK.Free;end; end; end.
DLL
Em breve!
Componentes
Em breve!
sHub
A documentação completa do sHub está disponível em https://shub.deliverypharmacy.com.br
Contato
Se precisar de mais ajuda, entre em contato conosco:
- integracao@deliverypharmacy.com.br