> ## 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.

# XStoreQueryLicenseTokenAsync

> Référence pour XStoreQueryLicenseTokenAsync, une fonction de gestion des licences XStore du GDK qui récupère un jeton Web JSON pour la validation des droits d'utilisation et les appels B2B.

# XStoreQueryLicenseTokenAsync

Fournit au jeu appelant un jeton Web JSON opaque qui peut être transmis au service du jeu pour valider les droits d'utilisation et effectuer des appels B2B. Pour plus d'informations, consultez [Vue d'ensemble des jetons de licence](/fr/publishing/xstore-commerce/xstore-license-tokens).

## Syntaxe

```cpp theme={null}
HRESULT XStoreQueryLicenseTokenAsync(  
         const XStoreContextHandle storeContextHandle,  
         const char** productIds,  
         size_t productIdsCount,  
         const char* customDeveloperString,  
         XAsyncBlock* async  
)  
```

### Paramètres

*storeContextHandle*   \_In\_\
Type : XStoreContextHandle

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

*productIds*   \_In\_z\_count\_(productIdsCount)\
Type : char\*\*

Tableau des ID de produit pour lesquels récupérer des jetons.

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

Nombre d'ID dans le tableau transmis à **productIds**.

*customDeveloperString*   \_In\_z\_\
Type : char\*

Valeur renvoyée telle quelle dans le jeton. Elle est généralement choisie par le service. Vous pouvez y insérer, par exemple, un userId ou une adresse e-mail pour suivre le jeton de l'utilisateur dans le jeton de licence. Un jeton de licence s'utilise comme une preuve de propriété.

Cette valeur ne peut être ni null ni une chaîne vide.

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

[XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock) définissant le travail asynchrone en cours. Le [XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock) peut être utilisé pour interroger l'état de l'appel et récupérer ses résultats. Pour plus d'informations, consultez [XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock).

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

## Remarques

Pour récupérer le jeton Web JSON ainsi que le résultat de l'exécution de cette fonction, appelez [XStoreQueryLicenseTokenResult](/fr/reference/system/xstore/functions/xstorequerylicensetokenresult) après avoir appelé cette fonction. Pour récupérer la taille du jeton Web JSON, appelez [XStoreQueryLicenseTokenResultSize](/fr/reference/system/xstore/functions/xstorequerylicensetokenresultsize) après avoir appelé cette fonction. Connaître la taille du jeton vous permet de le récupérer plus efficacement.

Le jeton de licence est un jeton Web JSON encodé en Base64. La charge utile du jeton est une chaîne encodée en Base64 qui se convertit en valeurs JSON utilisables sur le serveur pour la validation.

L'extrait de code suivant montre un exemple de récupération d'un jeton de licence.

```cpp theme={null}
void CALLBACK QueryLicenseTokenCallback(XAsyncBlock* asyncBlock)
{
    size_t size;
    HRESULT hr = XStoreQueryLicenseTokenResultSize(
        asyncBlock,
        &size);

    if (FAILED(hr))
    {
        printf("Failed retrieve the license token size: 0x%x\r\n", hr);
        return;
    }

    char* result = new char[size];
    hr = XStoreQueryLicenseTokenResult(
        asyncBlock,
        size,
        result);

    if (FAILED(hr))
    {
        printf("Failed retrieve the license token result: 0x%x\r\n", hr);
        delete[] result;
        return;
    }

    printf("result: %s\r\n", result);

    delete[] result;
}

void QueryLicenseToken(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle, const char** productIds, size_t productIdsCount, const char* customDeveloperString)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = taskQueueHandle;
    asyncBlock->callback = QueryLicenseTokenCallback;

    HRESULT hr = XStoreQueryLicenseTokenAsync(
        storeContextHandle,
        productIds,
        productIdsCount,
        customDeveloperString,
        asyncBlock.get());

    if (FAILED(hr))
    {
        printf("Failed to get license token: 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

* [Accorder aux joueurs l'accès au contenu des extensions](/fr/publishing/xstore-commerce/xstore-granting-access)
* [Activer les tests de licences](/fr/publishing/xstore-commerce/xstore-licensing-setup)
* [DRM de base et vérifications de licence](/fr/publishing/xstore-commerce/xstore-pc)
* [Utiliser des jetons de licence pour valider les licences sur vos services](/fr/publishing/xstore-commerce/xstore-license-tokens)

## Voir aussi

[XStore](/fr/reference/system/xstore/xstore_members)

[Vue d'ensemble des jetons de licence](/fr/publishing/xstore-commerce/xstore-license-tokens)

[XStoreQueryLicenseTokenResult](/fr/reference/system/xstore/functions/xstorequerylicensetokenresult)

[XStoreQueryLicenseTokenResultSize](/fr/reference/system/xstore/functions/xstorequerylicensetokenresultsize)


## Related topics

- [XStoreQueryLicenseTokenResult](/fr/reference/system/xstore/functions/xstorequerylicensetokenresult.md)
- [XStoreQueryLicenseTokenResultSize](/fr/reference/system/xstore/functions/xstorequerylicensetokenresultsize.md)
- [XStore sur PC : DRM, jetons de licence et sandbox](/fr/publishing/xstore-commerce/xstore-pc.md)
- [Activation des tests de licence](/fr/publishing/xstore-commerce/xstore-licensing-setup.md)
- [Accorder aux joueurs l'accès au contenu des modules complémentaires](/fr/publishing/xstore-commerce/xstore-granting-access.md)
