Creare un prodotto scaricabile

Scopri come creare un prodotto scaricabile utilizzando l’API REST e l’amministratore Adobe Commerce.

A chi serve questo video?

  • Gestori di siti Web
  • eCommerce merchandisers
  • Nuovi sviluppatori di Adobe Commerce che desiderano imparare a creare prodotti in Adobe Commerce utilizzando l’API REST

Contenuto video

Domini scaricabili consentiti

È necessario specificare quali domini sono consentiti per consentire i download. I domini vengono aggiunti al file env.php del progetto tramite la riga di comando. Il file env.php descrive i domini che possono contenere contenuto scaricabile. Si verifica un errore se viene creato un prodotto scaricabile utilizzando l'API REST prima dell'aggiornamento del file php.env:

{
    "message": "Link URL's domain is not in list of downloadable_domains in env.php."
}

Per impostare il dominio, connettersi al server: bin/magento downloadable:domains:add www.example.com

Una volta completato, env.php viene modificato all'interno dell'array downloadable_domains.

    'downloadable_domains' => [
        'www.example.com'
    ],

Ora che il dominio è stato aggiunto a env.php, è possibile creare un prodotto scaricabile in Adobe Commerce Admin o utilizzando l'API REST.

Per ulteriori informazioni, consulta Riferimento configurazione.

IMPORTANT
In alcune versioni di Adobe Commerce, quando un prodotto viene modificato in Adobe Commerce Admin, potrebbe venire visualizzato il seguente errore. Il prodotto viene creato utilizzando l’API REST, ma il download collegato ha un prezzo null.

Deprecated Functionality: number_format(): Passing null to parameter #1 ($num) of type float is deprecated in /app/vendor/magento/module-downloadable/Ui/DataProvider/Product/Form/Modifier/Data/Links.php on line 228.

Per correggere l'errore, utilizzare l'API del collegamento di aggiornamento: POST V1/products/{sku}/downloadable-links.

Per ulteriori informazioni, consulta la sezione Aggiornare un collegamento di download del prodotto utilizzando cURL.

Creare un prodotto scaricabile utilizzando cURL (download dal server remoto)

Questo esempio mostra come creare un prodotto scaricabile utilizzando cURL quando il file da scaricare non si trova sullo stesso server. Questo caso d’uso è tipico se il file viene memorizzato in un bucket S3 o in un altro gestore di risorse digitali.

curl --location '{{your.url.here}}/rest/default/V1/products' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{Your Bearer Token}}' \
--header 'Cookie: PHPSESSID=b78cae2338f12d846d233d4e9486607e; private_content_version=564dde2976849891583a9a649073f01' \
--data '{
  "product": {
    "sku": "POSTMAN-download-product-1",
    "name": "POSTMAN download product-1",
    "attribute_set_id": 4,
    "price": 9.9,
    "status": 1,
    "visibility": 4,
    "type_id": "downloadable",
    "extension_attributes": {
        "website_ids": [
            1
        ],

        "downloadable_product_links": [
            {
                "title": "My url link",
                "sort_order": 1,
                "is_shareable": 1,
                "price": 0,
                "number_of_downloads": 0,
                "link_type": "url",
                "link_url": "{{location.url.where.file.exists}}/some-file.zip",
                "sample_type": "url",
                "sample_url": "{{location.url.where.file.exists}}/sample-file.zip"
            }
        ],
        "downloadable_product_samples": []
    },
    "product_links": [],
    "options": [],
    "media_gallery_entries": [],
    "tier_prices": []
  }
}
'

Creare un prodotto scaricabile utilizzando cURL (download dal server applicazioni Commerce)

Questo esempio illustra come utilizzare cURL per creare un prodotto scaricabile dall’amministratore di Adobe Commerce quando il file viene memorizzato sullo stesso server dell’applicazione Adobe Commerce.

In questo caso d'uso, quando l'amministratore che gestisce il catalogo sceglie upload file, il file viene trasferito alla directory pub/media/downloadable/files/links/. L’automazione crea e sposta i file nelle rispettive posizioni in base al seguente pattern:

  • Ogni file caricato viene memorizzato in una cartella in base ai primi due caratteri del nome del file.
  • Quando il caricamento viene avviato, l'applicazione Commerce crea o utilizza cartelle esistenti per trasferire il file.
  • Durante il download del file, la sezione link_file del percorso utilizza la parte del percorso aggiunta alla directory pub/media/downloadable/files/links/.

