0

I'm trying to update multiple items as a batch in Version 2.4.3-p1

    $productUpdates = [];
    foreach ($updates as $magento_sku => $data) {
        $productUpdates[] = [
            'sku' => $magento_sku,
            'product' => [
                'price' => $data['price'],
                'extension_attributes' => [
                    'stock_item' => [
                    'qty' => $data['qty']
                ]
            ]
        ]
    ];




$url = 'https://example.com/rest/default/async/bulk/V1/products/bySku';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($productUpdates));
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
curl_close($ch);

echo $response;

The response seems fine:

{"bulk_uuid":"ec459e2a-1989-4852-b0d4-f84321199013","request_items":[{"id":0,"data_hash":"64273b9876093e45c54b36c78efba73b2a17de3982f15d787bcbd49767fdfe6c","status":"accepted"}],"errors":false}

The content is sent to RabbitMQ where I can see its properly received but the data does not get updated as expected.

In fact, the status of the UUID remains in 4 (meaning 'open')

(
    [operations_list] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 0
                    [status] => 4
                    [result_message] =>
                    [error_code] =>
                )

        )

    [user_type] => 2
    [bulk_id] => ec459e2a-1989-4852-b0d4-f84321199013
    [description] => Topic async.magento.catalog.api.productrepositoryinterface.save.put
    [start_time] => 2023-09-01 18:54:07
    [user_id] => 10
    [operation_count] => 1
)

Running php bin/magento queue:consumers:start async.operations.all at the same time as the message is being processed shows:

Argument 1 passed to Magento\Catalog\Model\ProductRepository::getProductFromLocalCache() must be of the type string, null given, called in /home/example/deploy/releases/20230519090918/vendor/magento/module-catalog/Model/ProductRepository.php on line 284#

I can see the content sent to RabbitMQ and it appears to be correct. The SKU certainly exists, so what exactly is being passed as null?

Thank you.

1 Answer 1

0

The solution was rather basic. The payload structure was wrong. I had 'sku' outside the 'product' array by mistake. All good now.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.