PHP SoapClient converting Array to String - php

Another SOAP question - I have a large multidimensional array, which echo's out fine when using print_r (eg you can see all of the data). The problem arises when I use
SOAPClient->__soapCall('Function', array('paramaters' => $feedUpload));
This actually returns an xml that looks like this: (using __getLastRequest)
<soap-env:envelope xmlns:ns1="http://www.property24.com/prosol/P24Feed" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:body>
<ns1:uploadlistings>
<ns1:feedupload>
<ns1:version>1</ns1:version>
<ns1:usertoken>
<ns1:token>3c7b39ea-c10b-451f-95bf-5118d84fb089</ns1:token>
</ns1:usertoken>
<ns1:command>UPLOAD</ns1:command>
<ns1:compress>None</ns1:compress>
<ns1:listings>
<ns1:listing>
<ns1:listingnumber>361000001</ns1:listingnumber>
<ns1:propertycategory>SR</ns1:propertycategory>
<ns1:listingdata>Array</ns1:listingdata>
<ns1:listingtype>A</ns1:listingtype>
</ns1:listing>
</ns1:listings>
</ns1:feedupload>
</ns1:uploadlistings>
</soap-env:body>
</soap-env:envelope>
As you can see, for ListingData it returns "Array". Here is the array schema:
Array
(
[parameters] => Array
(
[FeedUpload] => Array
(
[Version] => 1
[UserToken] => Array
(
[Token] => 5ece25e7-77d9-4dbf-8b8f-e047759ab8f4
)
[Command] => UPLOAD
[Compress] => None
[Listings] => Array
(
[Listing] => Array
(
[PropertyCategory] => SR
[ListingNumber] => 361000001
[ListingType] => A
[ListingData] => Array
(
[MandateDetails] => Array
(
[ListingNumber] => 361000001
[ListingType] => A
[MandateType] => O
[ClosedUserGroup] => C
[MarketCode] => A
[ListPrice] => 111000
[OccupationDate] =>
[OffMarketDate] =>
[OnMarketSince] =>
[ExpiryDate] => 2011-07-13T09:56:14Z
[ListDate] => 2011-07-13T09:51:14Z
[UpdateDate] => 2011-07-13T09:51:14Z
[VirtualTourUrl] =>
[ActualDirections] =>
[ShowHouseDirection] =>
[ViewComments] =>
[InternetComments] => Excellent stand situated on the flood plane with large riverine trees and great mountain views. The estate is situated along the world renowned Blyde River and is 394 ha in extent with only 154 sites on 4000 square metres. The estate has an array of plains game such as antelope, giraffe and wildebeest as well as hippo and crocodile. The riverine flood plain provides great birding opportunities such as the Pels fishing owl. There is a restaurant and clubhouse that serves meals and cocktails and offers
)
[PropertyDetails] => Array
(
[PropertyCategory] => SR
[PropertyType] => SRX
[Status] => ACTV
[Province] => Eastern Cape
[Town] => Aberdeen
[Suburb] => Balvinie
[StreetName] => Test Street
[StreetNumber] => 5
[PostalCode] => 0123
[ErfSize] => 1200
[HouseSize] =>
[Age] =>
[OwnerType] => G
[VATRegistered] => false
[MunicipalRatesAndTaxes] => 0
[MunicipalImprovementsValue] => 0
[MunicipalLandValue] => 0
[MunicipalTotalValue] => 0
[StandNumber] =>
[StandNumberSubdivided] =>
[PortionNumber] =>
[OwnerShipType] =>
)
[ResidentialDetails] => Array
(
[NoOfBathrooms] => 2
[BathroomDescription] =>
[NoOfBedrooms] => 6
[BedroomDescription] =>
[NoOfKitchens] => 2
[KitchenDescription] =>
[NoOfReceptionRooms] => 2
[ReceptionRoomDescription] =>
[NoOfStudies] => 1
[StudiesDescription] =>
[NoOfDomesticBathrooms] => 2
[NoOfDomesticRooms] => 0
[DomesticRoomsDescription] =>
[NoOfGarages] => 0
[GarageDescription] =>
[NoOfOutsideToilets] => 0
[Coverage] => 0
[Pool] => false
[PoolDescription] =>
[Flatlet] =>
[FlatletDescription] =>
[FlatletSize] =>
[EstablishedGarden] =>
[OutBuildingSize] =>
[NoOfCarports] => 0
[CarportsDescription] =>
[ParkingBayNumber] =>
[Parking] =>
[ParkingDescription] =>
[BusinessRights] =>
[HeightRestrictions] =>
[CommonFeatures] =>
[NumberOfShares] =>
[FacingOptions] =>
[KitchenOptions] =>
[FeatureOptions] =>
[SpecialFeatureOptions] =>
[WallOptions] =>
[WindowOptions] =>
[StyleOptions] =>
[TemperatureControlOptions] =>
[SecurityOptions] =>
[RoofOptions] =>
[RoomOptions] =>
[PoolOptions] =>
[BathroomOptions] =>
)
[AgentDetails] => Array
(
[InternetAgentName] => Ricky Duckworth
[InternetAgentPhoneNumber] => 0157931534
[InternetAgentEmailAddress] => ricky#propertylogic.net
[InternetAgentSMSNumber] => 0796057834
[ListingAgentCode] => CN21
[ListingAgencyCode] => CWP021
)
)
)
)
)
)
)
As you can see the array is structured fine. It's like SoapRequest has got to far into an array and stopped. I also get the notice
Notice: Array to string conversion in /var/www/vhosts/propertylogic.net/httpdocs/soap_feed/property24/add_property.php on line 178
Which is the SOAPCall line.
Thanks very much!
EDIT
[EDIT]Ok, basically the SOAP server requested that section to be raw xml, so I had to replace the Array with a String - sort of stupid way of doing things, but the error message now makes sense! (Can't answer my own question).

You'd better generate and use WSDL to create SOAP Client and define complex types there. This way every SOAP type will be converted to PHP types in a natural way (in your example it'll be an array of objects).
Or you can replace array with string as you did already, though it is a dirty magic :)

