Ir para conteúdo
Fórum Script Brasil
  • 0

Duvidas com WSDL F2B Delphi


Hudson Dias

Pergunta

Ola Gente,

Sou novo com webservices e através de videos do Rodrigo Mourão consegui fazer alguma coisa, porem, preciso associar a um serviço de webservices da f2b (www.f2b.com.br) onde posso gerar carnês e boletos. Já usava o ws em php em outro sistema online, porem a empresa esta migrando tudo para o delphi, e não estou conseguindo fazer isso funcionar. Esse é o wsdl  http://www.f2b.com.br/soap/wsbilling.wsdl xml. 

 

alguém pode me ajudar? Preciso muito de fazer isso funcionar, deste já agradeço.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

 

Exemplo:  Tem parte do que voce vai precisar

http://www.comunix.net/integracao/delphi1.htm

Voce conseguiu importar o WSDL F2B ?

 

// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : http://www.f2b.com.br/soap/wsbilling.wsdl
// Version  : 1.0
// (8/28/2017 20:23:14 - 1.33.2.5)
// ************************************************************************ //

unit wsbilling;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Borland types; however, they could also
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:date            - ""
  // !:string          - ""
  // !:string          - "http://www.f2b.com.br/soap/wsbilling.xsd"
  // !:decimal         - "http://www.f2b.com.br/soap/wsbilling.xsd"
  // !:integer         - "http://www.f2b.com.br/soap/wsbilling.xsd"
  // !:integer         - ""

  mensagem             = class;                 { "http://www.f2b.com.br/soap/wsbilling.xsd" }
  sacador              = class;                 { "http://www.f2b.com.br/soap/wsbilling.xsd" }
  sacado               = class;                 { "http://www.f2b.com.br/soap/wsbilling.xsd" }
  cobranca             = class;                 { "http://www.f2b.com.br/soap/wsbilling.xsd" }
  agendamento          = class;                 { "http://www.f2b.com.br/soap/wsbilling.xsd" }
  carne                = class;                 { "http://www.f2b.com.br/soap/wsbilling.xsd" }



  // ************************************************************************ //
  // Namespace : http://www.f2b.com.br/soap/wsbilling.xsd
  // ************************************************************************ //
  mensagem = class(TRemotable)
  private
    Fdata: TXSDate;
    Fnumero: WideString;
    Ftipo_ws: WideString;
  public
    destructor Destroy; override;
  published
    property data: TXSDate read Fdata write Fdata stored AS_ATTRIBUTE;
    property numero: WideString read Fnumero write Fnumero stored AS_ATTRIBUTE;
    property tipo_ws: WideString read Ftipo_ws write Ftipo_ws stored AS_ATTRIBUTE;
  end;



  // ************************************************************************ //
  // Namespace : http://www.f2b.com.br/soap/wsbilling.xsd
  // ************************************************************************ //
  sacador = class(TRemotable)
  private
    Fconta: WideString;
  published
    property conta: WideString read Fconta write Fconta stored AS_ATTRIBUTE;
  end;



  // ************************************************************************ //
  // Namespace : http://www.f2b.com.br/soap/wsbilling.xsd
  // ************************************************************************ //
  sacado = class(TRemotable)
  private
    Fnome: WideString;
    Femail: WideString;
    Fnumero: integer;
  published
    property nome: WideString read Fnome write Fnome;
    property email: WideString read Femail write Femail;
    property numero: integer read Fnumero write Fnumero stored AS_ATTRIBUTE;
  end;



  // ************************************************************************ //
  // Namespace : http://www.f2b.com.br/soap/wsbilling.xsd
  // ************************************************************************ //
  cobranca = class(TRemotable)
  private
    Fnome: WideString;
    Femail: WideString;
    Furl: WideString;
    Fnumero: integer;
    Ftaxa_registro: TXSDecimal;
    Fnosso_numero: integer;
  public
    destructor Destroy; override;
  published
    property nome: WideString read Fnome write Fnome;
    property email: WideString read Femail write Femail;
    property url: WideString read Furl write Furl;
    property numero: integer read Fnumero write Fnumero stored AS_ATTRIBUTE;
    property taxa_registro: TXSDecimal read Ftaxa_registro write Ftaxa_registro stored AS_ATTRIBUTE;
    property nosso_numero: integer read Fnosso_numero write Fnosso_numero stored AS_ATTRIBUTE;
  end;



  // ************************************************************************ //
  // Namespace : http://www.f2b.com.br/soap/wsbilling.xsd
  // ************************************************************************ //
  agendamento = class(TRemotable)
  private
    Fnumero: integer;
  published
    property numero: integer read Fnumero write Fnumero stored AS_ATTRIBUTE;
  end;



  // ************************************************************************ //
  // Namespace : http://www.f2b.com.br/soap/wsbilling.xsd
  // ************************************************************************ //
  carne = class(TRemotable)
  private
    Furl: WideString;
    Fnumero: integer;
  published
    property url: WideString read Furl write Furl;
    property numero: integer read Fnumero write Fnumero stored AS_ATTRIBUTE;
  end;


  // ************************************************************************ //
  // Namespace : http://www.f2b.com.br/soap/wsbilling.wsdl
  // soapAction: http://www.f2b.com.br/WSBilling
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : document
  // binding   : WSBillingSoapBinding
  // service   : WSBillingService
  // port      : WSBillingPort
  // URL       : http://www.f2b.com.br/WSBilling
  // ************************************************************************ //
  WSBillingPortType = interface(IInvokable)
  ['{DC9D6CF3-573C-BE72-1294-6C478CD6B303}']
    procedure RegisterWSBilling(const mensagem: mensagem; const sacador: sacador; const cobranca: cobranca; const agendamento: agendamento; const sacado: sacado; out sacado: sacado; out agendamento: agendamento; out cobranca: cobranca; out carne: carne; out log: WideString
                                ); stdcall;
  end;

function GetWSBillingPortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): WSBillingPortType;


implementation

function GetWSBillingPortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): WSBillingPortType;
const
  defWSDL = 'http://www.f2b.com.br/soap/wsbilling.wsdl';
  defURL  = 'http://www.f2b.com.br/WSBilling';
  defSvc  = 'WSBillingService';
  defPrt  = 'WSBillingPort';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as WSBillingPortType);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


destructor mensagem.Destroy;
begin
  if Assigned(Fdata) then
    Fdata.Free;
  inherited Destroy;
end;

destructor cobranca.Destroy;
begin
  if Assigned(Ftaxa_registro) then
    Ftaxa_registro.Free;
  inherited Destroy;
end;

initialization
  InvRegistry.RegisterInterface(TypeInfo(WSBillingPortType), 'http://www.f2b.com.br/soap/wsbilling.wsdl', '');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(WSBillingPortType), 'http://www.f2b.com.br/WSBilling');
  InvRegistry.RegisterInvokeOptions(TypeInfo(WSBillingPortType), ioDocument);
  RemClassRegistry.RegisterXSClass(mensagem, 'http://www.f2b.com.br/soap/wsbilling.xsd', 'mensagem');
  RemClassRegistry.RegisterXSClass(sacador, 'http://www.f2b.com.br/soap/wsbilling.xsd', 'sacador');
  RemClassRegistry.RegisterXSClass(sacado, 'http://www.f2b.com.br/soap/wsbilling.xsd', 'sacado');
  RemClassRegistry.RegisterXSClass(cobranca, 'http://www.f2b.com.br/soap/wsbilling.xsd', 'cobranca');
  RemClassRegistry.RegisterXSClass(agendamento, 'http://www.f2b.com.br/soap/wsbilling.xsd', 'agendamento');
  RemClassRegistry.RegisterXSClass(carne, 'http://www.f2b.com.br/soap/wsbilling.xsd', 'carne');

end. 

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

ok...  agora voce vai montar o form com os objetos do wsbilling.pas

exemplo:

unit UWebServiceF2b;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, InvokeRegistry, Rio, SOAPHTTPClient, wsbilling, StdCtrls;

type
  TForm1 = class(TForm)
    HTTPRIO1: THTTPRIO;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var service: WSBillingPortType;
begin
   service:= GetWSBillingPortType(false,'',HTTPRIO1);

   /// INSTANCIAR OS OBJETOS

   service.RegisterWSBilling(mensagem,sacador,sacado,agendamento,cobranca,carne,outlog);

end;

end.

Se quiser saber um pouco mais sobre a classe ( TRemotable )

http://www.linhadecodigo.com.br/artigo/3/desvendando-web-services-soap_xml.aspx

 

OBS: vou te passar o mesmo webservice F2B ( completo ) montado em Visual  Studio.

a lógica é praticamente a mesma ...voce só tera que adaptar para o delphi

https://social.msdn.microsoft.com/Forums/pt-BR/e7b8ccd2-ce07-4989-adda-d5273b248091/webservice-da-f2b?forum=aspnetpt

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas sempre da essa mensagem access violation at address em duas linhas, não aceita a tipagem TXSDate ou TXSDecimal

var
  msng : mensagem;
  saca : sacador;
  cobr : cobranca;

