PHP SoapClient Elements с такими же ключами - PullRequest
0 голосов
/ 08 марта 2019

Следующий запрос мыла работает, когда элемент ORDER представляется как отдельный элемент в виде массива или как объект, однако мне нужно иметь несколько элементов ORDER.Я сейчас пробую SoapParam / SoapVar без всякой удачи.дни попыток заставить это работать в этом пункте.Спасибо всем за потраченное время!

function SendOrder($wan, $param) {

  $url = "someurl";

  $options = array(
    "trace"      => 1,
    "exceptions" => 1,
    "cache_wsdl"    => WSDL_CACHE_NONE
  );

  try {
    $client = new SoapClient($url, $options);

    $xmlR = $client->ORDER($param);
    //create a usable array
    $json = json_encode($xmlR);
    $array = json_decode($json,true);
    dump($client->__getLastRequestHeaders());
    dump($client->__getLastRequest());
    dump($client->__getLastResponseHeaders());
    dump($client->__getLastResponse());
    return $array;

  } catch (\Exception $e) {
    return $e;
  }
};

$param = new stdClass;
$param->REQUESTUNIQUEID = uniqid();

$person = 0;
$a = 0;
$orders = new stdClass;

foreach ($_SESSION['cartR'] as $c) {
  $person++;
  $menu_item = new stdClass;
  $menu_item->PERSON = array('_' => "{$c->for_who}", 'NUMBER' => $person);
  $menu_item->SERVICETIME = $service_time;
  $menu_item->MENUITEM = array('_' => '', 'ID' => $c->product_id);
  $menu_item->QUANTITY = 1;
  $menu_item->PRICE = $c->price;
  $menu_item->TOPPINGPART = "Whole";
  $menu_item->ITEMLEVEL = 0;
  $menu_item->POSWINDOW = array('_' => 'test', 'ID' => "");

  $orders->MENUTIEM = $menu_item;
  $param->ORDERS[] = $orders;
  unset($menu_item);
}

$result = SendOrder($wan, $param);

Создает объект:

object(stdClass)#26 (13) {
 ["REQUESTUNIQUEID"]=>
 string(13) "5c829ff8197fb"

 ["ORDERS"]=>
  array(5) {
    [0]=>
    object(stdClass)#26 (1) {
      ["MENUTIEM"]=>
      object(stdClass)#39 (6) {
        ["PERSON"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["NUMBER"]=>
          int(5)
        }
        ["SERVICETIME"]=>
        string(20) "0001-01-01T00:00:00Z"
        ["MENUITEM"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["ID"]=>
          int(8001)
        }
        ["QUANTITY"]=>
        int(1)
        ["PRICE"]=>
        string(4) "2.50"
        ["ITEMLEVEL"]=>
        int(0)
      }
    }
    [1]=>
    object(stdClass)#26 (1) {
      ["MENUTIEM"]=>
      object(stdClass)#39 (6) {
        ["PERSON"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["NUMBER"]=>
          int(5)
        }
        ["SERVICETIME"]=>
        string(20) "0001-01-01T00:00:00Z"
        ["MENUITEM"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["ID"]=>
          int(8001)
        }
        ["QUANTITY"]=>
        int(1)
        ["PRICE"]=>
        string(4) "2.50"
        ["ITEMLEVEL"]=>
        int(0)
      }
    }
    [2]=>
    object(stdClass)#26 (1) {
      ["MENUTIEM"]=>
      object(stdClass)#39 (6) {
        ["PERSON"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["NUMBER"]=>
          int(5)
        }
        ["SERVICETIME"]=>
        string(20) "0001-01-01T00:00:00Z"
        ["MENUITEM"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["ID"]=>
          int(8001)
        }
        ["QUANTITY"]=>
        int(1)
        ["PRICE"]=>
        string(4) "2.50"
        ["ITEMLEVEL"]=>
        int(0)
      }
    }
    [3]=>
    object(stdClass)#26 (1) {
      ["MENUTIEM"]=>
      object(stdClass)#39 (6) {
        ["PERSON"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["NUMBER"]=>
          int(5)
        }
        ["SERVICETIME"]=>
        string(20) "0001-01-01T00:00:00Z"
        ["MENUITEM"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["ID"]=>
          int(8001)
        }
        ["QUANTITY"]=>
        int(1)
        ["PRICE"]=>
        string(4) "2.50"
        ["ITEMLEVEL"]=>
        int(0)
      }
    }
    [4]=>
    object(stdClass)#26 (1) {
      ["MENUTIEM"]=>
      object(stdClass)#39 (6) {
        ["PERSON"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["NUMBER"]=>
          int(5)
        }
        ["SERVICETIME"]=>
        string(20) "0001-01-01T00:00:00Z"
        ["MENUITEM"]=>
        array(2) {
          ["_"]=>
          string(0) ""
          ["ID"]=>
          int(8001)
        }
        ["QUANTITY"]=>
        int(1)
        ["PRICE"]=>
        string(4) "2.50"
        ["ITEMLEVEL"]=>
        int(0)
      }
    }
  }
    }

Я пытался сделать предложения в Stack OVerflow 3617398 и некоторых других.Я пытаюсь SoapVar и SoapParam безуспешно, даже не получая урезанный запрос минимально необходимых элементов.

Как правильно создать / форматировать Объект с несколькими элементами с одинаковым именем вэтот сценарий?

РЕЗУЛЬТАТ С Массивом:

"
string(229) "HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/10.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Fri, 08 Mar 2019 18:57:11 GMT
Content-Length: 671
"
string(671) "5c82bb00d12a1 Web Service 27.4.3.320 Error false 0"

SOAPVAR и SOAPPARAM (я пробую разные комбинации SoapParam и SoapVar с минимально необходимыми элементами, такими же URL-адресами и теми же параметрами, что и выше)

$unique_id = uniqid();

$client_software = new stdClass;
  $client_software->SOFTWARENAME  = 'company name';
  $client_software->SOFTWAREAPIVERSION = 1;
  $client_software->SOFTWARECODEVERSION = "1.0.0.0"

$client = new SoapClient($url, $options);

$xmlR = $client->CHECKIMPORT(
new SoapParam(new SoapVar($unique_id, XSD_STRING), 'REQUESTUNIQUEID'),
new SoapParam(new SoapVar($client_software, SOAP_ENC_OBJECT), 'CLIENTSOFTWARE'),

    );

ОТВЕТ:

Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/10.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Fri, 08 Mar 2019 19:06:03 GMT
Content-Length: 868
"
string(868) "Web Service 27.4.3.320 REQUESTUNIQUEID is missing. CLIENTSOFTWARE is missing. false 0

WSDL Tree

    <s:element minOccurs="0" maxOccurs="1" name="ORDERS" type="tns:IMPORTORDERLIST"/>

<s:complexType name="IMPORTORDERLIST">
   <s:choice minOccurs="0" maxOccurs="unbounded">
     <s:element minOccurs="1" maxOccurs="1" name="DISCOUNT" nillable="true" type="tns:IMPORTDISCOUNT"/>
     <s:element minOccurs="1" maxOccurs="1" name="CHARGE" nillable="true" type="tns:IMPORTCHARGE"/>
     <s:element minOccurs="1" maxOccurs="1" name="INSTRUCTION" nillable="true" type="tns:IMPORTINSTRUCTIONS"/>
     <s:element minOccurs="1" maxOccurs="1" name="MENUITEM" nillable="true" type="tns:IMPORTMENUITEM"/>

...