PHPの配列に問題があります。いくつかの商品アイテムを使ってwebサービスにSOAPを介してxmlを送信する必要がありますが、タグで疑問が生じます。 <itemEncomenda>
タグは順序がありどのように多くの製品に応じて繰り返され、そしてそれは私がPHPに供給することはできませんまさにだとphp - XMLの配列
<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>
お知らせ:WSDLのマニュアルは、このようなXMLを持っています。
例で要求された位置に配列をマウントするのにStdClassを使用していて、xmlをSoapVarでマウントしていますが、すべてのタグで機能しますが、itemEncomenda
はありません。たとえば、注文には4つの項目があり、最後の項目のみが<itemEncomenda>
タグに書き込まれ、残りの項目は表示されません。私は、配列内にインデックスitemEncomenda
が作成され、古い位置を上書きするので、これが起こると思います。私は本当にこのタグを繰り返すことによって配列をマウントする方法を知らない。
ここに私のコードStdClass
でXMLをマウントし、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);
出力コンソールには、必要に応じて正確に配列ですが、唯一の1項目とし、$invoice->getAllItems()
に5があります!
出力:
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
)
)
)
)
)
)
)
それは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
)
)
)
)
)
)
)
助けが必要!何が起こることはitensEncomenda
が、あなたはまた、クラスであるプロパティitemEncomenda
を作成し、クラスであるということである
$var->xml->remessa->encomendas->encomenda->itensEncomenda = new stdClass;
...
$var->xml->remessa->encomendas->encomenda->itensEncomenda->itemEncomenda = new stdClass;
:
誰かしてください! –