Related

Access 2nd, 3rd level etc.. From json request using php

I am trying to access a multi-dimensional array using PHP. I can access the first level using -
$response['id']
but having trouble with how the second level is defined so I can do -
$response['first level']['second level']
Here is my json response -
Array
(
[id] => 7181676
[api_request_id] => 20984853
[user] => 8305
[vin] => JTDKN3DU7D1643423
[make] => Toyota
[model_name] => Prius
[model_year] => 2013
[last_updated] => 2019-02-22T01:08:15.628318Z
[recall_count] => 1
[status] => ok
[recalls] => Array
(
[0] => Array
(
[recall_id] => 15753
[recall_last_updated] => 2019-02-22T00:33:07.663232Z
[recall_age] => 0
[nhtsa_id] => 18V684000
[oem_id] => J0V
[name] => HybridSystem
[description] => CollisionRisk
[campaign_type] => nhtsa
[is_remedy_available] => 1
[are_parts_available] => 1
[risk_type] => collision
[risk_rank] => 5
[profit_rank] => 3
[overall_rank] => 5
[labor_difficulty] => 3
[government_id] => 18V684000
[is_reviewed] => 1
[child] => Array
(
)
)
)
)
How would I get lets say -
$response['profit_rank']

Blocktrail payments API, How to get the values that adress receive

I'am tryng to get the value that an adress sent me on my adress, I have already setted up the webhook, but i can't understand a thing...
I have this array->
Array
(
[network] => tBTC
[event_type] => address-transactions
[addresses] => Array
(
[2MyXzRYSzrExLitY6FumGC3QgzCeqVoeQC1] => -49320
)
[data] => Array
(
[raw] =>
[hash] =>
[first_seen_at] => 2017-10-13T17:19:35+0000
[last_seen_at] => 2017-10-13T17:19:35+0000
[block_height] => 1210150
[block_time] => 2017-10-13T17:20:18+0000
[block_hash] =>
[confirmations] => 2
[is_coinbase] =>
[estimated_value] => 30000
[total_input_value] => 49320
[total_output_value] => 45510
[total_fee] => 3810
[estimated_change] => 15510
[estimated_change_address] => 2N7iSxafSoio4RE8wrd6outJNmbMkyP9QuL
[high_priority] =>
[enough_fee] =>
[contains_dust] =>
[inputs] => Array
(
[0] => Array
(
[index] => 0
[output_hash] =>
[output_index] => 0
[output_confirmed] => 1
[value] => 49320
[sequence] => 4294967295
[address] => 2MyXzRYSzrExLitY6FumGC3QgzCeqVoeQC1
[type] => scripthash
[multisig] =>
[multisig_addresses] =>
[script_signature] =>
)
)
[outputs] => Array
(
[0] => Array
(
[index] => 0
[value] => 30000
[address] => 2NBkQ8aTq8yeXdMWtxXNuxNgEHYnrzvcpV2
[type] => scripthash
[multisig] =>
[multisig_addresses] =>
[script] => OP_HASH160 OP_EQUAL
[script_hex] =>
[spent_hash] =>
[spent_index] => 0
)
[1] => Array
(
[index] => 1
[value] => 15510
[address] => 2N7iSxafSoio4RE8wrd6outJNmbMkyP9QuL
[type] => scripthash
[multisig] =>
[multisig_addresses] =>
[script] => OP_HASH160 OP_EQUAL
[script_hex] =>
[spent_hash] =>
[spent_index] => 0
)
)
[opt_in_rbf] =>
[unconfirmed_inputs] =>
[lock_time_timestamp] =>
[lock_time_block_height] =>
[size] => 367
)
[retry_count] => 0
And I'am tryng to get ONLY THE VALUE OF BTC (SATOSHI) THAT COME ON MY ADRESS, SO WITH THE SUBSTRACTION OF THE FEES, i thought that for get this values I had to get the
$Data=BlocktrailSDK::getWebhookPayload();
$Data['data']['estimated_value'];
Is this correct way to get at the 1000000% THE VALUE OF BTC (SATOSHI) THAT COME ON MY ADRESS, SO WITH THE SUBSTRACTION OF THE FEES, if is not what is the correct way??Anyway thanks for ready, hope that you all had a good day, and thanks for your time :)
P.S Note that on this transaction i sent 30000 satoshi+fees!

