XStoreShowPurchaseUIAsync

Begins the purchase UI overlay for the specified product.

Syntax

HRESULT XStoreShowPurchaseUIAsync(  
         const XStoreContextHandle storeContextHandle,  
         const char* storeId,  
         const char* name,  
         const char* extendedJsonData,  
         XAsyncBlock* async  
)  

Parameters

storeContextHandle   _In_
Type: XStoreContextHandle

The store context handle for the user returned by XStoreCreateContext.

storeId   _In_z_
Type: char*

ID for the product to purchase.

name   _In_opt_z_
Type: char*

Name of the product to purchase.

extendedJsonData   _In_opt_z_
Type: char*

A json blob that is handed to the purchase flow. Allows for insertion of custom campaign IDs, so you can track how the purchase started.

async   _Inout_
Type: XAsyncBlock*

An XAsyncBlock defining the asynchronous work being done. The XAsyncBlock can be used to poll for the call's status and retrieve call results. See XAsyncBlock for more information.

Return value

Type: HRESULT

HRESULT success or error code.

Remarks

![NOTE] This operation does not trigger the download or installation of the items after an expected purchase. If you wish to download and install this content, it is recommended to call XStoreDownloadAndInstallPackagesAsync after a successful purchase. No additional prompts will be given to the user.

![NOTE] On PC, the purchase confirmation dialog that shows after a successful purchase will have a close button [X] at top. Selecting this instead of Ok will result in E_ABORT returned to XStoreShowPurchaseUIResult, which may not be desired. This is standard Windows behaviour when any dialog is closed in this way.

To retrieve the result of this function call XStoreShowPurchaseUIResult after calling this function. This function should only be called when the user has chosen to purchase something, and will cause the system to present a modal purchase dialog that handles payment information and user confirmation out-of-process.

The following code snippet shows an example of requesting a purchase for a particular store product.

void CALLBACK ShowPurchaseUICallback(XAsyncBlock* asyncBlock)
{
    HRESULT hr = XStoreShowPurchaseUIResult(asyncBlock);

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

void ShowPurchaseUI(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle, const char* storeId)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = taskQueueHandle;
    asyncBlock->callback = ShowPurchaseUICallback;

    HRESULT hr = XStoreShowPurchaseUIAsync(
        storeContextHandle,
        storeId,
        nullptr,    // Can be used to override the title bar text
        nullptr,    // Can be used to provide extra details to purchase
        asyncBlock.get());

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

Requirements

Header: XStore.h (included in XGameRuntime.h)

Library: xgameruntime.lib

Supported platforms: Windows, Xbox One family consoles and Xbox Series consoles

See also

XStore
XStoreShowPurchaseUIResult