I have the following from a vendor API:
and I neeed to create a Soap call using php. How do I go about doing that? so far I have this: but it does not work:
private function booking_soap_connect() {
// the wsdl URL of your service to test
$serviceWsdl = 'https://apitest.com/bookingapi.asmx?WSDL';
// the parmeters to initialize the client with
$serviceParams = array(
'login' => 'un',
'password' => 'pw'
);
// create the SOAP client
$client = new SoapClient($serviceWsdl, $serviceParams);
$data['Brand'] = "All";
$data['TourCode'] = "QBE";
$data['DepartureCode'] = "8000321";
$data['VendorId'] = "test";
$data['VendorPassword'] = "test";
$results = $client->GVI_DepartureInfo($data)
echo $results;
}
Please help
SOLVED: I finally got this going with the following code:
class WsseAuthHeader extends SoapHeader {
private $wss_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
function __construct($user, $pass, $ns = null) {
if ($ns) {
$this->wss_ns = $ns;
}
$auth = new stdClass();
$auth->Username = new SoapVar($user, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns);
$auth->Password = new SoapVar($pass, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns);
$username_token = new stdClass();
$username_token->UsernameToken = new SoapVar($auth, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wss_ns);
$security_sv = new SoapVar(
new SoapVar($username_token, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wss_ns), SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'Security', $this->wss_ns);
parent::__construct($this->wss_ns, 'Security', $security_sv, true);
}
}
$username = 'test';
$password = 'test123';
$wsdl = 'https://yoururl.com/api.asmx?WSDL';
$wsse_header = new WsseAuthHeader($username, $password);
$client = new SoapClient($wsdl, array(
//"trace" => 1,
//"exceptions" => 0
)
);
$client->__setSoapHeaders(array($wsse_header));
$request = array(
"functionResponseName" => array(
'param1' => "string",
"param2" => "string"
)
);
$results = $client->FunctionName($request);
var_dump($results);