tags:

views:

35

answers:

0

Hi.

2 distinct problems.

I'm using the PHP SOAP class to pass some XML to a webservice. I can generate simple arrays just fine, and these work perfectly with the webservice.

1.When I try to generate a complex (arrays within arrays) query I'm getting errors.

2.Also I don't understand how to insert a parameter(???) into an XML tag.

Below is a copy of the sample XML query from the webservice documentation

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&gt;
  <soap:Body>
    <InsertInvoice xmlns="KashFlow">
      <UserName>string</UserName>
      <Password>string</Password>
      <Inv>
        <InvoiceDBID>int</InvoiceDBID>
        <InvoiceNumber>int</InvoiceNumber>
        <InvoiceDate>dateTime</InvoiceDate>
        <DueDate>dateTime</DueDate>
        <Customer>string</Customer>
        <CustomerID>int</CustomerID>
        <Paid>int</Paid>
        <CustomerReference>string</CustomerReference>
        <EstimateCategory>string</EstimateCategory>
        <SuppressTotal>int</SuppressTotal>
        <ProjectID>int</ProjectID>
        <CurrencyCode>string</CurrencyCode>
        <ExchangeRate>decimal</ExchangeRate>
        <ReadableString>string</ReadableString>
        <Lines>
          <anyType />
          <anyType />
        </Lines>
        <NetAmount>decimal</NetAmount>
        <VATAmount>decimal</VATAmount>
        <AmountPaid>decimal</AmountPaid>
        <CustomerName>string</CustomerName>
      </Inv>
    </InsertInvoice>
  </soap:Body>
</soap:Envelope>

The problem is occuring in the <Lines></Lines> section of the code.

With regards to the XML tag parameter... I need to produce this :

<Lines>
<anyType xsi:type="InvoiceLine">
 <Quantity>1</Quantity>
 <Description>Description here</Description>
 <Rate>99</Rate>
 <ChargeType>0</ChargeType>
 <VatRate>0</VatRate>
 <VatAmount>0</VatAmount>
 <ProductID>0</ProductID>
 <LineID>0</LineID>
 </anyType>
</Lines>

The bit that I am having problems with is

<anyType xsi:type="InvoiceLine">

namely inserting the xsi:type="InvoiceLine" .....

Here's the php code I'm currently using.

    $invoice_array = array 
(
'InvoiceDBID' => "",
'InvoiceNumber' => 1,
'InvoiceDate' => date("c",strtotime($invoice_data['date_purchased'])),
'DueDate' => date("c",strtotime($invoice_data['date_purchased'])),
'Customer' => $invoice_data['customers_name'],
'CustomerID' => $KFcust->CustomerID,
'Paid' => 0,
'CustomerReference' => "",
'EstimateCategory' => "",
'SuppressTotal' => 0,
'ProjectID' => 0,
'CurrencyCode' => 0,
'ExchangeRate' => 1,
'NetAmount'=> 0,
'ReadableString' =>"this invoice created by osc for order ".$invoice_data['orders_id']);

foreach($line_data as $line)
{
$line_array[] = array(
'Quantity'=>$line['products_quantity'],
'Description'=>$line['products_name'],
'Rate'=>$line['products_tax'],
'ChargeType'=>0,
'VatAmount'=>$totals_data['ot_tax']['value'],
'VatRate'=>$line['products_tax'],
'Sort'=>1,
'ProductID'=>$line['products_id']);
}

$invoice_array['Lines']=array('anyType'=> array('_'=>$line_array, 'xsi:type'=>"InvoiceLine"));
$invoice_array['Netamount']=$totals_data['ot_subtotal']['value']+$totals_data['ot_shipping']['value'];
$invoice_array['VATAmount']=$totals_data['ot_tax']['value'];
$invoice_array['AmountPaid']=$totals_data['ot_total']['value'];
$invoice_array['CustomerName']=$invoice_data['customers_name'];

$invID = $client->createInvoice($invoice_array);

Sorry this inquiry is a little muddled - but as you can see, both of these problems go hand in hand.

**The actual error message received is

Unable to cast object of type 'System.Xml.XmlNode[]' to type 'KashFlow.InvoiceLine'.

But this is just an indication that I am submitting XML that is not in the expected format.

Can anyone help please?