Create WSSE Auth SOAP call for WebServices API in PHP using SoapClient
12,778
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);
![CodeGodie](https://i.stack.imgur.com/kWpZJ.jpg?s=256&g=1)
Author by
CodeGodie
I am a software engineer and love what I do. I create web applications focusing on responsive and DRY code. My favorite languages are PHP, Python, and Javascript(using Laravel/React/Angular/jQuery). I joined this site to help others as this site helped me find the right answers when I needed them. Feel free to reach me if you have any questions.
Updated on June 13, 2022Comments
-
CodeGodie about 2 years
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
-
CodeGodie over 10 yearsI have looked at this answer and many others but no go.
-
Fanda over 10 yearsWitch part does not work for you? Be concrete. Why do you downvote? Better precise your question.
-
CodeGodie over 10 yearsI downvote because you are not giving me an answer. you are just pointing me to other links which I have already looked at.. I cannot get this going. I have the code which i tried above, and it just gives an error. I wrote the code above. All im asking is for someone to review and see where I made the error
-
Fanda over 10 yearsSo, after all, see my answer again, how to make it work.
-
hakre over 9 yearsCould you say if or not this differs to the answer stackoverflow.com/a/6677930/367456 and if it differs, outline in short, what the differences are? I know it's quite some time since you answered but you probably can take a look.
-
Gabriel Anderson about 8 yearsFirst try and all works fine... Thank you!!
-
Leeeeeeelo over 7 yearsLife savior ! From where did you get this code ?
-
CodeGodie over 7 yearsNice.. dont remember where I got it from. I think I came up with it myself, its been a while. Glad it helped you out.