1.0.6 • Published 10 years ago
vigour-pay v1.0.6
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.gitgit 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.productslabel.owned
owned is
- if owned
true- could have
receiptproperty when available
- if not owned
falseundefined(property doesn't exist).
pay.productslabel.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
errorresponse
getProducts(callback(err, response))
Used to
- get products available for this app on this platform
In order to
- ensure products in
package.jsonare 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
}
}