Jump to content
Fórum Script Brasil
  • 0

Duvidas com WSDL F2B Delphi


Hudson Dias

Question

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 to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...