How to Separate PHP Object

I am confused on how to separate the following output into separate variables. Here is the array I am working with:
stdClass Object ( [FlightInfoExResult] => stdClass Object ( [next_offset] => 1 [flights] => stdClass Object ( [faFlightID] => UAL1-1489818347-airline-0169 [ident] => UAL1 [aircrafttype] => B789 [filed_ete] => 17:05:00 [filed_time] => 1489818347 [filed_departuretime] => 1490074200 [filed_airspeed_kts] => 430 [filed_airspeed_mach] => [filed_altitude] => 0 [route] => [actualdeparturetime] => 0 [estimatedarrivaltime] => 1490136300 [actualarrivaltime] => 0 [diverted] => [origin] => KSFO [destination] => WSSS [originName] => San Francisco Intl [originCity] => San Francisco, CA [destinationName] => Singapore Changi [destinationCity] => Singapore ) ) )
I am outputting this through the FlightAware API system. Here is the code I am using to output the above:
$params = array("ident" => "UAL1","howMany" => 1,"offset" => 0 );
$result = $client->FlightInfoEx($params);
print_r($result);
Here is an example of how I would like it to seperate the object:
UAL1,B789 ect.
First of all that's not an array your working with, it is an object.
To access it's properties use the -> syntax, i.e.
$flightInfoExResult = $result->FlightInfoExResult;
You can then access the next_offset property with
flightInfoExResult->next_offset; and so on.

Array_diff getting error Array to string conversion php

i want array_diff using this code i am also getting output but same time error occur
"Array to string conversion"
I am using codeigniter, i am getting post value in second array(listingdata) with method $this->input->post(); , but my first array getting some dynamic key and value then this two array diff give me output but some time getting error.
Please Help me
Any solution always welcome.
if(isset($_POST)){
foreach($_POST as $key => $value) {
$arr[$key] = $value; // making array
}
}
$result = array_diff($arr,$listingdata);
print_r($result);
print_r($arr);
print_r($listingdata);
My $arr array
Array
(
[itemTitle] => fdafdas
[subtitle] => fadsfdas
[quantity] => 12
[itemDescription] => fdas
[hide_ebay_id] => 89
[ebay_user] => Array
(
[0] =>
)
[ebay_category] => 2984
[e_sub_cat] => 20433
[e_second_child_sub_cat] => 117027
[e_third_child_sub_cat] =>
[ebay_upc] => 31231241341
[Brand] => Unbranded
[MPN] => Does_Not_Apply
[Model] => fsdf
[Country/Region_of_Manufacture] => Unknown
[listingType] => FixedPriceItem
[listingduration] => Days_5
[buy_it_now_price] => 20.00
[shippingtype] => Flat
[fshippingservice] => USPSPriorityFlatRateBox
[shippingservicecost] => 2.0
[shippingsac] => 3.0
[internationalhc] =>
[paypalemailaddress] => sam#jaff.in
[dispatchtimemax] => 3
[location] => CA
[ebaycountry] =>
[ebay_paypalemail] =>
[ReturnsAccepted] => ReturnsAccepted
[returnswithin] => Days_14
[refundoption] => MoneyBack
[shippingcostpaidbyoption] => Seller
[policydescription] => wqdewvfdgbfdggrbf
)
This is my another Array
Array
(
[itemTitle] => fdafdas
[subTitle] => fadsfdas
[categoryId] => 117027
[itemDescription] => fdas
[listingType] => FixedPriceItem
[listingDuration] => Days_5
[startPrice] =>
[buyItNowPrice] => 20.00
[quantity] => 12
[upc] => 31231241341
[paypalEmailAddress] => sam#jaff.in
[returnWithin] => Days_14
[RefundOption] => MoneyBack
[ShippingCostPaidByOption] => Seller
[returnsAccepted] => ReturnsAccepted
[shippingType] => Flat
[cshippingService] =>
[fshippingService] => USPSPriorityFlatRateBox
[dcPostalcode] =>
[ShippingServiceCost] => 2.0
[dshippingPackage] =>
[shippingHandlingcost] =>
[shippingServiceAdditionalCost] => 3.0
[currency] => USD
[country] =>
[location] => CA
[dispatchTimeMax] => 3
[pictureUrl] => Array
(
[0] => http://jaftech.in/ashprey/uploads/69.jpg
)
[policyDescription] => wqdewvfdgbfdggrbf
[internationalShipping] =>
[internationalShippingType] =>
[internationalShippingServiceCost] =>
[internationalshippingServiceAdditionalCost] =>
[cinternationalshippingService] =>
[finternationalshippingService] =>
[internationalShipToLocation] =>
[internationaloriginatingPostalCode] =>
[internationalshippingHandlingcost] =>
[ishippingPackage] => PackageThickEnvelope
[pid] => 89
)
This is because array_diff compares values after typecasting both compared values to string (see documentation notes).
Both of your arrays contain another array (ebay_user and second pictureUrl).
See this answer for recursive array_diff, which should work in your case.

