Skip to content

Latest commit

 

History

History
314 lines (256 loc) · 8.81 KB

File metadata and controls

314 lines (256 loc) · 8.81 KB

Get Available Fields of a Basket Item (Product from Catalog) sale.basketitem.getFieldsCatalogProduct

{% note tip "" %}

If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect to the MCP server so that the assistant can utilize the official REST documentation.

{% endnote %}

Scope: sale

Who can execute the method: store manager

The method sale.basketitem.getFieldsCatalogProduct retrieves a list of available fields for a basket item (position) for the methods sale.basketitem.addCatalogProduct and sale.basketitem.updateCatalogProduct — these methods only work with products from the catalog module in basket items (positions).

Unlike sale.basketitem.getFields, the method sale.basketitem.getFieldsCatalogProduct returns the minimum necessary list of fields for operation.

No parameters required.

Code Examples

{% include Footnote on examples %}

{% list tabs %}

  • cURL (Webhook)

    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.basketitem.getFieldsCatalogProduct
  • cURL (OAuth)

    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/sale.basketitem.getFieldsCatalogProduct
  • JS (TS)

    // This snippet is an ES module: top-level await requires type="module" or a bundler.
    // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
    import { Text } from '@bitrix24/b24jssdk'
    import type { B24Frame } from '@bitrix24/b24jssdk'
    
    declare const $b24: B24Frame
    
    type FieldDescription = {
      isImmutable: boolean
      isReadOnly: boolean
      isRequired: boolean
      type: string
    }
    
    // Shape of the payload returned in result (match the "response handling" section of the page)
    type GetCatalogProductFieldsResult = {
      basketItem: Record<string, FieldDescription>
    }
    
    try {
      const response = await $b24.actions.v2.call.make<GetCatalogProductFieldsResult>({
        method: 'sale.basketitem.getFieldsCatalogProduct',
        params: {},
        requestId: Text.getUuidRfc4122()
      })
    
      // The payload is available only on a successful response
      if (!response.isSuccess) {
        console.error(response.getErrorMessages().join('; '))
      } else {
        const result = response.getData()!.result
        console.info('basketItem fields:', Object.keys(result.basketItem))
      }
    } catch (error) {
      // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
      console.error(error)
    }
  • JS (UMD)

    <!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
    <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
    <script>
      async function getCatalogProductFields() {
        try {
          // Initialize the SDK inside a Bitrix24 frame
          const $b24 = await B24Js.initializeB24Frame()
    
          const response = await $b24.actions.v2.call.make({
            method: 'sale.basketitem.getFieldsCatalogProduct',
            params: {},
            requestId: B24Js.Text.getUuidRfc4122()
          })
    
          // The payload is available only on a successful response
          if (!response.isSuccess) {
            console.error(response.getErrorMessages().join('; '))
            return
          }
    
          const result = response.getData().result
          console.info('basketItem fields:', Object.keys(result.basketItem))
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
      }
    
      document.addEventListener('DOMContentLoaded', getCatalogProductFields)
    </script>
  • Python

    from b24pysdk.errors import BitrixAPIError, BitrixSDKException
    
    try:
        bitrix_response = client.sale.basketitem.get_fields_catalog_product().response
        result = bitrix_response.result
        print(result)
    except BitrixAPIError as error:
        print(
            "Bitrix API error",
            f"error: {error.error}",
            f"error_description: {error.error_description}",
            sep="\n",
        )
    except BitrixSDKException as error:
        print(f"Bitrix SDK error: {error.message}")
    except Exception as error:
        print(f"Unexpected error: {error}")
  • PHP

    try {
        $response = $b24Service
            ->core
            ->call(
                'sale.basketitem.getFieldsCatalogProduct',
                []
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        if ($result->error()) {
            echo 'Error: ' . $result->error();
        } else {
            echo 'Success: ' . print_r($result->data(), true);
        }
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error getting catalog product fields: ' . $e->getMessage();
    }
  • BX24.js

    BX24.callMethod(
        "sale.basketitem.getFieldsCatalogProduct",
        {},
    )
        .then(
            function(result)
            {
                if (result.error())
                {
                    console.error(result.error());
                }
                else
                {
                    console.log(result.data());
                }
            },
            function(error)
            {
                console.info(error);
            }
        );
  • PHP CRest

    require_once('crest.php');
    
    $result = CRest::call(
        'sale.basketitem.getFieldsCatalogProduct',
        []
    );
    
    echo '<PRE>';
    print_r($result);
    echo '</PRE>';
  • Go

    // client and ctx are already created — see the Go SDK section
    res, err := client.Core().Call(ctx, "sale.basketitem.getFieldsCatalogProduct", nil)
    if err != nil {
    	return fmt.Errorf("sale.basketitem.getFieldsCatalogProduct: %w", err)
    }
    
    // The response arrives as json.RawMessage — unmarshal it
    // into a struct matching the response shape shown below on this page.
    fmt.Printf("%s\n", res.Result)

{% endlist %}

Response Handling

HTTP Status: 200

{
    "result": {
        "basketItem": {
            "basePrice": {
                "isImmutable": false,
                "isReadOnly": true,
                "isRequired": false,
                "type": "double"
            },
            "canBuy": {
                "isImmutable": false,
                "isReadOnly": true,
                "isRequired": false,
                "type": "string"
            },
            "catalogXmlId": {
                "isImmutable": false,
                "isReadOnly": true,
                "isRequired": false,
                "type": "string"
            },
        ...
        }
    },
    "time": {
        "start": 1713789567.852219,
        "finish": 1713789568.52453,
        "duration": 0.6723108291625977,
        "processing": 0.01367807388305664,
        "date_start": "2024-04-22T14:39:27+02:00",
        "date_finish": "2024-04-22T14:39:28+02:00",
        "operating": 0
    }
}

Returned Data

#| || Name type | Description || || result object | Root element of the response || || basketItem object | Object in the format {"field_1": "value_1", ... "field_N": "value_N"}, where field is the identifier of the field of the sale_basket_item, and value is an object of type rest_field_description || || time time | Information about the request execution time || |#

Error Handling

HTTP Status: 400

{
    "error":0,
    "error_description":"error"
}

{% include notitle error handling %}

Possible Error Codes

#| || Code | Description || || 200040300010 | Insufficient permissions to read || || 0 | Other errors (e.g., fatal errors) || |#

{% include system errors %}

Continue Learning