I am having problem with array in php. I need to send an xml via soap to the webservice with some product items, but an tag is bringing me doubts. The wsdl manual has an xml like this:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.edei.correios.com.br/"> <soapenv:Header/>
<soapenv:Body>
<ser:solicitarCodigoEtiquetaInternacional>
<!--Optional:-->
<xml>
<remessa>
<idioma>PT</idioma>
<encomendas>
<encomenda>
<cartaoDePostagem>0061962740</cartaoDePostagem>
<codigoControleCliente>100052202</codigoControleCliente>
<nomeRemetente>magento.COM</nomeRemetente>
<enderecoRemetente>Street Test</enderecoRemetente>
<numeroEnderecoRemetente>2017</numeroEnderecoRemetente>
<complementoEnderecoRemetente></complementoEnderecoRemetente>
<codigoPostalRemetente>83642</codigoPostalRemetente>
<cidadeRemetente>MERIDIAN</cidadeRemetente>
<estadoRemetente>ID</estadoRemetente>
<paisRemetente>US</paisRemetente>
<emailRemetente>[email protected]</emailRemetente>
<telefoneRemetente></telefoneRemetente>
<siteRemetente>www.bodybuilding.com</siteRemetente>
<nomeDestinatario>Junior Maia</nomeDestinatario>
<tipoDocumentoDestinatario>1</tipoDocumentoDestinatario>
<numeroDocumentoDestinatario>16549651468</numeroDocumentoDestinatario>
<enderecoDestinatario>Street Test</enderecoDestinatario>
<numeroEnderecoDestinatario>S/N</numeroEnderecoDestinatario>
<complementoEnderecoDestinatario>Test</complementoEnderecoDestinatario>
<codigoPostalDestinatario>70680506</codigoPostalDestinatario>
<caixaPostalDestinatario></caixaPostalDestinatario>
<cidadeDestinatario>Curitiba</cidadeDestinatario>
<ufDestinatario>PR</ufDestinatario>
<paisDestinatario>BR</paisDestinatario>
<emailDestinatario>[email protected]</emailDestinatario>
<telefoneDestinatario></telefoneDestinatario>
<pesoObjeto>150</pesoObjeto>
<comprimentoObjeto>16</comprimentoObjeto>
<larguraObjeto>11</larguraObjeto>
<alturaObjeto>2</alturaObjeto>
<modalidadeDistribuicaoObjeto>33375</modalidadeDistribuicaoObjeto>
<modalidadePagamentoImpostosObjeto>1</modalidadePagamentoImpostosObjeto>
<codigoMoeda>USD</codigoMoeda>
<valorFreteObjeto>50.00</valorFreteObjeto>
<valorSeguroObjeto>0.00</valorSeguroObjeto>
<modoDevolucaoObjeto>1</modoDevolucaoObjeto>
<seguroDevolucaoObjeto>N</seguroDevolucaoObjeto>
<itensEncomenda>
<itemEncomenda>
<codigoSHItem>100190</codigoSHItem>
<codigoSKUItem>TYH820040</codigoSKUItem>
<descricaoItem>BPI SPORTS BLOX - 110 SERVINGS - BLUEBERRY</descricaoItem>
<quantidadeItem>1</quantidadeItem>
<valorUnitario>100.00</valorUnitario>
<pesoUnitario></pesoUnitario>
</itemEncomenda>
<itemEncomenda>
<codigoSHItem>100191</codigoSHItem>
<codigoSKUItem>TYH820041</codigoSKUItem>
<descricaoItem>BPI SPORTS BLOX - 110 SERVINGS - WHITE</descricaoItem>
<quantidadeItem>1</quantidadeItem>
<valorUnitario>100.00</valorUnitario>
<pesoUnitario></pesoUnitario>
</itemEncomenda>
<itemEncomenda>
<codigoSHItem>100192</codigoSHItem>
<codigoSKUItem>TYH820042</codigoSKUItem>
<descricaoItem>BPI SPORTS BLOX - 110 SERVINGS - RED</descricaoItem>
<quantidadeItem>1</quantidadeItem>
<valorUnitario>100.00</valorUnitario>
<pesoUnitario></pesoUnitario>
</itemEncomenda>
</itensEncomenda>
</encomenda>
</encomendas>
</remessa>]]>
</xml>
</ser:solicitarCodigoEtiquetaInternacional>
</soapenv:Body>
Notice that the <itemEncomenda> tag repeats depending on how many products the order has, and that's exactly what I can not feed into php.
I'm using StdClass to mount an array with the requested positions in the example and mount the xml with SoapVar, it's working for all tags, but for itemEncomenda no! For example, I have 4 items in the order, only the last one is written in the <itemEncomenda> tag, the others do not appear. I imagine this happens because an index itemEncomenda is created in the array and it goes overwriting the old positions. I do not really know how to mount an array by repeating this tag.
Here my code to mount the xml with StdClass and mount the xml:
$var = new StdClass;
$var->xml = new stdClass;
$var->xml->remessa = new stdClass;
$var->xml->remessa->idioma = $this->idioma;
$var->xml->remessa->encomendas = new stdClass;
$var->xml->remessa->encomendas->encomenda = new stdClass;
//remetende
$var->xml->remessa->encomendas->encomenda->cartaoDePostagem = $this->cartao_postagem;
$var->xml->remessa->encomendas->encomenda->codigoControleCliente = '';
$var->xml->remessa->encomendas->encomenda->nomeRemetente = $this->remetente_nome;
$var->xml->remessa->encomendas->encomenda->enderecoRemetente = $this->remetente_rua;
$var->xml->remessa->encomendas->encomenda->numeroEnderecoRemetente = $this->remetente_numero;
$var->xml->remessa->encomendas->encomenda->complementoEnderecoRemetente = $this->remetente_complemento;
$var->xml->remessa->encomendas->encomenda->codigoPostalRemetente = $this->remetente_cep;
$var->xml->remessa->encomendas->encomenda->cidadeRemetente = $this->remetente_cidade;
$var->xml->remessa->encomendas->encomenda->estadoRemetente = $this->remetente_estado;
$var->xml->remessa->encomendas->encomenda->paisRemetente = $this->remetente_pais;
$var->xml->remessa->encomendas->encomenda->emailRemetente = $this->remetente_email;
$var->xml->remessa->encomendas->encomenda->telefoneRemetente = $this->remetente_telefone;
$var->xml->remessa->encomendas->encomenda->siteRemetente = $this->remetente_site;
//destinatário customer
$var->xml->remessa->encomendas->encomenda->nomeDestinatario = $customer_nome;
$var->xml->remessa->encomendas->encomenda->tipoDocumentoDestinatario = '1'; //1-cpf 2-cnpj 3-passport 4-not informed
$var->xml->remessa->encomendas->encomenda->numeroDocumentoDestinatario = $customer_taxvat;
$var->xml->remessa->encomendas->encomenda->enderecoDestinatario = $customer_rua;
$var->xml->remessa->encomendas->encomenda->numeroEnderecoDestinatario = $customer_rua_numero;
$var->xml->remessa->encomendas->encomenda->complementoEnderecoDestinatario = $customer_compemento;
$var->xml->remessa->encomendas->encomenda->codigoPostalDestinatario = $customer_cep;
$var->xml->remessa->encomendas->encomenda->caixaPostalDestinatario = '';
$var->xml->remessa->encomendas->encomenda->cidadeDestinatario = $customer_cidade;
$var->xml->remessa->encomendas->encomenda->ufDestinatario = $customer_uf;
$var->xml->remessa->encomendas->encomenda->paisDestinatario = $customer_pais;
$var->xml->remessa->encomendas->encomenda->emailDestinatario = $customer_email;
$var->xml->remessa->encomendas->encomenda->telefoneDestinatario = $customer_telefone;
//objeto
$var->xml->remessa->encomendas->encomenda->pesoObjeto = '';
$var->xml->remessa->encomendas->encomenda->comprimentoObjeto = '';
$var->xml->remessa->encomendas->encomenda->larguraObjeto = '';
$var->xml->remessa->encomendas->encomenda->alturaObjeto = '';
$var->xml->remessa->encomendas->encomenda->modalidadeDistribuicaoObjeto = $this->modalidade_distribuicao_objeto;
$var->xml->remessa->encomendas->encomenda->modalidadePagamentoImpostosObjeto = $this->modalidade_pagamento_imposto;
$var->xml->remessa->encomendas->encomenda->codigoMoeda = $this->moeda;
$var->xml->remessa->encomendas->encomenda->valorFreteObjeto = '';
$var->xml->remessa->encomendas->encomenda->valorSeguroObjeto = '';
$var->xml->remessa->encomendas->encomenda->modoDevolucaoObjeto = $this->modo_devolocao;
$var->xml->remessa->encomendas->encomenda->seguroDevolucaoObjeto = $this->seguro_devolucao ;
//itens
$var->xml->remessa->encomendas->encomenda->itensEncomenda = new stdClass;
foreach ($invoice->getAllItems() as $item){
if ($item->getOrderItem()->getParentItem()) {
continue;
}
$item_name = $item->getName();
$item_sku = $item->getSku();
$item_id = $item->getProductId();
$item_qty = $item->getQty();
$item_price = $item->getPrice();
$_product = Mage::getModel('catalog/product')->load($item_id);
$item_peso = $_product->getWeight();
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda = new stdClass;
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda->codigoSHItem = '';
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda->codigoSKUItem = $item_sku;
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda->descricaoItem = $item_name;
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda->quantidadeItem = $item_qty;
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda->valorUnitario = $item_price;
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda->pesoUnitario = $item_peso;
}
print_r($var);
The output on the console is an array exactly as needed, but with only 1 item, and in $invoice->getAllItems() there are 5!
Output:
2017-12-14T18:17:04+00:00 DEBUG (7): stdClass Object
(
[xml] => stdClass Object
(
[remessa] => stdClass Object
(
[idioma] => PT
[encomendas] => stdClass Object
(
[encomenda] => stdClass Object
(
[cartaoDePostagem] => 0057018901
[codigoControleCliente] =>
[nomeRemetente] =>
[enderecoRemetente] =>
[numeroEnderecoRemetente] =>
[complementoEnderecoRemetente] =>
[codigoPostalRemetente] =>
[cidadeRemetente] =>
[estadoRemetente] =>
[paisRemetente] =>
[emailRemetente] =>
[telefoneRemetente] =>
[siteRemetente] =>
[nomeDestinatario] => josué ribeiro de frança rocha
[tipoDocumentoDestinatario] => 1
[numeroDocumentoDestinatario] => 69077886168
[enderecoDestinatario] => QNE 34 casa 16 Taguatinga Norte
[numeroEnderecoDestinatario] => 16
[complementoEnderecoDestinatario] => Sandu Norte
[codigoPostalDestinatario] => 72125340
[caixaPostalDestinatario] =>
[cidadeDestinatario] => Brasília
[ufDestinatario] => DF
[paisDestinatario] => BR
[emailDestinatario] => [email protected]
[telefoneDestinatario] => (61) 98379-7370
[pesoObjeto] =>
[comprimentoObjeto] =>
[larguraObjeto] =>
[alturaObjeto] =>
[modalidadeDistribuicaoObjeto] => 33367
[modalidadePagamentoImpostosObjeto] => 1
[codigoMoeda] => BRL
[valorFreteObjeto] =>
[valorSeguroObjeto] =>
[modoDevolucaoObjeto] => 1
[seguroDevolucaoObjeto] => 1
[itensEncomenda] => stdClass Object
(
[itemEncomenda] => stdClass Object
(
[codigoSHItem] =>
[codigoSKUItem] => LI-60669896245-preto
[descricaoItem] => Smartwatch DZ09 Câmera 2.0 MP Bluetooth Conectividade Redes Sociais Fashion - Preto
[quantidadeItem] => 2.0000
[valorUnitario] => 49.9000
[pesoUnitario] => 0.4000
)
)
)
)
)
)
)
It should be this, with 5 [itemEncomenda]:
2017-12-14T18:17:04+00:00 DEBUG (7): stdClass Object
(
[xml] => stdClass Object
(
[remessa] => stdClass Object
(
[idioma] => PT
[encomendas] => stdClass Object
(
[encomenda] => stdClass Object
(
[cartaoDePostagem] => 0057018901
[codigoControleCliente] =>
[nomeRemetente] =>
[enderecoRemetente] =>
[numeroEnderecoRemetente] =>
[complementoEnderecoRemetente] =>
[codigoPostalRemetente] =>
[cidadeRemetente] =>
[estadoRemetente] =>
[paisRemetente] =>
[emailRemetente] =>
[telefoneRemetente] =>
[siteRemetente] =>
[nomeDestinatario] => josué ribeiro de frança rocha
[tipoDocumentoDestinatario] => 1
[numeroDocumentoDestinatario] => 69077886168
[enderecoDestinatario] => QNE 34 casa 16 Taguatinga Norte
[numeroEnderecoDestinatario] => 16
[complementoEnderecoDestinatario] => Sandu Norte
[codigoPostalDestinatario] => 72125340
[caixaPostalDestinatario] =>
[cidadeDestinatario] => Brasília
[ufDestinatario] => DF
[paisDestinatario] => BR
[emailDestinatario] => [email protected]
[telefoneDestinatario] => (61) 98379-7370
[pesoObjeto] =>
[comprimentoObjeto] =>
[larguraObjeto] =>
[alturaObjeto] =>
[modalidadeDistribuicaoObjeto] => 33367
[modalidadePagamentoImpostosObjeto] => 1
[codigoMoeda] => BRL
[valorFreteObjeto] =>
[valorSeguroObjeto] =>
[modoDevolucaoObjeto] => 1
[seguroDevolucaoObjeto] => 1
[itensEncomenda] => stdClass Object
(
[itemEncomenda] => stdClass Object
(
[codigoSHItem] =>
[codigoSKUItem] => LI-60669896245-preto
[descricaoItem] => Smartwatch DZ09 Câmera 2.0 MP Bluetooth Conectividade Redes Sociais Fashion - Preto
[quantidadeItem] => 2.0000
[valorUnitario] => 49.9000
[pesoUnitario] => 0.4000
)
[itemEncomenda] => stdClass Object
(
[codigoSHItem] =>
[codigoSKUItem] => LI-60669896245-branco
[descricaoItem] => Smartwatch DZ09 Câmera 2.0 MP Bluetooth Conectividade Redes Sociais Fashion - Branco
[quantidadeItem] => 2.0000
[valorUnitario] => 49.9000
[pesoUnitario] => 0.4000
)
[itemEncomenda] => stdClass Object
(
[codigoSHItem] =>
[codigoSKUItem] => LI-60669896245-vermelho
[descricaoItem] => Smartwatch DZ09 Câmera 2.0 MP Bluetooth Conectividade Redes Sociais Fashion - Vermelho
[quantidadeItem] => 3.0000
[valorUnitario] => 49.9000
[pesoUnitario] => 0.4000
)
[itemEncomenda] => stdClass Object
(
[codigoSHItem] =>
[codigoSKUItem] => LI-60669896245-verde
[descricaoItem] => Smartwatch DZ09 Câmera 2.0 MP Bluetooth Conectividade Redes Sociais Fashion - Verde
[quantidadeItem] => 1.0000
[valorUnitario] => 49.9000
[pesoUnitario] => 0.4000
)
[itemEncomenda] => stdClass Object
(
[codigoSHItem] =>
[codigoSKUItem] => LI-60669896245-cinca
[descricaoItem] => Smartwatch DZ09 Câmera 2.0 MP Bluetooth Conectividade Redes Sociais Fashion - Cinza
[quantidadeItem] => 4.0000
[valorUnitario] => 49.9000
[pesoUnitario] => 0.4000
)
)
)
)
)
)
)
Need help!