2

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

0

3 Answers 3

13

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);
Sign up to request clarification or add additional context in comments.

3 Comments

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.
Life savior ! From where did you get this code ?
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.
-1

Use Nusoap instead your Soap client might not work with your php version.

Comments

-1

Look at this my previous answer at Send XML with php via post. There should be everything you need to handle SOAP in php well.

4 Comments

I have looked at this answer and many others but no go.
Witch part does not work for you? Be concrete. Why do you downvote? Better precise your question.
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
So, after all, see my answer again, how to make it work.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.