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?
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? –
Salut Mattew, voici l'application parent un 9NFMR9KZRHTV et l'IAP est 9PHL59JKBHNC – jarne
Pourriez-vous s'il vous plaît exécuter ** WSCOLLECT ** et fournir des journaux de magasin ici? –