Delphi usando componente SOAP

Este exemplo pode ser usado tanto em Delphi 6 quanto em Delphi 7. Será demonstrado dois métodos de fazer a chamada ao Web services, uma usando o componente HTTPRIO e fazendo um Typecast e outros usando apenas a Unit que será criada automaticamente.

Crie um novo projeto, adicione dois Tbutton, um Tedits, um TMemo e um HTTPRIO da palheta Webservices.

Importar o WSDL direto do site para conhecer os serviços disponíveis. Utilizando o menu File | New | Other. Na Guia WebServices selecione a opção WSDL Importer.

Uma tela Wizard será aberta solicitando o endereço do WSDL.

Endereço de teste

Digitar http://suporte.comunix.net/webservices/servicos/transacoes.asmx?WSDL e clicar em Next.

Será exibido o código gerado. Clicar em Finish e salvar arquivo gerado com o nome de transacoes.pas.

Inserir no final do arquivo transacoes.pas a linha que esta em vermelho caso ela não exista.

initialization

  InvRegistry.RegisterInterface(TypeInfo(WebServiceSoap), 'http://suporte.comunix.net/webservices/servicos/transacoes.asmx/', 'utf-8');

  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(WebServiceSoap), 'http://suporte.comunix.net/webservices/servicos/ConsultarSaldo0907');

  InvRegistry.RegisterInvokeOptions(TypeInfo(ServicosSoap), [ioDefault, ioDocument, ioHasReturnParamNames, ioHasNamespace]);

end.

Em seu formulário adicione a unit transacoes.pas que acabou de ser criada utilizando o menu File | Use Unit.

Configure no Object Inspector as propriedades do HTTPRIO1 escolhendo as opções na ordem WSDLLocation, Service e Port.

No evento OnClick do Button1 colocar o seguinte código:

procedure TForm1.btnValidarCartaoClick(Sender: TObject);

var
CamposValidacao:RetornoValidacaoCartao;

begin

  CamposValidacao := (HTTPRIO As ServicosSoap).ValidacaoCartao0108(000,0000000,00000001,00000000),'1234567890',Cartão com 16 digitos);


if CamposValidacao.CodigoRetorno = 0 then
begin

edit1.Text := CamposValidacao.NomeEmpresa;

edit2.text := CamposValidacao.NomeAssociado;

{e assim para todos os campos de retorno}
end

else

edit3.text := CamposValidacao.Mensagem

end;

 

Exemplo de como enviar uma venda com produtos, caso a venda não tenha produtos o array tem que ser enviando zerado, e a quantidade de produtos também.

procedure TFPrincipal.VenderClick(Sender: TObject);
var
NSU_Guest: string;
ValorVenda: Real;
nK:Integer;
CamposVenda:RetornoDaVenda;
CamposProdutos:ArrayOfCamposEspelhoCupom;
begin
{gerando NSU para a venda}
NSU_Guest := FormatDateTime('DD',Now) + FormatDateTime('HHMM',Now);
ValorVenda := Valor_Autorizar.Value;
{setando o tamanho do vetor com a quantidade de produtos}
SetLength(CamposProdutos,StrToInt(Edit1.Text));
{Adicionado os produtos no vetor}
for nK := 0 to Length(CamposProdutos) - 1 do
begin
CamposProdutos[nK] := CamposEspelhoCupom.Create;
CamposProdutos[nK].CodigoDeBarras := '1234567890123456';
CamposProdutos[nK].Quantidade := 1;
CamposProdutos[nK].ValorVendaComDesconto := 900;
CamposProdutos[nK].ValorVendaSemDesconto := 1000;
CamposProdutos[nK].DescricaoDoProduto := 'DELPHI 7';
CamposProdutos[nK].DataDaReceita := '03122011';
CamposProdutos[nK].NumeroDareceita := '1234567890';
CamposProdutos[nK].TipoDoDocumento := '12345678';
CamposProdutos[nK].NumeroDoDocumento := '87654321';
CamposProdutos[nK].NomeDoPrescritor := 'COMUNIX SOFTWARE';
end;
{enviando a venda}
CamposVenda := (HTTPRIO As ServicosSoap).Vender0308(ConfCODIGOOPERADORA.AsInteger,ConfCODIGOESTABELECIMENTO.AsInteger,ConfTERMINAL.AsString,ConfCODIGOINTEGRADOR.AsString,ConfCHAVEDIARIA.AsString,NSU_Guest,textCartao.Text, TiposVendasCODIGO.AsInteger,ValorVenda,Parcelas.AsInteger,Cupom.Text,0,000000,Length(CamposProdutos),0,CamposProdutos);
{Verificando se a venda foi realizada com sucesso}
if CamposVenda.CodigoRetorno = 0 then
begin
Autorizacao.Text := CamposVenda.NumeroDaAutorizacao;
(HTTPRIO As ServicosSoap).ConfirmacaoDeTransacao3501(ConfCODIGOOPERADORA.AsInteger,ConfCODIGOESTABELECIMENTO.AsInteger,ConfTERMINAL.AsString,ConfCODIGOINTEGRADOR.AsString,ConfCHAVEDIARIA.AsString,01,CamposVenda.NumeroDaAutorizacao);
end
else
begin
ShowMessage(CamposVenda.Mensagem);
end;
end;