How to echo an array value

I am fairly new to PHP and I am writing a PHP function that grabs an object from SOAP.
I found a code to convert it to an array but I can't manage to echo any data.
The array from print_r
Array
(
[Status] => Array
(
[Code] => 0
[Message] => OK
)
[Order] => Array
(
[OrderNumber] => 9334543
[ExternalOrderNumber] =>
[OrderTime] => 2014-07-15T15:20:31+02:00
[PaymentMethod] => invoice
[PaymentStatus] => Paid
[ShipmentMethod] => Mypack
[DeliveryStatus] => Delivered
[Language] => sv
[Customer] => Array
(
[CustomerId] => 13556
[CustomerNumber] =>
[Username] => admin
[Approved] => 1
[OrgNumber] => 9309138445
[Company] =>
[VatNumber] =>
[FirstName] => Jane
[LastName] => Doe
[Address] => Gatan
[Address2] =>
[Zip] => 1230
[City] => Staden
[Country] => Sweden
[CountryCode] => SE
[PhoneDay] => 84848474
[PhoneNight] =>
[PhoneMobile] =>
[Email] => mail#msn.com
[NewsLetter] =>
[OrgType] => person
[OtherDelivAddress] =>
[DelivName] =>
[DelivAddress] =>
[DelivAddress2] =>
[DelivZip] =>
[DelivCity] =>
[DelivCountry] =>
[DelivCountryCode] =>
)
[Comment] =>
[Notes] => 9063025471 UK/MA
[CurrencyCode] => SEK
[ExchangeRate] => 1
[LanguagePath] => se
[FreightWithoutVat] => 0
[FreightWithVat] => 0
[FreightVatPercentage] => 25
[PayoptionFeeWithoutVat] => 0
[PayoptionFeeWithVat] => 0
[PayoptionFeeVatPercentage] => 25
[CodWithoutVat] => 0
[CodWithVat] => 0
[CodVatPercentage] => 0
[DiscountWithoutVat] => 0
[DiscountWithVat] => 0
[DiscountVat] => 0
[TotalWithoutVat] => 4388
[TotalWithVat] => 5485
[TotalVat] => 1097
[PayWithoutVat] =>
[AffiliateCode] =>
[AffiliateName] =>
[OrderField] => Array
(
[0] => Array
(
[Name] => external_ref
[Value] => 43445
)
[1] => Array
(
[Name] => webshopid
[Value] => 423
)
[2] => Array
(
[Name] => webshopname
[Value] => Manuell
)
)
)
)
Non working code
echo $array[1][0]
I have tried different combos of indexes. I know how to return the values from the soap object but if I could do it this way it would be easier. It should work shouldn't it?
$array[1] is the second index of the array. the key of this array us "Status", this array contains a code and message
i assume you want to echo the message, you can do that with the following
echo $array[1]["Status"]["Message"];
You should use $array['Status']['Code'] , $array['Status']['Message'], $array['Order']['OrderNumber'], $array['Order']['Customer']['CustomerId'] and so on to display your data. It's an associative array so you need to use string keys and not numbers
try
$array['Order']['Customer']['LastName']
is my best guess without losing my sanity in that one line.
But for us to be sure please post the print_r($array) output
There are some way I always do this:
print_r($array);
And the other way is
$array[0]['Order']['LastName']
Try to access the arrays elements with the string keys, not the integer ones you are using:
echo $array['Order']['Customer']['Address'];
Another way you could see what is going on is by iterating through the array, and print out the keys and values:
foreach ($array as $key => $value)
echo "Key=$key value=$value<br>";

Categories