README
pay
Native store purchasing and web payment
Install
npm install vigour-pay
Updates via upstream remote
git remote add skeleton git@github.com:vigour-io/plugin.git
git pull skeleton develop
Usage
See tests
Building native apps
See wrapper
Specs
Config
configuration for pay
should go in the app's package.json
{
"vigour": {
"pay": {
"android": {
"billingKey": "SUPASECRETwhatevs",
"products": {
"single": {
"id": "mtv-play_single_episode_purchase",
"type": "single-purchase"
},
"monthly": {
"id": "mtvplay_subscription_monthly",
"type": "monthly-recurring-subscription"
},
"yearly": {
"id": "mtvplay_single_purchase",
"type": "yearly-recurring-subscription"
}
}
},
"iOS": {
"products": {
"single": "{region}_single_purchase",
"monthly": "{region}_subscription_monthly",
"yearly": "{region}_subscription_annual"
}
},
"fire": {
"products": {
"single": "fire_single_id",
"monthly": "fire_montly_id",
"yearly": "fire_yearly_id"
}
}
}
}
}
Use of the Module
new Pay(settings)
var Pay = require('vigour-pay')
var pay = new Pay()
when using templating for region specific product id's: set region
config.region.on((region) => {
pay.set({region: region})
})
pay.buy(label, callback(err, response))
pay.buy(label, callback)
Will attempt to buy whatever product is configured as label
for the current platform. label
being single
, monthly
or yearly
when using the above config.
button.onClick(() => {
pay.buy('monthly', (err, response) => {
if (err) { // something broke down
throw err
}
var receipt = response.receipt
if (receipt) { // purchased dat "monthly"!
user.set({owns: {monthly: receipt}}) // update the user
if (myBackEndUpdater) { // lets tell some other back end
myBackEndUpdater(user.id.val, receipt)
}
} else {
// everything worked, but the user cancelled the purchase at some point
// console.log('dude why dont u buy? (gif monne)')
}
})
})
pay.products (Observable property)
pay.products
is a list of available products,
- based on the
config
+ platform - validated and completed by the native Plugin
e.g.
pay.products.val = {
single: {
val: 'NL_single_purchase',
owned: {
val: true,
receipt: {
hash: 'garblegarble'
}
},
price: 0.99
},
monthly: {
val: 'NL_monthly_subscription',
owned: true,
price: 4.99
},
yearly: {
val: 'NL_yearly_subscription',
price: 19.99
}
}
pay.products[label].owned
owned
is
- if owned
true
- could have
receipt
property when available
- if not owned
false
undefined
(property doesn't exist).
pay.products[label].price
Price is the number of pay.currency
one has to pay in order to buy product
.
pay.currency
The type of moneys the store wants to use.
pay.currency.val = {
val: '€',
name: 'Euro'
}
Native Plugins
Methods
buy(productId, callback(error, response))
- buy the product with
productId
- when done, call callback passing
error
response
getProducts(callback(err, response))
Used to
- get products available for this app on this platform
In order to
- ensure products in
package.json
are actually available in the store - get
product.price
- get
product.owned
response
response should look like:
var response = {
productId1: {
price: 999.01,
owned: { // check if the device's store account owns the product
val: true,
receipt: 'RECEIPTFORPRODUCT'
}
// platform specific info may go here
},
productId2: {
price: 0.99
}
}