1

我正在使用 XMLRPC 构建一个 XML 结构,将产品信息传递给第三方系统。我需要构建一个产品自定义选项的关联数组,并且我不知道在每种情况下使用什么语法,因为值是一个对象。

我无法像往常一样调试和使用它我已经将它应用到站点,XMLRPC 抛出一个错误,说它无法序列化我构建的对象,然后我很快又将它切换回来。

如果我像这样对其进行硬编码,它可以正常工作。

    $item_array = array(
       "product_id" => new xmlrpcval($item->getSku()),
       "name" => new xmlrpcval($item->getName()),
       "price" => new xmlrpcval($item->getBaseCalculationPrice(), 'double'),
       "vat_inclusive" => new xmlrpcval(0,'int'),
       "quantity" => new xmlrpcval($item->getQty(),'int'),
       "option_text" => new xmlrpcval(
           array(
              "option_1" => new xmlrpcval("Colour: Military Black"),
              "option_2" => new xmlrpcval("Sizes: L")
           ),
           "struct")                          
        );

这是我需要生成的以下部分,特别是 foreach 循环中的数组,因为我不知道会有多少选项;

       "option_text" => new xmlrpcval(
           array(
              "option_1" => new xmlrpcval("Colour: Military Black"),
              "option_2" => new xmlrpcval("Sizes: L")
           ),
           "struct")  

如果我像下面那样做,那么结果很好,但是值是一个字符串而不是一个对象,XMLRPC 不能序列化;

      $optioncount = 1;
      $attList = array();

      foreach ( $attributes as $attribute => $value ) {

          $attpair = implode(": ", $value);

          $attList['option_'. $optioncount] = 'new xmlrpcval("'.$attpair.'")';

          $optioncount++;

      }

如果var_dump($attList)我得到;

array(2) {
  ["option_1"]=>
  string(39) "new xmlrpcval("Colour: Military Black")"
  ["option_2"]=>
  string(25) "new xmlrpcval("Sizes: L")"
}

任何其他方式似乎都会变成$attList一团糟——我知道这应该是非常基本的,但对于我的生活,我无法让它发挥作用。感谢您的任何指示。

如果我var_dump($attList)在使用时new xmlrpcval($attpair);得到;

array(2) {
  ["option_1"]=>
  object(xmlrpcval)#469 (3) {
    ["me"]=>
    array(1) {
      ["string"]=>
      string(22) "Colour: Military Black"
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
  }
  ["option_2"]=>
  object(xmlrpcval)#433 (3) {
    ["me"]=>
    array(1) {
      ["string"]=>
      string(8) "Sizes: L"
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
 }

}

4

1 回答 1

2

构建您的阵列必须如下所示:

  $optioncount = 1;
  $attList = array();

  foreach ( $attributes as $attribute => $value ) {

      $attpair = implode(": ", $value);

      $attList['option_'. $optioncount] = new xmlrpcval($attpair);

      $optioncount++;

  }

进而:

"option_text" => new xmlrpcval(
       $attList,
       "struct")  
于 2013-01-10T01:04:15.183 回答