• Как очистить поле с типом Дата и Дата-время в AmoCrm?

    @SmokyA Автор вопроса
    Все, из техподдержки ответили, делюсь, если кому-то понадобится: запрос должен идти в другом виде:
    {"custom_fields_values":[{"field_id":field_id,"values":null}]}
    Ответ написан
    1 комментарий
  • Что означет ошибка, которую выводит SOAP-клиент?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Читаем wsdl. Находим нужный запрос.
    operation Tracking
    <operation name="Tracking">
      <input message="tns:TrackingRequestMessage"/>
      <output message="tns:TrackingResponseMessage"/>
    </operation>

    Значит запрос Tracking принимает на вход TrackingRequestMessage. Смотрим дальше
    message TrackingRequestMessage
    <message name="TrackingRequestMessage">
      <part name="parameters" element="tns:Tracking"/>
    </message>

    Единственное поле parameters с типом Tracking. Ищем этот тип.
    element Tracking
    <xs:element name="Tracking">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Language" type="xs:string" nillable="true"/>
          <xs:element name="Login" type="xs:string" nillable="true"/>
          <xs:element name="Password" type="xs:string" nillable="true"/>
          <xs:element name="Type" type="xs:string"/>
          <xs:element name="Documents" type="xs:string" nillable="true"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

    Получаем объект или ассоциативный массив с текстовыми полями Language, Login, Password, Type и Documents, причём все поля кроме Type могут иметь значение null.
    Значит запрос должен выглядеть как
    $result = $client->Tracking([
        'Language' => ?string,
        'Login' => ?string,
        'Password' => ?string,
        'Type' => string,
        'Documents' => ?string
    ]);

    То же самое можно получить и средствами PHP. После подключения к клиенту получим список методов.
    var_dump($client->__getFunctions());
    /* ...
    [92] => string(47) "TrackingResponse Tracking(Tracking $parameters)"
    ... */

    Значит метод Tracking принимает один параметр с типом Tracking и возвращает ответ типа TrackingResponse.
    Запросим типы.
    var_dump($client->__getTypes());
    Результат запроса
    /* ...
    [120] => string(103) "struct Tracking {
     string Language;
     string Login;
     string Password;
     string Type;
     string Documents;
    }"
    [121] => string(51) "struct TrackingResponse {
     ResultTracking return;
    }"
    [24] => string(81) "struct ResultTracking {
     TrackingInfo Items;
     boolean Error;
     string ErrorInfo;
    }"
    [28] => string(227) "struct TrackingInfo {
     boolean Error;
     string Type;
     string Number;
     string Info;
     string AgentURL;
     dateTime CreateDate;
     string State;
     dateTime DeliveryDate;
     string DeliveryInfo;
     TrackingEvent History;
     Waybill Waybills;
    }"
    [27] => string(83) "struct TrackingEvent {
     dateTime EventDate;
     string EventName;
     string EventInfo;
    }"
    [31] => string(546) "struct Waybill {
     string Type;
     string Number;
     dateTime CreateDate;
     string State;
     dateTime DeliveryDate;
     string Sender;
     string SenderGeography;
     string Recipient;
     string RecipientGeography;
     string RecipientAddress;
     dateTime SendDate;
     string Payer;
     int CargoQty;
     float NetWeight;
     float GrossWeight;
     string ConsolidationNumber;
     string InventoryWaybillNumber;
     string DeliveryMethod;
     float Volume;
     boolean RequirePaymentInCash;
     float PaymentInCash;
     string PaymentInCashCurrency;
     string RecipientOfficial;
     TrackingEvent History;
    }"
    ... */


    Единственное отличие от самостоятельного анализа wsdl - не указано, какие поля необязательные, какие можно заполнять null и являются ли какие-то поля массивами.
    Ответ написан
    3 комментария