> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XStoreQueryProductsAsync

> XStoreQueryProductsAsync

# XStoreQueryProductsAsync

Retourne les informations de fiche pour les produits spécifiés qui sont associés au jeu en cours, que ces produits puissent être achetés ou non dans le jeu.

## Syntaxe

```cpp theme={null}
HRESULT XStoreQueryProductsAsync(  
         const XStoreContextHandle storeContextHandle,  
         XStoreProductKind productKinds,  
         const char** storeIds,  
         size_t storeIdsCount,  
         const char** actionFilters,  
         size_t actionFiltersCount,  
         XAsyncBlock* async  
)  
```

### Paramètres

*storeContextHandle*   \_In\_\
Type : XStoreContextHandle

Handle de contexte du Store pour l'utilisateur, retourné par [XStoreCreateContext](/fr-CA/reference/system/xstore/functions/xstorecreatecontext).

*productKinds*   \_In\_\
Type : [XStoreProductKind](/fr-CA/reference/system/xstore/enums/xstoreproductkind)

Types de produits à retourner.

*storeIds*   \_In\_z\_count\_(storeIdsCount)\
Type : char\*\*

Identificateurs Store des produits à récupérer.

*storeIdsCount*   \_In\_\
Type : size\_t

Nombre de produits dans la liste **storeIds**.
Ce nombre ne doit pas dépasser 100.

*actionFilters*   \_In\_opt\_z\_count\_(actionFiltersCount)\
Type : char\*\*

Restreint les résultats selon une action stockée dans le document du produit.
Par défaut, cette API retourne tous les produits, même s'ils ne peuvent pas être achetés, mais vous pouvez utiliser des filtres d'action pour restreindre les résultats.
Par exemple, utilisez "Purchase" si vous voulez uniquement les produits pouvant être achetés, ou "License" si vous voulez uniquement les produits pouvant faire l'objet d'une licence.
Les autres filtres d'action comprennent "Fulfill", "Browse", "Curate", "Details" et "Redeem".

*actionFiltersCount*   \_In\_\
Type : size\_t

Nombre de filtres dans **actionFilters**.

*async*   \_Inout\_\
Type : [XAsyncBlock\*](/fr-CA/reference/system/xasync/structs/xasyncblock)

Un [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock) définissant le travail asynchrone en cours.
Utilisez le [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock) pour vérifier l'état de l'appel et obtenir les résultats.
Pour plus d'informations, consultez [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock).

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

## Remarques

Appelez [XStoreQueryProductsResult](/fr-CA/reference/system/xstore/functions/xstorequeryproductsresult) pour récupérer les informations de fiche et le résultat de l'exécution de cette fonction.

Cette API échoue si vous fournissez plus de 100 storeIDs dans la requête.
Si vous travaillez avec un catalogue volumineux, limitez chaque requête à moins de 100 produits.

Pour obtenir les détails de tous les produits que les joueurs peuvent acheter dans le jeu en cours, utilisez plutôt [XStoreQueryAssociatedProductsAsync](/fr-CA/reference/system/xstore/functions/xstorequeryassociatedproductsasync).

L'extrait de code suivant montre un exemple de récupération des informations de fiche pour les produits spécifiés qui sont associés au jeu en cours.

```cpp theme={null}

void ProcessResults(XStoreProductQueryHandle queryHandle)
{
    HRESULT hr = XStoreEnumerateProductsQuery(
        queryHandle,
        nullptr,
        EnumerateProductsQueryCallback);

    if (FAILED(hr))
    {
        printf("Failed enumerate the product query handle: 0x%x\r\n", hr);
        XStoreCloseProductsQueryHandle(queryHandle);
        return;
    }

    XStoreCloseProductsQueryHandle(queryHandle);
}

void CALLBACK QueryProductsCallback(XAsyncBlock* asyncBlock)
{
    XStoreProductQueryHandle queryHandle = nullptr;

    HRESULT hr = XStoreQueryProductsResult(
        asyncBlock,
        &queryHandle);

    if (FAILED(hr))
    {
        printf("Failed retrieve the product query handle: 0x%x\r\n", hr);
        return;
    }

     ProcessResults(queryHandle);
}

void QueryProducts(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = taskQueueHandle;

    asyncBlock->callback = QueryProductsCallback;

    XStoreProductKind allProductKinds =
        XStoreProductKind::Consumable |
        XStoreProductKind::Durable |
        XStoreProductKind::Game |
        XStoreProductKind::Pass |
        XStoreProductKind::UnmanagedConsumable;

    const char* storeIds[] =
    {
        "9YYYYYYYYYYY",
        "9ZZZZZZZZZZZ",
    };

    // This is only needed if you want to restrict to items that are currently purchasable.
    // If you want items that have been sold in the past,
    // but are no longer available for purchase, then
    // pass in nullptr or an empty array for the actionFilters.
    const char* actionFilters[] =
    {
        "Purchase"
    };

    HRESULT hr = XStoreQueryProductsAsync(
        storeContextHandle,
        allProductKinds,
        storeIds,
        ARRAYSIZE(storeIds),
        actionFilters,
        ARRAYSIZE(actionFilters),
        asyncBlock.get());

    if (FAILED(hr))
    {
        printf("Failed to get products: 0x%x\r\n", hr);
        return;
    }
}

```

## Configuration requise

**En-tête :** XStore.h (inclus dans XGameRuntime.h)

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Opérations de base du Store](/fr-CA/publishing/xstore-commerce/xstore-basic-operations)
* [Accorder aux joueurs l'accès au contenu des extensions](/fr-CA/publishing/xstore-commerce/xstore-granting-access)
* [Limitation précise du débit pour les API du Microsoft Store](/fr-CA/publishing/xstore-commerce/xstore-fgrl)

## Voir aussi

[XStore](/fr-CA/reference/system/xstore/xstore_members)
[XStoreQueryProductsResult](/fr-CA/reference/system/xstore/functions/xstorequeryproductsresult)\
[XStoreQueryAssociatedProductsAsync](/fr-CA/reference/system/xstore/functions/xstorequeryassociatedproductsasync)\
[XStoreQueryEntitledProductsAsync](/fr-CA/reference/system/xstore/functions/xstorequeryentitledproductsasync)\
[XStoreQueryProductsAsync](/fr-CA/reference/system/xstore/functions/xstorequeryproductsasync)\
[XStoreQueryProductForCurrentGameAsync](/fr-CA/reference/system/xstore/functions/xstorequeryproductforcurrentgameasync)\
[XStoreQueryProductForPackageAsync](/fr-CA/reference/system/xstore/functions/xstorequeryproductforpackageasync)\
[Opérations de base du Store](/fr-CA/publishing/xstore-commerce/xstore-basic-operations)\
[Accorder aux joueurs l'accès au contenu des extensions](/fr-CA/publishing/xstore-commerce/xstore-granting-access)


## Related topics

- [XStoreQueryProductsAsync](/reference/system/xstore/functions/xstorequeryproductsasync.md)
- [XStoreQueryProductsResult](/reference/system/xstore/functions/xstorequeryproductsresult.md)
- [XStoreQueryProductForPackageAsync](/reference/system/xstore/functions/xstorequeryproductforpackageasync.md)
- [XStoreQueryEntitledProductsAsync](/reference/system/xstore/functions/xstorequeryentitledproductsasync.md)
- [XStoreQueryProductForPackageResult](/reference/system/xstore/functions/xstorequeryproductforpackageresult.md)
