I looked into this.
The first option you tried,
$client = new SoapClient("https://technet.rapaport.com/webservices/prices/rapaportprices.asmx?WSDL");
$function_name = "Login";
$arguments = array('Username'=>"12345", "Password" => "12345");
doesn't pass the parameters to our servers, therefore resulting into an error.
The second option, $client = new SoapClient("https://technet.rapaport.com/webservices/prices/rapaportprices.asmx?WSDL");
$result = $client->Login(array('Username'=>"12345", "Password" => "12345"));
$result2 = $client->GetPrice();
Does pass the username and password, to our server, but what you have to do after the login, is to get the SOAP header back from the login function, and pass this to the GetPrice method.
Unfortunately I couldn't get this to work either in PHP. The __setSoapHeaders method doesn't seem to work at all with our server, you will get back to no parameters being provided at all. The same result for using __soapCall. I couldn't figure out why, but I guess it adds some kind of wrapper in the SOAP envelope. But the bottom line is that it doesn't seem to be possible to get this to work with native PHP in this way.
If you want to investigate further, our login method gives back an output header like this:[SoapHeader("AuthTicket", Direction = SoapHeaderDirection.Out)]
and the other methods take this as an input value:
[SoapHeader("AuthTicket", Direction = SoapHeaderDirection.In)]
the idea is that you take the authentication ticket from the login method, and pass this to the other methods.
An alternative approach is to try to use an external library for making the web service call, in the hope that that library would be able to overcome this obstacle.
I hope this gives a good direction on how to try, I am keen to hear back on this, since we have a a lot of people trying to access our web services with PHP.