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);
Share:
12,778
CodeGodie
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, 2022

Comments

  • CodeGodie
    CodeGodie about 2 years

    I have the following from a vendor API: enter image description here

    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
    CodeGodie over 10 years
    I have looked at this answer and many others but no go.
  • Fanda
    Fanda over 10 years
    Witch part does not work for you? Be concrete. Why do you downvote? Better precise your question.
  • CodeGodie
    CodeGodie over 10 years
    I 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
    Fanda over 10 years
    So, after all, see my answer again, how to make it work.
  • hakre
    hakre over 9 years
    Could 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
    Gabriel Anderson about 8 years
    First try and all works fine... Thank you!!
  • Leeeeeeelo
    Leeeeeeelo over 7 years
    Life savior ! From where did you get this code ?
  • CodeGodie
    CodeGodie over 7 years
    Nice.. dont remember where I got it from. I think I came up with it myself, its been a while. Glad it helped you out.