-
Notifications
You must be signed in to change notification settings - Fork 21
A Possible IAP Web IDL
interface window {
attribute InAppPurchase iap;
}
iap of type InAppPurchase, readonly
- The object that exposes the In App Purchase functionality.
The InAppPurchase interface exposes the In App Purchase functionality.
interface InAppPurchase {
void init(key);
Promise queryProductDetails(sequence<DOMString> products);
Promise buy(DOMString id);
Promise restore();
};
init
- This method initialize the IAP plugin with a key that indicates a specific app. A plugin only handles products within one app at a time.
-
Parameter:
key
-
Type:
DOMString
-
Nullable:
N
-
Optional:
N
NOTE: Must call init()
before calling all methods below.
queryProductDetails
- This method allows to query details of available products from payment provider. It returns a
Promise
that will allow the caller to be notified about the result of the operation. -
Parameter:
products
-
Type:
sequence<DOMString>
-
Nullable:
N
-
Optional:
N
-
Return type:
Promise
buy
- This method allows to buy an available product from payment provider. It returns a
Promise
that will allow the caller to be notified about the result of the operation. -
Parameter:
id
-
Type:
DOMString
-
Nullable:
N
-
Optional:
N
-
Return type:
Promise
restore
- This method allows to restore transactions of current user which already been finished. It returns a
Promise
that will allow the caller to be notified about the result of the operation. - No parameters.
-
Return type:
Promise
The queryProductDetails method when invoked MUST run the following steps:
- Let promise be a new Promise object and resolver its associated resolver.
- Return promise and continue the following steps asynchronously.
- Make a request to the system to retrieve details of the available products which indicated by an array of product IDs.
- If there is an error invoke resolver's reject algorithm with no argument and terminate these steps.
- When the request has been completed:
- Let products be a new array of IAPProduct objects providing the results of the queryAvailableProducts operation.
- Invoke resolver's fulfill algorithm with products as the value argument.
The buy method when invoked MUST run the following steps:
- Let promise be a new Promise object and resolver its associated resolver.
- Return promise and continue the following steps asynchronously.
- Make a request to the system to buy a product which indicated by the id parameter.
- If there is an error invoke resolver's reject algorithm with no argument and terminate these steps.
- When the request has been completed:
- Let transaction be the IAPTransactionDetails object as returned by the system.
- Invoke resolver's fulfill algorithm with transaction as the value argument.
The restore method when invoked MUST run the following steps:
- Let promise be a new Promise object and resolver its associated resolver.
- Return promise and continue the following steps asynchronously.
- Make a request to the system to restore transactions of current user which already been finished.
- If there is an error invoke resolver's reject algorithm with no argument and terminate these steps.
- When the request has been completed:
- Let transactions be an array of IAPTransactionDetails objects as returned by the system.
- Invoke resolver's fulfill algorithm with transactions as the value argument.
The IAPProduct interface represents a product's attributes and the types associated to it.
interface IAPProduct {
attribute DOMString id;
attribute DOMString price;
attribute DOMString title;
attribute DOMString type;
attribute DOMString description;
}
id
of type DOMString
- Represents a unique identifier of the product.
price
of type DOMString
- A string representing the product's price (might include its currency information).
title
of type DOMString
- A string representing the product's title.
type
of type DOMString
- A string representing the product's type (e.g. "consumable", "non-consumable", "subscription")
description
of type DOMString
- A string describes the product.
The IAPTransactionDetails interface represents a transaction's attributes.
interface IAPTransactionDetails {
attribute DOMString orderId;
attribute DOMString packageName;
attribute DOMString productId;
attribute DOMString purchaseTime;
attribute DOMString purchaseState;
attribute DOMString token;
}
orderId
of type DOMString
- A string representing an unique order identifier for the transaction.
packageName
of type DOMString
- A string representing the application package from which the purchase originated.
productID
of type DOMString
- A string representing the purchased item's product identifier.
purchaseTime
of type DOMString
- A string representing the time of the product was purchased, in milliseconds since the epoch (Jan 1, 1970).
purchaseState
of type DOMString
- A string representing the purchase state of the order. Possible values are "purchased", "canceled", or "refunded".
For example, if this IAP is running on Android, then you need to go to developer's console to find out your application's key, and pass it to iap's init method. See Billing Security for details.
var key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsE'
iap.init(key);
User wants to know details of products that are available for purchasing.
iap.queryProductDetails(["gas", "tyre", "accelerator"]).then(
function(products) {
for (var i=0; i<products.length; i++) {
console.log("ID: " + products[i]["productId"]);
console.log("Price: " + products[i]["price"]);
console.log("Currency: " + products[i]["price_currency_code"]);
console.log("Title: " + products[i]["title"]);
console.log("Description: " + products[i]["description"]);
}
},
function(error) { window.console.log('IAP queryProductDetails() error: ' + error); } );
User wants to buy an item, and would like to know when the transaction is done.
var id = 'gas';
iap.buy(id).then(
function(result) {
var orderId = result.orderId;
var packageName = result.packageName;
var productId = result.productId;
var purchaseTime = result.purchaseTime;
var purchaseState = result.purchaseState;
var m = new Date(1970,0,1);
m.setSeconds(purchaseTime/1000);
var dateStringGMT =
m.getUTCFullYear() +"/"+
("0" + (m.getUTCMonth()+1)).slice(-2) +"/"+
("0" + m.getUTCDate()).slice(-2) + " " +
("0" + m.getUTCHours()).slice(-2) + ":" +
("0" + m.getUTCMinutes()).slice(-2) + ":" +
("0" + m.getUTCSeconds()).slice(-2);
document.getElementById("resultDiv").innerHTML += "Buy returned:"
+ "<br>Order ID: " + orderId
+ "<br>Package Name: " + packageName
+ "<br>Product ID: " + productId
+ "<br>Purchase Time(GMT): " + dateStringGMT
+ "<br>Purchase State: " + purchaseState;
},
function(error) { window.console.log('IAP purchase for ' + id + ' error: ' + error); } );
User wants to restore all his/her finished transactions, and would like to know how many transactions are restored.
iap.restore().then(
function(transactions) { window.console.log('Successfully restored ' + transactions.length + ' transactions.'); },
function(error) { window.console.log('IAP purchase for ' + id + ' error: ' + error); } );