vigour-pay
Version:
Native store purchasing and web payment
196 lines (163 loc) • 4.12 kB
Markdown
# pay
Native store purchasing and web payment
## Install
`npm install vigour-pay`
## Updates via upstream remote
- `git remote add skeleton git.com:vigour-io/plugin.git`
- `git pull skeleton develop`
## Usage
See [tests](test)
## Building native apps
See [wrapper](http://github.com/vigour-io/vigour-native)
## Specs
## Config
configuration for `pay` should go in the app's `package.json`
```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)
```javascript
var Pay = require('vigour-pay')
var pay = new Pay()
```
###### when using templating for region specific product id's: set region
```javascript
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.
```javascript
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.
```javascript
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.
```javascript
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:
```javascript
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
}
}
```