0

Lorsque vous effectuez un achat via une application de bureau WPF à l'aide de StoreContext.RequestPurchaseAsync() à partir de l'espace de noms Windows.services.Store, nous obtenons un objet StorePurchaseResult avec un message ExtendedError "La valeur ne correspond pas à la plage attendue."Windows Store dans l'achat d'une application Problème "La valeur ne se situe pas dans la plage attendue"

Notre application est publiée et peut être téléchargée depuis le Windows Store.

Il a été converti à l'aide de l'outil DesktopAppConverter. Nous définissons manifest.appx en fonction de la description dans le Store (Identity Name, Publisher ...).

Nous avons suivi les instructions ci-dessous pour utiliser l'achat in-app en C# à partir du thread d'interface utilisateur d'une application de bureau Windows qui utilise Desktop Bridge.

https://docs.microsoft.com/en-us/windows/uwp/monetize/in-app-purchases-and-trials https://docs.microsoft.com/en-us/windows/uwp/monetize/enable-in-app-purchases-of-apps-and-add-ons

Dans le code de notre application, nous déclarons l'interface IInitializeWithWindow:

[ComImport] 
[Guid("3E68D4BD-7135-4D10-8018-9FB6D9F33FA1")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IInitializeWithWindow 
{ 
    void Initialize(IntPtr hwnd); 
} 

Puis, quand notre application commence, on obtient le StoreContext (stocké dans l'attribut storeContext_), en utilisant la manière mono-utilisateur:

// Init the store context 
storeContext_ = StoreContext.GetDefault(); 
IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)storeContext_; 
initWindow.Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle); 

Ensuite, nous parvenons à récupérer le S toreLicense (stocké dans l'attribut storeLicense_) et la liste des produits en magasin associés sans aucune erreur

// Get the current user license 
storeLicense_ = await storeContext_.GetAppLicenseAsync(); 
if (storeLicense_ == null) 
{ 
    MessageBox.Show("An error occurred while retrieving the license.", "StoreLicenseApp Error"); 
    return; 
} 

// Create a filtered list of the product AddOns I care about 
string[] filterList = new string[] { "Durable" }; 

// Get list of Add Ons this app can sell, filtering for the types we know about 
StoreProductQueryResult addOns = await storeContext_.GetAssociatedStoreProductsAsync(filterList); 
if (addOns.ExtendedError != null) 
{ 
    MessageBox.Show("Impossible to retreive the list of the products on the store.\n" + addOns.ExtendedError.Message, 
           "Get Associated Store Products Error"); 
} 

Une fois que les ids de magasin des produits sont retreived du magasin, nous attendons l'utilisateur de cliquer sur un bouton d'achat qui appelle le rappel ci-dessous.

private async void PurchaseButton_Clicked(object sender, RoutedEventArgs e) 
{ 
    StorePurchaseResult result = await storeContext_.RequestPurchaseAsync(selectedStoreId); 

    // Capture the error message for the operation, if any. 
    string extendedError = string.Empty; 
    if (result.ExtendedError != null) 
    { 
        extendedError = result.ExtendedError.Message; 
    } 

       [...] 
} 

RequestPurchaseAsync() retour une erreur au lieu d'afficher l'interface Metro pour l'achat du produit. Voici l'erreur étendue retourné:

Message = « La valeur ne tombe pas dans la plage attendue. »

HResult = -2147024809

Toute idée de la façon de résoudre ce problème?

+0

Juste après ce message d'erreur, nous ne pouvons pas regarder la cause de votre demande défaillante. Pouvez-vous fournir votre ID de produit (pour l'application parente et le produit IAP) si possible? –

+0

Salut Mattew, voici l'application parent un 9NFMR9KZRHTV et l'IAP est 9PHL59JKBHNC – jarne

+0

Pourriez-vous s'il vous plaît exécuter ** WSCOLLECT ** et fournir des journaux de magasin ici? –

Répondre

0

Le RequestPurchaseAsync() appelé dans notre La fonction PurchaseButton_Clicked() renvoyait une erreur car nous initialisions le contexte de magasin dans une autre fonction au démarrage de l'application.

Nous avons résolu la question en plaçant le contexte magasin d'initialisation instructions du PurchaseButton_Clicked() comme suit:

public async void PurchaseSelectedProduct(ProductModel product){ 
    if (product == null){ 
     MessageBox.Show("Product not valid", "PurchaseInApp Error"); 
     return; 
    } 

    // Init store context for purchase 
    IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)storeContext_; 
    initWindow.Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle); 

    // Buy through in app purchase sdk 
    StorePurchaseResult result = null; 
    try { result = await product.StoreProduct.RequestPurchaseAsync(); } 
} 
0

Voici les journaux d'erreur de l'application dans la catégorie achat de tâches recueillies à l'aide WSCOLLECT.exe:

1) Message de Windows :: Services :: Boutique :: :: StoreContext RequestPurchaseAsync (9PMRHM0MJ85K) invoqué. (CV: + hcSKxR9 + UGX7BQ/.1.3) fonction Windows :: Services :: Boutique :: :: StoreContext RequestPurchaseAsync code erreur -1 Source \ storecontext.cpp ligne Numéro 1194

2): un message ChkHr (hrGetTicket) Fonction: Windows :: Services :: Magasin :: PurchaseOperation :: _ PromptForPasswordAndEnterOrderWithRetry Code d'erreur: -2147024809 Source: \ purchaseoperation.cpp Numéro de ligne 506

3) Message: ChkHr (_PromptForPasswordAndEnterOrderWithRetry (fPromptForCredentials)) Fonction: windows Services :: Boutique :: PurchaseOperation :: _ ProceedToPurchase Code d'erreur: -2147024809 Source: \ purchaseoperation.cpp Numéro de ligne: 630

4) message: ChkHr (_ProceedToPurchase (needsToSignIn)) Fonction: windows services :: boutique :: PurchaseOperation :: _ Achat code d'erreur: -2147024809 Source: \ purchaseoperation.cpp ligne Numéro: 792

5) Message ChkHr (_hresultOfOperation) fonction Windows :: Services :: Boutique :: :: RequestPurchaseOperation DoWork Code d'erreur -2147024809 Source \ requestpurchaseoperation.cpp de Numéro de ligne 115

+0

Des indices sur la façon de résoudre ce problème? – jarne