tags:

views:

30

answers:

1

I am new to SOAP and have been trying to connect to Barnes and Noble SOAP API using the php5 built in soap functions.

http://www.php.net/manual/en/class.soapclient.php

My question is, does anyone have any documentation or experience using Barnes and Noble system? I have been going back and forth with the support person and I feel like they assume we should just be able to figure it out.

The faultcode i am getting is "HTTP" and fault string is "Method Not Allowed".

Here is what the support guy says my header should look like.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
<soap:Header>
    <SessionInfo xmlns="http://tempuri.org/SessionInfoHeader"&gt;
        <User xmlns="">your username goes here</User>
        <Password xmlns="">your password goes here.</Password>
    </SessionInfo>
</soap:Header>

This is as close as i can get it.

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="http://tempuri.org"&gt;
<SOAP-ENV:Header><ns1:SessionInfo>
<item>
  <key>SessionInfo</key>
  <value>
    <item><key>User</key><value>[username]</value></item>
    <item><key>Password</key><value>[password]</value></item>
  </value>
 </item>
 </ns1:SessionInfo>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<searchCriteria/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

I am not even sure this is the problem. Any help would be awesome.

A: 

In order to get the child nodes instead of the item key/value pairs you have to pass the parameter as an object.

$client = new SoapClient( 'test.wsdl' );

class SessionInfo {
  public $User = '[email protected]';
  public $Password = '12345';
}
$sessionInfo = new SessionInfo();

$soap_headers = new SoapHeader( 'http://tempuri.org/SessionInfoHeader',
  'SessionInfo', $sessionInfo );

$client->__setSoapHeaders( $soap_headers );  

This will output what the support guy said should work. i think you could also create an array and type cast it to an object but i haven't tried that yet.

Samuel