Payments Lite — это новый способ настройки покупок в приложении и управления ими. С ним вы сможете разработать решение для обработки платежей без сервера. Если же у вас есть собственный сервер, вы можете определить и разместить собственные решения для обработки платежей в разделе Получение платежей. |
Payments Lite — это новый способ настройки покупок в приложении как products
непосредственно в панели приложений. Здесь необходимо задать ID, название, описание, цену, валюту и добавить изображение. Затем, чтобы запустить процесс платежа, в вызов JavaScript передается не URL OG Object
, как в обычном процессе платежа, а product ID
. Это позволяет оптимизировать процесс, поскольку вы сможете создавать и изменять продукты, не отправляя push-уведомления на сервер.
Чтобы создать продукт, необходимо перейти в Платежи на Холсте в панели приложений и открыть подраздел Продукты.
Чтобы создать продукт, нажмите кнопку Создать новый продукт в правом верхнем углу. В диалоге "Сведения о продукте" введите Product ID
, Title
, Description
и Price
, выберите в меню валюту и загрузите изображение размером 50 х 50 пикселей, которое будет представлять продукт.
Payments Lite позволяет вызвать диалог "Платеж" только для одного продукта, поэтому, если вы планируете продавать внутриигровую валюту, ваши продукты должны представлять пакеты валюты.
После настройки продуктов, которые будут продаваться в игре, необходимо создать внутриигровой магазин. В нем игроки смогут выбрать продукты, которые хотят купить. Чтобы проверить, используете ли вы правильную информацию о продуктах, которые хотите продавать, вы можете получить эту информацию с помощью Product List API. Чтобы получить список продуктов, отправьте вызов к следующей конечной точке:
GET https://graph.facebook.com/APP_ID/products
Со следующими параметрами:
Имя параметра | Тип | Значение | Обязательное? |
---|---|---|---|
| Строка | Список ID продуктов в приложении, через запятую | Нет |
Пример вызова и ответа:
FB.api(
'/app/products',
'get',
function(response) {
console.log(response);
}
);
{ "data": [ { "title": "100 coins lite package", "product_id": "payments_lite_test_01", "product_type": "managed", "description": "Package of 100 coins to test Payments Lite", "price": "$1.00", "price_amount_cents": 100, "price_currency_code": "USD" }, { "title": "Friend Smash!", "product_id": "480369938658210_premium", "product_type": "managed", "description": "One time purchase to play game", "price": "$0.01", "price_amount_cents": 1, "price_currency_code": "USD" } ], "paging": { "cursors": { "before": "QVFIUlg1cXRqcnVad05taFRVRlZAZAU2tQdWNSd0FKRDh1TTJMdGd3azVTZA3ZAZAOFgzcXZAaZAlQ1N1VMMmRmZAXpUNG9KX2tsSWhYVlB6Yko2cEotUXZAiRGgzQkFKc0lJLUQzVlJxbHVPampZAS19SWEQ4", "after": "QVFIUmRiSGltU1BKQnRqWTRxNkd1WktUTHFKMmxvaEwtV2dSYUtpeDJxQnN0Ri1mZAnF0TG1Ub3oyWnphSExqZAU5qQzNNZAmFrejVnSTlaRVVGMXdSSlNsNE13" } } }
Если вы настроили более 25 продуктов, будут возвращены только первые 25. Информацию о том, как получить все остальные, см. по ссылке https://developers.facebook.com/docs/graph-api/using-graph-api#paging.
Когда пользователь выберет продукт, вы должны вызвать диалог "Платеж", чтобы он мог завершить покупку. Для этого можно использовать функцию ui
в объекте Facebook SDK для JavaScript FB
.
Чтобы вызвать диалог "Платеж", укажите в качестве первого параметра объект JSON со следующими ключами:
Имя параметра | Тип | Значение | Обязательное? |
---|---|---|---|
| Строка |
| Да |
| Строка |
| Да |
| Строка | ID продукта | Да |
| Строка | Строка, определяющая полезные данные, которые следует применять для подтверждения того, что транзакцию инициировал разработчик. | Нет |
| Целое число | Если этот параметр задан, он всегда должен иметь значение | Нет |
Пример кода для активации диалога:
FB.ui(
{
method: 'pay',
action: 'purchaseiap',
product_id: 'com.fb.friendsmash.coins.10',
developer_payload: 'this_is_a_test_payload'
},
response => (console.log(response)) // Callback function
);
По завершении процесса можно проверить результат транзакции, указав функцию обратного вызова в качестве второго параметра вызова активации. Эта функция будет вызвана с объектом, содержащим информацию о транзакциях или код ошибки и сообщение:
Пример ответа в случае успеха:
{ app_id: 241431489326925, developer_payload: "this_is_a_test_payload", payment_id: 860496004080598, product_id: "com.fb.friendsmash.coins.10", purchase_time: 1473719771, purchase_token: "10157567446205226", signed_request: "M3fQFj6MlK7WJi597QgCvMlMLh7fl_...", }
Пример транзакции с ошибкой:
{ error_code: 1383010, error_message: "User canceled the order." }
Payments Lite позволяет добавлять продукты в список, чтобы проверять их и управлять ими. В этом случае игроки не смогут покупать в игре нерасходуемые продукты. Мы рекомендуем проверять после загрузки игры, есть ли у игрока покупки, которые он ещё не израсходовал.
Чтобы составить список покупок текущего игрока, воспользуйтесь конечной точкой /APP_ID/purchases
приложения и маркером доступа пользователя. Этот вызов вернет список неизрасходованных покупок текущего игрока с информацией о них.
Например, можете выполнить следующий вызов:
FB.api(
'/app/purchases',
'get',
{access_token: 'ACCESS_TOKEN'}, // user access token
payload => { // callback function
console.log('purchases payload:');
console.log(payload);
}
);
Пример ответа:
{ data: [ { app_id: 241431489326925, developer_payload: "this_is_a_test_payload", payment_id: 860496004080598, product_id: "com.fb.friendsmash.coin", purchase_time: 1473719771, purchase_token: "10157567446205226", signed_request: "M3fQFj6MlK7WJi597QgCvMlMLh7fl_...", }, { ... } ], paging: { cursors: { after: "M3fQFj6MlK7WJi597QgCvMlMLh7fl...", before: "M3fQFj6MlK7WJi597QgCvMlMLh7...", } } }
Дополнительную информацию о signed_request, возвращаемом в этом вызове, см. в этом разделе.
Если количество покупок превышает 25, будут возвращены только первые 25. Информацию о том, как получить все остальные, см. по ссылке https://developers.facebook.com/docs/graph-api/using-graph-api#paging.
Начиная с Graph API версии 11.0 поле consumed
называется is_consumed
.
Если игрок сделал покупку и вы выполнили подписанный запрос с полезными данными разработчика, чтобы убедиться, что он имел на это право, вы должны предоставить игроку купленный продукт или валюту. Если купленный продукт (например, валюту) можно израсходовать за один раз, его необходимо пометить как израсходованный, чтобы игрок смог приобрести его ещё раз. Многоразовые продукты (например, разблокировку специальных функций, особые программы для VIP-игроков и т. д.) не должны расходоваться, чтобы игроки не покупали один и тот же товар несколько раз.
Чтобы израсходовать покупку, необходимо указать purchase_token
из обратного вызова JavaScript или списка покупок, о котором говорилось в предыдущем разделе. Чтобы израсходовать покупку, отправьте вызов к следующей конечной точке Graph API:
POST https://graph.facebook.com/PURCHASE_TOKEN/consume
Например, с помощью Facebook SDK для JavaScript:
FB.api(
'/' + PURCHASE_TOKEN + '/consume', // Replace the PURCHASE_TOKEN
'post',
{access_token: access_token}, // Replace with a user access token
result => {
console.log('consuming product', productId, 'with purchase token', purchaseToken);
console.log('Result:');
console.log(result);
}
);
Пример ответа в случае успеха:
{ success: true, }
Споры могут возникать спустя долгое время после платежа, поэтому для их обработки необходим серверный компонент, который будет уведомлять разработчика о том, что игрок запустил процесс спора. Поскольку Payments Lite работает без сервера, все споры в этой системе автоматически разрешаются возвратом средств и закрываются. Подробную информацию о платежах и разрешении споров см. в статьях Получение платежей и Споры.