HTTP 500 Error with Delphi Indy SOAP WSSE

71 views Asked by At

I want to send SOAP/XML data to a web service, but the service asks for WSSE security. In SOAPUI I did the tests, and configuring OUTGOING WSS works. I want to do this with Delphi Indy, what can I do to have the same results as SOAP UI with Delphi?

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  MemoryStream: TStringStream;
  cadena: string;     
  Resultado: string;
begin
  cadena := '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"';
  cadena := cadena + ' xmlns:wcf="http://wcf.dian.colombia"> ';
  cadena := cadena + ' <soap:Header/> ';
  cadena := cadena + ' <soap:Body> ';
  cadena := cadena + ' <wcf:GetNumberingRange> ';
  cadena := cadena + ' !--Optional:-->';
  cadena := cadena + ' <wcf:accountCode>00000000000</wcf:accountCode>';
  cadena := cadena + ' <!--Optional:-->';
  cadena := cadena + ' <wcf:accountCodeT>000000000000</wcf:accountCodeT>';
  cadena := cadena + ' <!--Optional:-->';
  cadena := cadena + ' <wcf:softwareCode>XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</wcf:softwareCode>';
  cadena := cadena + ' </wcf:GetNumberingRange>';
  cadena := cadena + ' </soap:Body>';
  cadena := cadena + ' </soap:Envelope>';
  MemoryStream := tStringStream.Create;
  MemoryStream.WriteString(Cadena);
  IdHTTP1.Request.ContentType := 'application/soap+xml; charset=utf-8';
  IdHTTP1.Request.Username := '';
  IdHTTP1.Request.Password := '';
  IdHTTP1.Request.BasicAuthentication := True;
  IdHTTP1.Request.CustomHeaders.AddValue('SOAPAction', 'mustUnderstand="1"');
  Memo1.Lines.Add(IdHTTP1.Request.RawHeaders.Text);
  Memo1.Lines.Add(IdHTTP1.Request.CustomHeaders.Text);
  Memo1.Lines.Add(MemoryStream.DataString);
  try
    Resultado := IdHTTP1.Post('https://vpfe.dian.gov.co/WcfDianCustomerServices.svc', MemoryStream);
  except
    on E: Exception do
    begin
      Memo1.Lines.Add(IdHTTP1.Response.RawHeaders.Text);
      Memo1.Lines.Add(E.Message);
    end;
    Memo1.Lines.Add(Resultado);
  end;

The service shows HTTP 500 error, and I know that is because of the incomplete request, the missing WSS OUTGOING.

0

There are 0 answers