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.