begin
  //conta                           := '9023010157650103';

  msng                            := mensagem.Create;

  msng.data.AsDate                := Now; // aqui um dos erros
  msng.numero                     := '010203';
  msng.tipo_ws                    := 'WebService';

  saca                            := sacador.Create;
  saca.conta                      := '9023010857450105';

  cobr                            := cobranca.Create;
  cobr.valor.DecimalString        := FormatFloat('%d', 20.5); // aqui outro erro.
  cobr.tipo_cobranca              := '';

 

poxa, ws é dificil 

Link para o comentário
Compartilhar em outros sites

  • 0
procedure TForm1.Button1Click(Sender: TObject);
var service: WSBillingPortType;
   mensagem0 : mensagem;
   sacador0 : sacador;
   sacado0 : sacado;
   agendamento0 : agendamento;
   cobranca0 : cobranca;
   carne0 : carne;
   log : WideString;

   valor : Double;

begin
   service:= GetWSBillingPortType(false,'',HTTPRIO1);

   /// MONTAR O CÓDIGO DOS OBJETOS
   valor := 2123.40;

   mensagem0.data.AsDate := now();  // data atual
   mensagem0.numero := '010203';
   mensagem0.tipo_ws := 'webservice';

   sacador0.conta := '9023';

   sacado0.nome := 'Jose Oliveira';
   sacado0.email := 'joseoliveira@f2b.com.br';
   sacado0.numero := 0123456;

   agendamento0.numero := 223344;

   cobranca0.nome := 'FULANO DE TAL';
   cobranca0.email := 'pedrooliveira@f2b.com.br';
   cobranca0.url := '';
   cobranca0.numero := 1212;
   cobranca0.taxa_registro.DecimalString := Format('%.2f', [valor]);
   cobranca0.nosso_numero := 878;

   carne0.url := '';
   carne0.numero := 0;

   service.RegisterWSBilling(mensagem0,sacador0,sacado0,agendamento0,cobranca0,carne0,log);

end;

OBS: esse é um exemplo ... não vai dar erro de compilação, mas pode dar erro de violação de endereço...

voce tem que ver, como dispor os valores nos objetos

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
  • 0

Jhonas, compilei conforme o indicado deu erro na compilação, ai fiz algumas modificações conforme abaixo, ai compilou no entanto, quando chamo o codigo da a mesma mensagem de erro access violation at address 00612889 in module read of address 00000000C ao debugar, mostra nas linhas 

mensagem0.data.AsDate := now();  // data atual e 

cobranca0.valor.DecimalString := Format('%.2f', [valor]);

sem compilar 

var
  service: WSBillingPortType;
  mensagem0 : mensagem;
  sacador0 : sacador;
  sacado0 : sacado;
  agendamento0 : agendamento;
  cobranca0 : cobranca;
  carne0 : carne;
  log : WideString;
  f2b: F2bCobranca;
  valor : Double;
begin
   service:= GetWSBillingPortType(false,'',HTTPRIO1);

   /// MONTAR O CÓDIGO DOS OBJETOS
   valor := 2123.40;

   mensagem0.data.AsDate := now();  // data atual
   mensagem0.numero := '010203';
   mensagem0.tipo_ws := 'webservice';

   sacador0.conta := '9023';

   sacado0.nome := 'Jose Oliveira';
   sacado0.email[0] := 'joseoliveira@f2b.com.br';
   //sacado0.numero := 0123456;

   cobranca0.valor.DecimalString := Format('%.2f', [valor]);
   cobranca0.tipo_cobranca := '';
   cobranca0.demonstrativo[0] := 'teste';
   cobranca0.num_parcelas := 1;

   carne0.url := '';
   carne0.numero := 0;

   f2b := F2bCobranca.Create;
   f2b.mensagem := mensagem0;
   f2b.sacador := sacador0;
   //f2b.sacado := sacado0.;
   f2b.cobranca := cobranca0;

   service.RegisterWSBilling(f2b);

Link para o comentário
Compartilhar em outros sites

  • 0

olhe no post anterior ... voce tem que converter a data

http://www.activedelphi.com.br/forum/viewtopic.php?t=82561&sid=b3ca53c2eb5ce96509cc23e710d3ac35

com relação a esse comando, a 2ª linha não dá erro, mas no envio parece que o formato do valor deve ser diferente. ( não sei te dizer, pois nunca utilizei esse webservice )

cobranca0.valor.DecimalString := Format('%.2f', [valor]);

cobranca0.taxa_registro.DecimalString := Format('%.2f', [valor]);

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...