> ## 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 de 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-CA/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 pour l'utilisateur, retourné par [XStoreCreateContext](/fr-CA/reference/system/xstore/functions/xstorecreatecontext).

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

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

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

Nombre d'ID dans le tableau passé dans **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 courriel pour suivre le jeton de l'utilisateur dans le jeton de licence. Un jeton de licence s'utilise comme un reçu de propriété.

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

*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. Le [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock) peut être utilisé pour interroger l'état de l'appel et récupérer les résultats de l'appel. 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

Pour récupérer le jeton Web JSON ainsi que le résultat de l'exécution de cette fonction, appelez [XStoreQueryLicenseTokenResult](/fr-CA/reference/system/xstore/functions/xstorequerylicensetokenresult) après avoir appelé cette fonction. Pour récupérer la taille du jeton Web JSON, appelez [XStoreQueryLicenseTokenResultSize](/fr-CA/reference/system/xstore/functions/xstorequerylicensetokenresultsize) après avoir appelé cette fonction. Connaître la taille du jeton vous permettra 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 pouvant être utilisées sur le serveur à des fins de 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-CA/publishing/xstore-commerce/xstore-granting-access)
* [Activation des tests de licences](/fr-CA/publishing/xstore-commerce/xstore-licensing-setup)
* [DRM de base et vérifications de licence](/fr-CA/publishing/xstore-commerce/xstore-pc)
* [Utilisation des jetons de licence pour valider les licences sur vos services](/fr-CA/publishing/xstore-commerce/xstore-license-tokens)

## Voir aussi

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

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

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

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


## Related topics

- [XStoreQueryLicenseTokenAsync](/zh-CN/reference/system/xstore/functions/xstorequerylicensetokenasync.md)
- [XStoreQueryLicenseTokenResult](/reference/system/xstore/functions/xstorequerylicensetokenresult.md)
- [XStoreQueryLicenseTokenResultSize](/reference/system/xstore/functions/xstorequerylicensetokenresultsize.md)
