目前我正在处理我们的一个win32的程序。在之前的工作中已经成功使用桌面桥将其转化为appx包并提交windows store。
目前我们准备向app里加入应用内购买功能。通过查看相关文档,如https://docs.microsoft.com/zh-cn/windows/uwp/monetize/in-app-purchases-and-trials,以及其他资料,目前已经能够混合使用c++/cx,并调用Windows::Services::Store命名空间下的相关API。
之后我们在开发者仪表板上添加了加载项并提交成功,开始准备测试加载项购买。并且通过StoreContext::RequestPurchaseAsync方法并传入加载项StoreID,能够成功在第一次完成购买。
目前问题是由于消耗品类型的加载项在app需要向store报告消耗完成后,才可以允许用户新的购买。这一过程需要调用StoreContext::ReportConsumableFulfillmentAsync方法来完成。但是无论怎样设置参数,该方法总是失败,ExtendedError值是0x803f6107,造成目前无法开启新的购买。目前就卡在这块了,不知道如何处理。
用到的代码示例如下:
GUID guid;
CoCreateGuid(&guid);
Guid trackId = guid;
auto sync = context->ReportConsumableFulfillmentAsync(L"...", 1, trackId); //第一个参数为加载项StoreID
auto task = create_task(sync);
task.then([](StoreConsumableResult^ result)
{
int code = result->ExtendedError.Value; //code 永远是0x803f6107
auto status = result->Status; //status永远是ServerError(3)
}
同时在执行如下代码时控制台会同时输出如下内容:
ERROR:ChkBool(_productStoreId.IsValid(), ((HRESULT)0x803F6107L))
(0x803f6107)
[Windows::Services::Store::Internal::StoreContextServer::ConsumeConsumable]
ERROR:_spStoreContextServer->ConsumeConsumable( _productId.Get(), _quantity, _trackingId, HStringReference((const WCHAR*)wszCV).Get(), jsonString.GetAddressOf())
(0x803f6107)
[Windows::Services::Store::ReportConsumableOperation::DoWork]
ERROR:ChkHr(hr) (0x803f6107)
[Windows::Services::Store::ReportConsumableOperation::DoWork]
似乎是_productStoreId.IsValid()返回false导致的。希望有人能帮我解决下这个问题。目前不清楚是否是WIn32调用Store Api的问题,不过既然第一次能成功购买,我认为应该是可以的,不知道是否有其他原因。