mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-10-29 20:24:53 +01:00
112 lines
3.5 KiB
JavaScript
112 lines
3.5 KiB
JavaScript
require("babel-register");
|
|
require("babel-polyfill");
|
|
// This file is used for creating paypal billing plans. PayPal doesn't have a web interface for setting up recurring
|
|
// payment plan definitions, instead you have to create it via their REST SDK and keep it updated the same way. So this
|
|
// file will be used once for initing your billing plan (then you get the resultant plan.id to store in config.json),
|
|
// and once for any time you need to edit the plan thereafter
|
|
|
|
var path = require('path');
|
|
var nconf = require('nconf');
|
|
var _ = require('lodash');
|
|
var paypal = require('paypal-rest-sdk');
|
|
var blocks = require('../website/common').content.subscriptionBlocks;
|
|
var live = nconf.get('PAYPAL:mode')=='live';
|
|
|
|
nconf.argv().env().file('user', path.join(path.resolve(__dirname, '../config.json')));
|
|
|
|
var OP = 'create'; // list create update remove
|
|
|
|
paypal.configure({
|
|
'mode': nconf.get("PAYPAL:mode"), //sandbox or live
|
|
'client_id': nconf.get("PAYPAL:client_id"),
|
|
'client_secret': nconf.get("PAYPAL:client_secret")
|
|
});
|
|
|
|
// https://developer.paypal.com/docs/api/#billing-plans-and-agreements
|
|
var billingPlanTitle ="Habitica Subscription";
|
|
var billingPlanAttributes = {
|
|
"name": billingPlanTitle,
|
|
"description": billingPlanTitle,
|
|
"type": "INFINITE",
|
|
"merchant_preferences": {
|
|
"auto_bill_amount": "yes",
|
|
"cancel_url": live ? 'https://habitica.com' : 'http://localhost:3000',
|
|
"return_url": (live ? 'https://habitica.com' : 'http://localhost:3000') + '/paypal/subscribe/success'
|
|
},
|
|
payment_definitions: [{
|
|
"type": "REGULAR",
|
|
"frequency": "MONTH",
|
|
"cycles": "0"
|
|
}]
|
|
};
|
|
_.each(blocks, function(block){
|
|
block.definition = _.cloneDeep(billingPlanAttributes);
|
|
_.merge(block.definition.payment_definitions[0], {
|
|
"name": billingPlanTitle + ' ($'+block.price+' every '+block.months+' months, recurring)',
|
|
"frequency_interval": ""+block.months,
|
|
"amount": {
|
|
"currency": "USD",
|
|
"value": ""+block.price
|
|
}
|
|
});
|
|
})
|
|
|
|
// @TODO: Add cli library for this
|
|
|
|
switch(OP) {
|
|
case "list":
|
|
paypal.billingPlan.list({status: 'ACTIVE'}, function(err, plans){
|
|
console.log({err:err, plans:plans});
|
|
});
|
|
break;
|
|
case "get":
|
|
paypal.billingPlan.get(nconf.get("PAYPAL:billing_plans:12"), function (err, plan) {
|
|
console.log({err:err, plan:plan});
|
|
})
|
|
break;
|
|
case "update":
|
|
var update = {
|
|
"op": "replace",
|
|
"path": "/merchant_preferences",
|
|
"value": {
|
|
"cancel_url": "https://habitica.com"
|
|
}
|
|
};
|
|
paypal.billingPlan.update(nconf.get("PAYPAL:billing_plans:12"), update, function (err, res) {
|
|
console.log({err:err, plan:res});
|
|
});
|
|
break;
|
|
case "create":
|
|
paypal.billingPlan.create(blocks["google_6mo"].definition, function(err,plan){
|
|
if (err) return console.log(err);
|
|
if (plan.state == "ACTIVE")
|
|
return console.log({err:err, plan:plan});
|
|
var billingPlanUpdateAttributes = [{
|
|
"op": "replace",
|
|
"path": "/",
|
|
"value": {
|
|
"state": "ACTIVE"
|
|
}
|
|
}];
|
|
// Activate the plan by changing status to Active
|
|
paypal.billingPlan.update(plan.id, billingPlanUpdateAttributes, function(err, response){
|
|
console.log({err:err, response:response, id:plan.id});
|
|
});
|
|
});
|
|
break;
|
|
case "remove": break;
|
|
|
|
case 'create-webprofile':
|
|
let webexpinfo = {
|
|
"name": "HabiticaProfile",
|
|
"input_fields": {
|
|
"no_shipping": 1,
|
|
},
|
|
};
|
|
|
|
paypal.webProfile.create(webexpinfo, (error, result) => {
|
|
console.log(error, result)
|
|
})
|
|
break;
|
|
}
|