[PHP-SOAP]

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrQcue
  • Registratie: Januari 2005
  • Nu online
Hoi,

Ik ben op dit moment bezig om te communiceren met een externe partij via soap. Hiervoor gebruik ik de ingebouwde soap client van php.

De communicatie en het resultaat gaan helemaal goed. Het probleem zit hem in de limit van het aantal resultaten die ik terug wil krijgen. Dat zou ik op moeten kunnen geven in het soap request. Alleen zit die attribute 1 niveau hoger dan de elementen die ik gebruik in mijn soap request. Ik probeer nu al een tijd uit zoeken hoe ik die parameter (wat eigenlijk een attribuut is in het soap request) kan definieren.

In de handleiding staat het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<soapenv:Body>
    <q0:Addressing maxrows="2">
        <Authentication>
            <Username>username</Username>
            <Password>password</Password>
        </Authentication>
        <ComponentAddress>
            <AddressLine1>Willem Bilderdijkdreef 25</AddressLine1>
            <Postcode>5051 GL</Postcode>
            <CountryCode>NLD</CountryCode>
        </ComponentAddress>
    </q0:Addressing>
</soapenv:Body>


Het gaat dan om de: maxrows="2"

Als ik naar de wsdl file kijk dan heet de soap method "AddressingRequest". Die roep ik aan met de volgende parameters:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$object = $client->__soapCall("AddressingRequest", array(
            array(
                'Authentication' => array(
                    'Username' => 'username',
                    'Password' => 'password',
                ),
                
                'ComponentAddress' => array(
                    'Postcode' => 'postcode',
                    'Premise' => 'premise',
                    'CountryCode' => 'country',
                )
            )
        )
    );
    
    echo "<pre>";
    print_r($object);   
    echo "<pre>";

Die maxrows staat echter 1 niveau te hoog. weet alleen niet hoe ik die attribute zou moeten vullen. Ik heb gekeken en het geprobeerd met soapVar en soapParam. Ik weet alleen niet goed of dit de oplossing is of dat het op een andere manier moet.

Ik hoop dat iemand mij een duwtje in de goede richting kan geven.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Voor het parsen van responses werk je als volgt met attributen:
XML:
1
<foo bar="tweak">1337</foo>

wordt
PHP:
1
array("foo" => array("_" => 1337, "bar" => "tweak"));


Dus wellicht kan je dat ook bij de aanroep doen. :) Iets als
PHP:
1
2
3
4
5
6
7
array(
    'maxrows' => 2,
    '_' => array(
        'Authentication'=> /* reutel reutel */,
        'ComponentAddress'=> /* reutel reutel */,
    )
)

[/compleet ongetest]

{signature}


Acties:
  • 0 Henk 'm!

  • MrQcue
  • Registratie: Januari 2005
  • Nu online
Thx voor de tip nogmaals. Ik had hem al een keer gehoord alleen toen kon ik er niets meer omdat ik de method zo aanriep:

$object = client->MethodName($parameters);

Nu ik hem vanmiddag had aangepast naar:

$object = $client->__soapCall("AddressingRequest", array($parameters));

was ik zojuist in een heldere ingeving dankzij jouw tip in staat om het volgende te fabriceren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$object = $client->__soapCall("AddressingRequest", array(
            "_" => array(
                'Authentication' => array(
                    'Username' => 'username',
                    'Password' => 'password',
                ),
                
                'ComponentAddress' => array(
                    'Postcode' => 'postcode',
                    'Premise' => 'premise',
                    'CountryCode' => 'country',
                ),
            "maxrows" => "50"
        )
    )
);


te doen. En dat werkte meteen. Zonder die __soapCall te gebruiken kon dat eerst nog niet omdat ik toen niet dat niveau kon bereiken in die array met parameters

Dit was inderdaad het duwtje in de juiste richting die ik nodig had ;)

Acties:
  • 0 Henk 'm!

  • Erwinvz1
  • Registratie: Oktober 2003
  • Laatst online: 09-09 17:16
http://msdn.microsoft.com...690%28v=EXCHG.140%29.aspx
SOAP Code (XML) staat hier


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// Create SOAP Client
$client = new SoapClient('Services.wsdl',
           array('exceptions' => 0,'trace' => 1,'login'    => "DOMEIN\\username",'password' => "PASSWORD")
           );

try {

    $CreateItem->SendMeetingInvitations = "SendToAllAndSaveCopy";
    $CreateItem->SavedItemFolderId->DistinguishedFolderId->Id = "calendar";
    $CreateItem->Items->CalendarItem->Subject = "TEST!!!!";
    $CreateItem->Items->CalendarItem->Start = "2010-10-15T16:00:00Z";
    $CreateItem->Items->CalendarItem->End = "2010-10-15T17:00:00Z";
    $CreateItem->Items->CalendarItem->IsAllDayEvent = false;
    $CreateItem->Items->CalendarItem->LegacyFreeBusyStatus = "Busy";
    $CreateItem->Items->CalendarItem->Location = "MIJNLOCATIE";
    $CreateItem->Items->CalendarItem->Categories->String = "MIJNCATEGORIE:)";
    $CreateItem->Items->CalendarItem->RequiredAttendees->Attendee[0]->Mailbox->EmailAddress = "naam@domeinnaam.nl";
    $CreateItem->Items->CalendarItem->Body['BodyType'] = "Text"; 
    $CreateItem->Items->CalendarItem->Body[_] = "MIJN BODY TEKST:D";
    $result = $client->CreateItem($CreateItem);



} catch (SoapFault $exception) {
    echo "Response:\n" . $client->__getLastResponse() . "\n";
    echo "<pre>";
    echo "Trace:".$exception;
    echo "</pre>";
}
?>


Zo doe ik het, volgens mij is Text type aangeven het zelfde trucje
$CreateItem->Items->CalendarItem->Body['BodyType'] = "Text";
$CreateItem->Items->CalendarItem->Body[_] = "MIJN BODY TEKST:D";

Dat dus.

[ Voor 10% gewijzigd door Erwinvz1 op 04-12-2010 20:31 ]