Envoyer XML avec php via la poste
Je sais il ya un certain nombre de questions similaires à cela, mais j'ai essayé de déconner avec toutes les solutions et n'ont pas semblé être en mesure de le faire fonctionner. Je suis en train de poster xml directement à un service web et d'obtenir une réponse en retour. Techniquement, je suis en train d'essayer de se connecter à freightquote.com la documentation que vous pouvez trouver dans le coin supérieur droit de cette page à la rubrique documentation. Je ne le mentionne parce que je vois le terme de SAVON un terrain à son xml et qu'il pourrait faire une différence. De toute façon ce que je veux, c'est la possibilité d'envoyer xml vers une url et obtenir une réponse en retour.
Donc, si j'avais le suivant
$xml = "<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<soap:Body>
<GetRatingEngineQuote xmlns='http://tempuri.org/'>
<request>
<CustomerId>0</CustomerId> <!-- Identifier for customer provided by Freightquote -->
<QuoteType>B2B</QuoteType> <!-- B2B /eBay /Freightview -->
<ServiceType>LTL</ServiceType> <!-- LTL /Truckload /Groupage /Haulage /Al -->
<QuoteShipment>
<IsBlind>false</IsBlind>
<PickupDate>2010-09-13T00:00:00</PickupDate>
<SortAndSegregate>false</SortAndSegregate>
<ShipmentLocations>
<Location>
<LocationType>Origin</LocationType>
<RequiresArrivalNotification>false</RequiresArrivalNotification>
<HasDeliveryAppointment>false</HasDeliveryAppointment>
<IsLimitedAccess>false</IsLimitedAccess>
<HasLoadingDock>false</HasLoadingDock>
<IsConstructionSite>false</IsConstructionSite>
<RequiresInsideDelivery>false</RequiresInsideDelivery>
<IsTradeShow>false</IsTradeShow>
<IsResidential>false</IsResidential>
<RequiresLiftgate>false</RequiresLiftgate>
<LocationAddress>
<PostalCode>30303</PostalCode>
<CountryCode>US</CountryCode>
</LocationAddress>
<AdditionalServices />
</Location>
<Location>
<LocationType>Destination</LocationType>
<RequiresArrivalNotification>false</RequiresArrivalNotification>
<HasDeliveryAppointment>false</HasDeliveryAppointment>
<IsLimitedAccess>false</IsLimitedAccess>
<HasLoadingDock>false</HasLoadingDock>
<IsConstructionSite>false</IsConstructionSite>
<RequiresInsideDelivery>false</RequiresInsideDelivery>
<IsTradeShow>false</IsTradeShow>
<IsResidential>false</IsResidential>
<RequiresLiftgate>false</RequiresLiftgate>
<LocationAddress>
<PostalCode>60606</PostalCode>
<CountryCode>US</CountryCode>
</LocationAddress>
<AdditionalServices />
</Location>
</ShipmentLocations>
<ShipmentProducts>
<Product>
<Class>55</Class>
<Weight>1200</Weight>
<Length>0</Length>
<Width>0</Width>
<Height>0</Height>
<ProductDescription>Books</ProductDescription>
<PackageType>Pallets_48x48</PackageType>
<IsStackable>false</IsStackable>
<DeclaredValue>0</DeclaredValue>
<CommodityType>GeneralMerchandise</CommodityType>
<ContentType>NewCommercialGoods</ContentType>
<IsHazardousMaterial>false</IsHazardousMaterial>
<PieceCount>5</PieceCount>
<ItemNumber>0</ItemNumber>
</Product>
</ShipmentProducts>
<ShipmentContacts />
</QuoteShipment>
</request>
<user>
<Name>[email protected]</Name>
<Password>password</Password>
</user>
</GetRatingEngineQuote>
</soap:Body>
</soap:Envelope>";
(J'ai édité ce à contenir mon xml réel, car il peut procurer un certain point de vue
Je veux l'envoyer à http://www.someexample.com et obtenir une réponse. Aussi, ai-je besoin de le coder? J'ai fait beaucoup de l'envoi de xml et-vient avec android, et n'a jamais eu, mais qui pourrait être une partie de mon problème.
Ma tentative pour envoyer l'information ressemble à ceci
$xml_post_string = 'XML='.urlencode($xml->asXML());
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://b2b.Freightquote.com/WebService/QuoteService.asmx');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
J'ai édité pour ajouter
ok...donc, ce n'est pas de travail? obtenez-vous l'un message d'erreur spécifique ?
pas d'erreur... juste un écran blanc et pas de sortie. Je fais cela dans codeigniter et à moins que quelque chose ne va catastrophiquement mal, je devrait au moins obtenir le code html sans aucune sortie de ce si quelque chose s'est catastrophiquement mauvais
Donc je suis en supposant que vous êtes disant que ma boucle est correcte à 100%?
OriginalL'auteur ed209 | 2013-07-22
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à pied autour de SAVON services, je vous recommande fortement de vous apprendre les notions de base une fois, et ensuite utiliser ce formidable outil, encore et encore. Il ya de nombreuses fonctionnalités que vous pouvez simplement utiliser, ou vous serez en train de réinventer la roue et de la difficulté avec la génération de fichiers xml, d'analyser des fichiers xml, des fautes etc. Utilisation préparé des outils et votre vie sera plus facile et votre code mieux (moins de bugs).
Regarder http://www.php.net/manual/en/soapclient.soapcall.php#example-5266 comment consommer webservice SOAP. Il n'est pas si difficile à comprendre.
Voici un code comment vous pouvez analyser webserivce. Puis la carte des types de classes et il suffit d'envoyer et de recevoir des objets php. Vous pouvez regarder pour certains outil pour générer des classes automatiquement (http://www.urdalen.no/wsdl2php/manual.php).
Si vous utilisez wsdl2php génération de l'outil, tout est très facile:
Généré le code php pour
QuoteService.php
vous pouvez le voir ici: http://pastie.org/8165331C'est ce qui ressort de la communication:
Demande
Réponse
Peut-être que vous avez un consensus, mais pas de la meilleure façon. 🙂
Je souhaite que je pourrais donner, c'est 50 votes pour être une formidable réponse
urdalen.no/wsdl2php/manual.php ne fonctionne pas 🙁
Essayez celui-ci sourceforge.net/projects/wsdl2php.
OriginalL'auteur Fanda
Tout d'abord, si votre code est écrit comme ça, je doute que cela fonctionne être la cause de la cite...
Vous devez utiliser des guillemets autour de vos xml:
Aussi, vous pouvez utiliser affiche, un addon firefox (il est probablement l'équivalent de google chrome), pour vous aider avec vos demandes, surtout si vous utilisez les Services web. De cette façon, vous serez en mesure de voir si l'erreur est du côté serveur ou côté client.
Cela devrait vous aider à le débogage.
OriginalL'auteur Mash
- Je utiliser ce script en ligne de commande pour tester le SAVON d'appel:
Utilisation comme ceci (en ligne de commande) :
$ client-test.php < yourSoapEnveloppe.xml
Dans cet exemple, le
yourSoapEnveloppe.xml
fichier est le contenu de votre$xml
variable.OriginalL'auteur lilobase
Vous pouvez utiliser
stream_context_create
etfile_get_contents
pour envoyer du xml dans le post.OriginalL'auteur Walk