0

I am trying to create SOAP request, but it gives me error: An exception occurred whilst trying to authenticate you. String reference not set to an instance of a String. Parameter name: s My code is:

$wsdl   = "https://securedwebapp.com/api/service.asmx?WSDL"; 
$trace = true;
$exceptions = false;
$debug = true;

$client = new SoapClient($wsdl,
      array(
        'trace' => $trace,
        'exceptions' => $exceptions,
        'debug' => $debug,
      ));


    $xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:kas="KashFlow">
   <soapenv:Header/>
   <soapenv:Body>
      <kas:GetInvoice>
         <kas:UserName>xxx</kas:UserName>
         <kas:Password>xxx</kas:Password>
         <kas:InvoiceNumber>184576</kas:InvoiceNumber>
      </kas:GetInvoice>
   </soapenv:Body>
</soapenv:Envelope>';
//var_dump($xml);

    $args = array(new SoapVar($xml, XSD_ANYXML)); 
    $res  = $client->__soapCall('GetInvoice', $args);
var_dump($res);
echo "<hr>Last Request";
echo "<pre>", htmlspecialchars($client->__getLastRequest()), "</pre>";

Does anyone know how to solve? The request works fine if I use:

$wsdl = 'https://securedwebapp.com/api/service.asmx?WSDL';
$trace = true;
$exceptions = false;
$debug = true;

$client = new SoapClient($wsdl,
      array(
        'trace' => $trace,
        'exceptions' => $exceptions,
        'debug' => $debug,
      ));


$params = array(
   'InvoiceNumber' =>'81217',
    'UserName' => 'xxx', 
    'Password' => 'xxx'
);

$resp = $client->GetInvoice($params);


print_r($resp);

This is request with simple parameters, but in real situation I have complex XML request, that I do not know how to form as php object. That is why I would send it as XML as I am trying to do at first place.

ykstom
  • 23
  • 3

1 Answers1

0

Nowadays, it is strongly advised to use a WSDL to PHP generator in order to avoid encountering this sort of issues.

I recomend using the PackageGenerator project which allows to generate a PHP SDK based on the WSDL. The generated PHP SDK contains all that is necessary to construct the request, send the request and handle the response only using an OOP approach.

Mikaël DELSOL
  • 752
  • 5
  • 14