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:


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.

Instanciando e configurando o SDK

Adicione a unit SDK.DeliveryPharmacy.V2 no uses da unit onde vai instanciar o objeto.

uses
  SDK.DeliveryPharmacy.V2;

Antes de instanciar o objeto pela primeira vez, execute o comando abaixo:

TDeliveryPharmacy.Configure('Informe o token aqui', 'Informe o ID da empresa aqui', 'Informe o ID do ERP aqui');

O token, o ID da empresa e o ID do ERP serão fornecidos pela Synapse Tecnologia.

Crie um variável do tipo TDeliveryPharmacy:

var
  LSDK: TDeliveryPharmacy;

Instancie o objeto:

LSDK := TDeliveryPharmacy.Create;

Não se esquece de destruir o objeto da memória após seu uso:

LSDK.Free;

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.  
				

Response

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.isOK then
    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.  
				

Métodos de Produtos
Método para adicionar produtos no Delivery Pharmacy
procedure PostProduto(ABody: TJSONObject);

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

Método para alterar produtos no Delivery Pharmacy
procedure PutProduto(AID: String; ABody: TJSONObject);

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

Método para alterar valores e disponibilidade de produtos no Delivery Pharmacy
procedure PutProdutoValor(AID: String; ABody: TJSONObject);

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

Métodos de Promoções
Método para adicionar promoções no Delivery Pharmacy
procedure PostPromocao(ABody: TJSONObject);

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

Método para alterar promoções no Delivery Pharmacy
procedure PutPromocao(AID: String; ABody: TJSONObject);

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

Método para deletar promoções no Delivery Pharmacy
procedure DeletePromocao(AID: String);

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

Método para adicionar/alterar produtos nas promoções no Delivery Pharmacy
procedure PostPromocaoProduto(AIDPromocao, AIDProduto: String; ABody: TJSONObject);

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

Método para deletar produtos nas promoções no Delivery Pharmacy
procedure DeletePromocaoProduto(AIDPromocao, AIDProduto: String);

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

Métodos de Formas de Pagamento
Método para adicionar formas de pagamento no Delivery Pharmacy
procedure PostFormaPagto(ABody: TJSONObject);

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

Métodos de Pedidos
Método para consultar os pedidos disponíveis no Delivery Pharmacy
procedure GetPedidos;

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": []
}
				
Método para consultar os dados de um pedido específico no Delivery Pharmacy
procedure GetPedido(AID: String);

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

Método para marcar um pedido específico como sincronizado no Delivery Pharmacy
procedure PutPedidoSincronizado(AID: String);
Ao marcar um pedido como sincronizado, o mesmo não será mais retornado pelo método "GetPedidos"

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

Método para cancelar um pedido específico no Delivery Pharmacy
procedure PutPedidoCancelado(AID, AMotivo: String);

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.  
				
Em caso de sucesso, esse método não tem um JSON no Response.

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: