Re: PHP SoapClient cannot generate valid soap request
| From: | Adam Tong | Date: | Mon, 21 Apr 2014 18:12:49 +0000 |
| Subject: | Re: PHP SoapClient cannot generate valid soap request | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-323205@lists.php.net to get a copy of this message | ||
Hi Robert,
Everything is working fine now with your fix.
Thank you for the time you spent on this to help me.
I really appreciate it.
Thank you so much!
On Mon, Apr 21, 2014 at 12:44 PM, Robert Williams <rewilliams@thesba.com>wrote:
> Adam,
>
> When you call the service methods directly, you don’t need the array
> wrapper on the parameter since the SoapClient class will take care of it
> for you. Thus:
>
> $results = $soapClient->RateQuote(array($args));
>
> should just be:
>
> $results = $soapClient->RateQuote($args);
>
> Back on my dev machine this morning, I gave your code a shot, and with the
> above change, it works. The service complained about a missing ‘Pieces’
> value, though. I looked at the WSDL, and Pieces is a required value. Looks
> like ShipDate is also required. Adding both, I get this code:
>
> $args = array(
> 'request' => array(
> 'OriginZip' => 18106,
> 'DestinationZip' => 91752,
> 'ShipmentDetails' => array(
> 'ShipmentDetail' => array(
> 'ActualClass' => 50,
> 'Weight' => 1200,
> ),
> ),
> 'OriginType' => 'O',
> 'PaymentType' => 'P',
> 'COD' => array(
> 'Prepaid' => true,
> 'CODAmount' => 1200,
> ),
> 'Pieces' => 1,
> 'ShipDate' => '2014-04-24T00:00:00-00:00',
> ),
> );
>
> which works, generating this XML:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <SOAP-ENV:Envelope xmlns:SOAP-ENV="
> http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:ns1="
> https://webservices.rrts.com/ratequote/">
> <SOAP-ENV:Header>
> <ns1:AuthenticationHeader>
> <ns1:UserName>xxxxxx</ns1:UserName>
> <ns1:Password>xxxxxx</ns1:Password>
> <ns1:Site>xxxxx</ns1:Site>
> </ns1:AuthenticationHeader>
> </SOAP-ENV:Header>
> <SOAP-ENV:Body>
> <ns1:RateQuote>
> <ns1:request>
> <ns1:OriginZip>18106</ns1:OriginZip>
> <ns1:DestinationZip>91752</ns1:DestinationZip>
> <ns1:ShipmentDetails>
> <ns1:ShipmentDetail>
> <ns1:ActualClass>50</ns1:ActualClass>
> <ns1:Weight>1200</ns1:Weight>
> </ns1:ShipmentDetail>
> </ns1:ShipmentDetails>
> <ns1:OriginType>O</ns1:OriginType>
> <ns1:PaymentType>P</ns1:PaymentType>
> <ns1:Pieces>1</ns1:Pieces>
> <ns1:COD>
> <ns1:Prepaid>true</ns1:Prepaid>
> <ns1:CODAmount>1200</ns1:CODAmount>
> </ns1:COD>
> <ns1:ShipDate>2014-04-24T00:00:00-00:00</ns1:ShipDate>
> </ns1:request>
> </ns1:RateQuote>
> </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>
>
> As another tip, I noticed that you prepend your array elements with a
> comma. Presumably, this is to make adding new elements later less
> error-prone, which always a good idea. However, PHP offers an extremely
> useful feature that’s even better: dangling commas. Instead of this:
>
> $foo = array(
> ‘apple’
> ,‘banana’
> ,‘pear’
> ,‘mango’
> );
>
> You can do this:
>
> $foo = array(
> ‘apple’,
> ‘banana’,
> ‘pear’,
> ‘mango’,
> );
>
> Note the dangling comma after the last element. This idiom keeps code
> looking a bit more like natural language and also avoids future editing
> errors at the beginning of the array, which the comma-as-prefix arrangement
> doesn’t address. And if you ever find yourself generating array syntax
> programmatically, this feature makes doing so dead-simple.
>
>
> --
> Robert E. Williams, Jr.
> Senior Vice President of Software Development
> Newtek Businesss Services, Inc. -- The Small Business Authority
> https://www.newtekreferrals.com/rewjr
> http://www.thesba.com/
>
>
> Notice: This communication, including attachments, may contain information
> that is confidential. It constitutes non-public information intended to be
> conveyed only to the designated recipient(s). If the reader or recipient of
> this communication is not the intended recipient, an employee or agent of
> the intended recipient who is responsible for delivering it to the intended
> recipient, or if you believe that you have received this communication in
> error, please notify the sender immediately by return e-mail and promptly
> delete this e-mail, including attachments without reading or saving them in
> any manner. The unauthorized use, dissemination, distribution, or
> reproduction of this e-mail, including attachments, is prohibited and may
> be unlawful. If you have received this email in error, please notify us
> immediately by e-mail or telephone and delete the e-mail and the
> attachments (if any).
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>