bestelling XML naar SOAP client
Ik moet een script maken dat een bestelling van een klant naar een soap server toestuurd (zodat de bestelling in de database van een leverancier komt die dit verder kan afhandelen).
Ik heb al van alles geprobeerd maar krijg het niet voor elkaar om dit werkend te krijgen.
Iemand een idee wat ik fout doe?
Dit is wat ik tot nu toe heb:
Code (php)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
$xmlstr = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.datacontract.org/2004/07/Centric.CS.Trade.Standard.WS.SalesOrderService.Contract.Request" xmlns:ns2="http://centric.eu/services/CS/Trade/Standard/WS/">
<SOAP-ENV:Body>
<ns2:LoadSalesOrder>
<ns2:request>
<ns1:SalesOrderRequests>
<ns1:SalesOrderRequest>
<ns1:DeliveryAddress/>
<ns1:DeliveryAddress1>teststraat</ns1:DeliveryAddress1>
<ns1:DeliveryCountry>NL</ns1:DeliveryCountry>
<ns1:DeliveryEmail>[email protected]</ns1:DeliveryEmail>
<ns1:DeliveryFetchCarrier>true</ns1:DeliveryFetchCarrier>
<ns1:DeliveryFetchDeliveryMode>true</ns1:DeliveryFetchDeliveryMode>
<ns1:DeliveryHouseNo>1</ns1:DeliveryHouseNo>
<ns1:DeliveryMunicipality>ALKMAAR</ns1:DeliveryMunicipality>
<ns1:DeliveryName>Test naam</ns1:DeliveryName>
<ns1:DeliveryPermanent>false</ns1:DeliveryPermanent>
<ns1:DeliveryPhone>06-12345678</ns1:DeliveryPhone>
<ns1:DeliveryPostalCode>1200 RT</ns1:DeliveryPostalCode>
<ns1:Division>AGU_NL</ns1:Division>
<ns1:Key>02</ns1:Key>
<ns1:Language>NL</ns1:Language>
<ns1:Login>7440475</ns1:Login>
<ns1:OrderCustomer>7440475</ns1:OrderCustomer>
<ns1:OrderLines>
<ns1:SalesOrderRequest.OrderLine>
<ns1:Item>113504</ns1:Item>
<ns1:Line>10</ns1:Line>
<ns1:OrderQuantityBU>1.0000</ns1:OrderQuantityBU>
</ns1:SalesOrderRequest.OrderLine>
</ns1:OrderLines>
<ns1:OrderType>100</ns1:OrderType>
<ns1:ReferenceExternal>100000001</ns1:ReferenceExternal>
</ns1:SalesOrderRequest>
</ns1:SalesOrderRequests>
</ns2:request>
</ns2:LoadSalesOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML;
$wsdl = 'https://ws.abcb2b.eu/Centric/CS/Trade/cstest/SalesOrderService.svc?wsdl';
$client = new SoapClient($wsdl, array(
'cache_wsdl' => WSDL_CACHE_NONE,
'cache_ttl' => 86400,
'trace' => true,
'exceptions' => true,
));
$xmlVar = new SoapVar($xmlstr, XSD_ANYXML);
$client->LoadSalesOrder($xmlstr);
?>
$xmlstr = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.datacontract.org/2004/07/Centric.CS.Trade.Standard.WS.SalesOrderService.Contract.Request" xmlns:ns2="http://centric.eu/services/CS/Trade/Standard/WS/">
<SOAP-ENV:Body>
<ns2:LoadSalesOrder>
<ns2:request>
<ns1:SalesOrderRequests>
<ns1:SalesOrderRequest>
<ns1:DeliveryAddress/>
<ns1:DeliveryAddress1>teststraat</ns1:DeliveryAddress1>
<ns1:DeliveryCountry>NL</ns1:DeliveryCountry>
<ns1:DeliveryEmail>[email protected]</ns1:DeliveryEmail>
<ns1:DeliveryFetchCarrier>true</ns1:DeliveryFetchCarrier>
<ns1:DeliveryFetchDeliveryMode>true</ns1:DeliveryFetchDeliveryMode>
<ns1:DeliveryHouseNo>1</ns1:DeliveryHouseNo>
<ns1:DeliveryMunicipality>ALKMAAR</ns1:DeliveryMunicipality>
<ns1:DeliveryName>Test naam</ns1:DeliveryName>
<ns1:DeliveryPermanent>false</ns1:DeliveryPermanent>
<ns1:DeliveryPhone>06-12345678</ns1:DeliveryPhone>
<ns1:DeliveryPostalCode>1200 RT</ns1:DeliveryPostalCode>
<ns1:Division>AGU_NL</ns1:Division>
<ns1:Key>02</ns1:Key>
<ns1:Language>NL</ns1:Language>
<ns1:Login>7440475</ns1:Login>
<ns1:OrderCustomer>7440475</ns1:OrderCustomer>
<ns1:OrderLines>
<ns1:SalesOrderRequest.OrderLine>
<ns1:Item>113504</ns1:Item>
<ns1:Line>10</ns1:Line>
<ns1:OrderQuantityBU>1.0000</ns1:OrderQuantityBU>
</ns1:SalesOrderRequest.OrderLine>
</ns1:OrderLines>
<ns1:OrderType>100</ns1:OrderType>
<ns1:ReferenceExternal>100000001</ns1:ReferenceExternal>
</ns1:SalesOrderRequest>
</ns1:SalesOrderRequests>
</ns2:request>
</ns2:LoadSalesOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML;
$wsdl = 'https://ws.abcb2b.eu/Centric/CS/Trade/cstest/SalesOrderService.svc?wsdl';
$client = new SoapClient($wsdl, array(
'cache_wsdl' => WSDL_CACHE_NONE,
'cache_ttl' => 86400,
'trace' => true,
'exceptions' => true,
));
$xmlVar = new SoapVar($xmlstr, XSD_ANYXML);
$client->LoadSalesOrder($xmlstr);
?>
Quote:
Ik heb al van alles geprobeerd maar krijg het niet voor elkaar om dit werkend te krijgen.
Hoe luidt het verwachte resultaat en wat gebeurt er in werkelijkheid?
Ik bedoel, je constateert op een of andere manier dat "het niet werkt".
Waar blijkt dit uit?
Zit je bijvoorbeeld op een (lokale) ontwikkelomgeving en verwacht je resultaat terug? Dat gaat mogelijk niet werken.
Bij SOAP krijg je toch meestal een soort van terugkoppeling? Retourneert loadSalesOrder() iets?
Het is dus handig als je vertelt wat je hebt geprobeerd, wat het resultaat hier van was, en wat je dan wel had verwacht dat er zou moeten gebeuren.
Fatal error: Uncaught SoapFault exception: [s:Client] The creator of this fault did not specify a Reason. in C:\wamp\www\soap_request.php:102 Stack trace: #0 C:\wamp\www\soap_request.php(102): SoapClient->__call('LoadSalesOrder', Array) #1 C:\wamp\www\soap_request.php(102): SoapClient->LoadSalesOrder('
Op eenzelfde wijze kun je doorgaans ook geen betaalmethoden van een webshop lokaal testen, nadat je een testbetaling hebt afgerond moet er data teruggestuurd worden naar je lokale bak - een externe machine kan hier simpelweg niet bij (en dat is maar goed ook :)).
Mogelijke oplossingen: zorg dat je zelf rechtstreeks aan het internet hangt (DMZ, port mapping of wat dan ook), of ontwikkel deze functionaliteit op een externe machine die rechtstreeks in verbinding staat met het internet.
EDIT: daarnaast/daarbij is deze webservice mogelijk beperkt beschikbaar, er zit mogelijk nog een authenticatie-laag tussen, of je hebt enkel toegang op IP-basis, of de communicatie verloopt mogelijk via HTTPS. Dus zelfs als je je "eigen" netwerkperikelen hebt opgelost wil dat niet op voorhand zeggen dat je dan vanzelf wel kan praten met deze webservice, mogelijk zijn er nog andere barrieres.
Gewijzigd op 28/08/2015 12:44:55 door Thomas van den Heuvel