bestelling XML naar SOAP client

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan test

Johan test

28/08/2015 09:57:04
Quote Anchor link
Beste Phphulp,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>
 
PHP hulp

PHP hulp

01/05/2024 23:27:27
 
Thomas van den Heuvel

Thomas van den Heuvel

28/08/2015 11:33:11
Quote Anchor link
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.
 
Johan test

Johan test

28/08/2015 11:51:39
Quote Anchor link
Ik krijg nu deze foutmelding:

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('
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?xml version="...') #2 {main} thrown in C:\wamp\www\soap_request.php on line 102

Normaliter zou ik een bericht terug moeten krijgen van SOAP server met een orderID.

De SOAP server is een externe server van de leverancier.
 
Thomas van den Heuvel

Thomas van den Heuvel

28/08/2015 12:41:44
Quote Anchor link
Het terugcommuniceren vanaf het internet naar een lokale onwikkelomgeving werkt meestal niet. In wezen verzoek je een externe service een reactie terug te sturen naar "localhost".

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.