Поделиться через


Поддержка покупок потребляемых продуктов из приложения (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Предоставьте пользователям возможность покупки из приложения потребляемых товаров — товаров, которые можно покупать, использовать и покупать снова — через Магазин. Покупка из приложения — удобный и надежный способ приобрести товар. Он особенно удобен при покупке виртуальной валюты для игр (например, золота или монет), которую можно потом использовать в процессе игры.

Что необходимо знать

Технологии

Необходимые условия

  • В этом разделе рассказывается о покупках потребляемых товаров и отчетах об исполнении сделок в ваших приложениях. Чтобы ознакомиться с продуктами из приложения, см. статью Поддержка покупок продуктов из приложения, из которой вы узнаете о лицензировании и о том, как правильно вносить продукты из приложения в список Магазина.

  • Когда вы создадите код для продаж продуктов из приложения и будете проверять его в первый раз, используйте объект CurrentAppSimulator вместо объекта CurrentApp. В этом случае вы сможете проверить логику лицензирования путем имитации обращения к серверу лицензирования вместо вызова реального сервера. Для этого в %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData необходимо изменить файл с именем WindowsStoreProxy.xml. Имитатор Microsoft Visual Studio создает этот файл при первом запуске приложения. Кроме того, вы можете загрузить собственный вариант файла во время выполнения. Подробнее см. в документах по CurrentAppSimulator.

  • В ней также приводятся ссылки на примеры кода из примера пробной версии приложения и покупки из приложения, который можно найти в коллекции примеров кода на веб-сайте MSDN. Этот пример дает отличную возможность поэкспериментировать с разными способами оплаты, доступными для приложений Магазина Windows.

Инструкции

Этап 1: Отправка запроса на покупку

Первоначальный запрос на покупку отправляется с помощью RequestProductPurchaseAsync, как и для любой покупки из приложения, выполняемой через Магазин. Отличие покупки потребляемых товаров из приложения состоит в том, что после покупки клиент не сможет снова приобрести тот же товар, пока Магазин не получит уведомления от приложения об успешном исполнении предыдущей покупки. За исполнение покупки потребляемых товаров и уведомление о сделке Магазина отвечает ваше приложение.

В следующем примере показан запрос на покупку потребляемого товара из приложения. В комментариях к коду указано, когда ваше приложение должно осуществить свою часть сделки в двух разных сценариях — при успешном запросе и в случае сбоя запроса из-за того, что предыдущая покупка того же товара не выполнена.


function purchaseProduct1() {
    CurrentAppSimulator.requestProductPurchaseAsync("product1").done(
        function (purchaseResults) {
            if (purchaseResults.status === ProductPurchaseStatus.succeeded) {
                tempTransactionId["product1"] = purchaseResults.transactionId;

        // Grant the user their purchase here, and then pass the product ID and transaction ID to currentApp.reportConsumableFulfillment
        // To indicate local fulfillment to the Windows Store.

            } else if (purchaseResults.status === ProductPurchaseStatus.notFulfilled) {
                tempTransactionId["product1"] = purchaseResults.transactionId;
                
        // First check for unfulfilled purchases and grant any unfulfilled purchases from an earlier transaction.
        // Once products are fulfilled pass the product ID and transaction ID to currentApp.reportConsumableFulfillment
        // To indicate local fulfillment to the Windows Store.
            }
        }
    );
}

Этап 2: Отслеживание выполнения покупки приложением

Предоставляя вашим клиентам доступ к потребительским товарам в приложении, важно отслеживать, какой товар поставляется (productId) и с какой транзакцией связывается эта поставка (transactionId).

Важно  Ваше приложение отвечает за предоставление в Магазин точного отчета об исполнении сделки. Это необходимо, чтобы сделка была честной и надежной.

 

Пример ниже демонстрирует, как использовать свойства PurchaseResults вызова RequestProductPurchaseAsync из предыдущего этапа, чтобы указать, что покупка товара выполнена. Для сохранения сведений о товаре в месте, на которое впоследствии можно будет сослаться, чтобы подтвердить, что приложение выполнило свою часть сделки, используется массив.

function grantFeatureLocally(productId, transactionId) {
    var nextIndex = grantedIds[productId].length;
    grantedIds[productId][nextIndex] = transactionId;

    // Grant the user the content, such as by increasing some kind of asset count
}

Следующий пример показывает, как использовать массив из предыдущего примера, чтобы получить доступ к паре кодов продукта и транзакции, которые в дальнейшем будут использоваться в отчетах о сделке для Магазина.

Важно  Независимо от способа отслеживания и подтверждения сделки приложение должно продемонстрировать добросовестность и доказать, что клиент получил тот товар, за который заплатил.

 

function isLocallyFulfilled(productId, transactionId) {
    for (var i in grantedIds[productId]) {
        if (grantedIds[productId][i] === transactionId) {
            return true;
        }
    }
    return false;
}

Этап 3: Отправка в Магазин отчета об исполнении сделки

После выполнения приложением своей части сделки оно должно отправить вызов ReportConsumableFulfillmentAsync, содержащий данные о товаре productId и соответствующей сделке.

Важно  Если информация о выполненной покупке потребляемого товара не будет передана в Магазин, пользователь не сможет снова купить тот же товар до поступления отчета о выполнении предыдущей сделки.

 


var result = FulfillmentResult; 
result = CurrentAppSimulator.reportConsumableFulfillmentAsync("product1", tempTransactionId["product1"]);

Этап 4: Идентификация невыполненных сделок

С помощью метода GetUnfulfilledConsumablesAsync приложение может в любой момент проверить невыполненные покупки потребляемых товаров из приложения. Этот метод нужно вызывать регулярно, чтобы проверять наличие покупок потребляемых товаров, которые не были выполнены из-за непредвиденных событий приложения, таких как сетевые проблемы или завершение работы приложения.

Пример ниже показывает, как можно использовать GetUnfulfilledConsumablesAsync для перечисления потребляемых товаров и как приложение может последовательно проходить по этому списку, чтобы завершить свою часть сделки.

CurrentAppSimulator.getUnfulfilledConsumablesAsync().done(
function (unfulfilledList) {

    unfulfilledList.forEach(function (product) {
        logMessage += "\nProduct Id: " + product.productId + " Transaction Id: " + product.transactionId;

        // This is where you would pass the product ID and transaction ID to currentAppSimulator.reportConsumableFulfillment
    // To indicate local fulfillment to the Windows Store.
    });
});

Связанные разделы

Поддержка покупок продуктов из приложения

Пример пробной версии приложения и продажи из приложения

Windows.ApplicationModel.Store