Ad esempio, se il file caricato è denominato download-example.zip:

  • Il file è stato caricato nel percorso pub/media/downloadable/files/links/d/o/.
    Le sottodirectory /d e /d/o vengono create se non esistono.

  • Il percorso finale del file è /pub/media/downloadable/files/links/d/o/download-example.zip.

  • Il valore link_url per questo esempio è d/o/download-example.zip

curl --location '{{your.url.here}}/rest/default/V1/products' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{Your Bearer Token}}' \
--header 'Cookie: PHPSESSID=571f5ebe48857569cd56bde5d65f83a2; private_content_version=9f3286b427812be6aec0b04cae33ba35' \
--data '{
  "product": {
    "sku": "sample-local-download-file",
    "name": "A downloadable product with locally hosted download file",
    "attribute_set_id": 4,
    "price": 33,
    "status": 1,
    "visibility": 4,
    "type_id": "downloadable",
    "extension_attributes": {
        "website_ids": [
            1
        ],
        "downloadable_product_links": [
            {
                "title": "an api version of already upload file",
                "sort_order": 1,
                "is_shareable": 1,
                "price": 0,
                "number_of_downloads": 0,
                "link_type": "file",
                "link_file": "/d/o/downloadable-file-demo-file-upload.zip",
                "sample_type": null
            }
        ],
        "downloadable_product_samples": []
    },
    "product_links": [],
    "options": [],
    "media_gallery_entries": [],
    "tier_prices": []
  }
}'

Ottieni un prodotto utilizzando CURL

curl --location '{{your.url.here}}/rest/default/V1/products/POSTMAN-download-product-1' \
--header 'Authorization: Bearer {{Your Bearer Token}}' \
--header 'Cookie: PHPSESSID=b78cae2338f12d846d233d4e9486607e; private_content_version=564dde2976849891583a9a649073f01e'

Usa l'endpoint rest/all/V1/products/{sku}/downloadable-links
SKU è l'ID prodotto generato al momento della creazione del prodotto. Ad esempio, nell’esempio di codice seguente, è il numero 39, ma assicurati che sia aggiornato per utilizzare l’ID dal tuo sito web. Questo aggiorna i collegamenti per i prodotti scaricabili.

{
  "link": {
    "id": 39,
    "title": "My swagger update",
    "sort_order": 0,
    "is_shareable": 0,
    "price": 0,
    "number_of_downloads": 0,
    "link_type": "url",
    "link_file": "{{your.url.here}}/some-file.zip",
    "link_url": "{{your.url.here}}/some-file.zip",
    "link_file_content": {
      "file_data": "{{your.url.here}}/some-file.zip",
      "extension_attributes": {}
    }
  },
  "isGlobalScopeContent": true
}

Aggiornare un collegamento per il download di prodotti utilizzando CURL

Quando aggiorni un collegamento per il download di un prodotto utilizzando cURL, l’URL include lo SKU del prodotto che viene aggiornato. Nell'esempio di codice seguente, lo SKU è abcd12345. Quando invii il comando, modifica il valore in modo che corrisponda allo SKU del prodotto che desideri aggiornare.

curl --location '{{your.url.here}}/rest/all/V1/products/abcd12345/downloadable-links' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{Your Bearer Token}}' \
--header 'Cookie: PHPSESSID=fa5d76f4568982adf369f758e8cb9544; private_content_version=564dde2976849891583a9a649073f01e' \
--data '{
  "link": {
    "id": {{The ID of the download link for example 39}},
    "title": "My update",
    "sort_order": 0,
    "is_shareable": 0,
    "price": 0,
    "number_of_downloads": 0,
    "link_type": "url",
    "link_file": "{{your.url.here}}/some-file.zip",
    "link_url": "{{your.url.here}}/some-file.zip",
    "link_file_content": {
      "file_data": "{{your.url.here}}/some-file.zip",
      "extension_attributes": {}
    }
  },
  "isGlobalScopeContent": true
}'

Risorse aggiuntive

recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f