Switched to Stripe.js checkout for ease of use and better security
This commit is contained in:
@ -391,149 +391,37 @@ exports.getSteam = function(req, res, next) {
|
|||||||
* Stripe API example.
|
* Stripe API example.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
exports.getStripe = function(req, res, next) {
|
exports.getStripe = function(req, res) {
|
||||||
//Create a token for the CC
|
res.render('api/stripe', {
|
||||||
res.render('api/stripe/index', {
|
|
||||||
title: 'Stripe API'
|
title: 'Stripe API'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET /api/onetime
|
* POST /api/stripe
|
||||||
* Stripe One Time Charge API example.
|
* @param stipeToken
|
||||||
|
* @param stripeEmail
|
||||||
*/
|
*/
|
||||||
exports.getStripeOnetime = function(req, res, next) {
|
|
||||||
//Create a token for the CC
|
|
||||||
res.render('api/stripe/onetime', {
|
|
||||||
title: 'Stripe API'
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
exports.postStripe = function(req, res, next) {
|
||||||
* POST /api/stripe/onetime
|
var stripeToken = req.body.stripeToken;
|
||||||
* @param ccNumber
|
var stripeEmail = req.body.stripeEmail;
|
||||||
* @param expMonth
|
|
||||||
* @param expYear
|
|
||||||
* @param ccNumber
|
|
||||||
* @param expMonth
|
|
||||||
* @param expYear
|
|
||||||
* @param customerName
|
|
||||||
* @param email
|
|
||||||
* @param chargeAmount
|
|
||||||
*/
|
|
||||||
exports.postStripeOnetime = function(req, res, next) {
|
|
||||||
stripe.tokens.create({
|
|
||||||
card: {
|
|
||||||
"number": req.body.ccNumber,
|
|
||||||
"exp_month": req.body.expMonth,
|
|
||||||
"exp_year": req.body.expYear,
|
|
||||||
"cvc": req.body.cvc
|
|
||||||
}
|
|
||||||
}, function(err, token) {
|
|
||||||
if (err) {
|
|
||||||
req.flash('errors', { msg: err.message });
|
|
||||||
return res.redirect('/api/stripe/onetime');
|
|
||||||
}
|
|
||||||
//Create a new customer
|
|
||||||
stripe.customers.create({
|
|
||||||
card: token.id,
|
|
||||||
description: req.body.customerName,
|
|
||||||
email: req.body.email
|
|
||||||
}).then(function(customer) {
|
|
||||||
//charge the customer
|
|
||||||
stripe.charges.create({
|
stripe.charges.create({
|
||||||
amount: req.body.chargeAmount * 100, // amount in cents
|
amount: 395,
|
||||||
currency: "usd",
|
currency: 'usd',
|
||||||
customer: customer.id
|
card: stripeToken,
|
||||||
|
description: stripeEmail
|
||||||
}, function(err, charge) {
|
}, function(err, charge) {
|
||||||
if (err) {
|
if (err && err.type === 'StripeCardError') {
|
||||||
req.flash('errors', { msg: err.message });
|
req.flash('errors', { msg: 'Your card has been declined.'});
|
||||||
return res.redirect('/api/stripe/onetime');
|
res.redirect('/api/stripe');
|
||||||
}else{
|
|
||||||
req.flash('success', { msg: 'Charged Successfully'});
|
|
||||||
res.render('api/stripe/onetime', {
|
|
||||||
title: 'Stipe API',
|
|
||||||
customer: customer,
|
|
||||||
charge: charge
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
req.flash('success', { msg: 'Your card has been charged successfully.'});
|
||||||
});
|
res.redirect('/api/stripe');
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* GET /api/newsubscriber
|
|
||||||
* Stripe Subscription API example.
|
|
||||||
*/
|
|
||||||
exports.getStripeNewSubscriber = function(req, res, next) {
|
|
||||||
stripe.plans.list(function(err, plans) {
|
|
||||||
res.render('api/stripe/newsubscriber', {
|
|
||||||
title: 'Stripe API',
|
|
||||||
plans: _.pluck(plans.data, 'name')
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* POST /api/stripe/newsubscriber
|
|
||||||
* @param ccNumber
|
|
||||||
* @param expMonth
|
|
||||||
* @param expYear
|
|
||||||
* @param ccNumber
|
|
||||||
* @param expMonth
|
|
||||||
* @param expYear
|
|
||||||
* @param customerName
|
|
||||||
* @param email
|
|
||||||
* @param plantype
|
|
||||||
*/
|
|
||||||
exports.postStripeNewSubscriber = function(req, res, next) {
|
|
||||||
console.log(req.body.plantype);
|
|
||||||
|
|
||||||
stripe.tokens.create({
|
|
||||||
card: {
|
|
||||||
"number": req.body.ccNumber,
|
|
||||||
"exp_month": req.body.expMonth,
|
|
||||||
"exp_year": req.body.expYear,
|
|
||||||
"cvc": req.body.cvc
|
|
||||||
}
|
|
||||||
}, function(err, token) {
|
|
||||||
if (err) {
|
|
||||||
req.flash('errors', { msg: err.message });
|
|
||||||
return res.redirect('/api/stripe/newsubscriber');
|
|
||||||
}
|
|
||||||
//Create a new customer
|
|
||||||
stripe.customers.create({
|
|
||||||
card: token.id,
|
|
||||||
description: req.body.customerName,
|
|
||||||
email: req.body.email
|
|
||||||
}).then(function(customer) {
|
|
||||||
//charge the customer
|
|
||||||
stripe.customers.createSubscription(
|
|
||||||
customer.id,
|
|
||||||
{plan: req.body.plantype},
|
|
||||||
function(err, subscription) {
|
|
||||||
if (err) {
|
|
||||||
req.flash('errors', { msg: err.message });
|
|
||||||
return res.redirect('/api/stripe/newsubscriber');
|
|
||||||
}else{
|
|
||||||
stripe.plans.list(function(err, plans) {
|
|
||||||
req.flash('success', { msg: 'Subscribed Successfully'});
|
|
||||||
res.render('api/stripe/newsubscriber', {
|
|
||||||
title: 'Stipe API',
|
|
||||||
customer: customer,
|
|
||||||
subscription: subscription,
|
|
||||||
plans: _.pluck(plans.data, 'name')
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET /api/twilio
|
* GET /api/twilio
|
||||||
* Twilio API example.
|
* Twilio API example.
|
||||||
|
@ -4,7 +4,6 @@ block content
|
|||||||
h2 API Examples
|
h2 API Examples
|
||||||
hr
|
hr
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
.row.api-examples
|
.row.api-examples
|
||||||
.col-sm-4
|
.col-sm-4
|
||||||
.panel.panel-default
|
.panel.panel-default
|
||||||
|
@ -1,10 +1,124 @@
|
|||||||
extends ../layout
|
extends ../layout
|
||||||
|
|
||||||
block content
|
block content
|
||||||
|
.page-header
|
||||||
h2 Stripe API
|
h2 Stripe API
|
||||||
|
|
||||||
ol
|
.btn-group.btn-group-justified
|
||||||
li
|
a.btn.btn-primary(href='https://stripe.com/docs/tutorials/checkout')
|
||||||
a(href='/api/stripe/onetime') One Time Charges
|
i.fa.fa-home
|
||||||
li
|
| Integration Checkout
|
||||||
a(href='/api/stripe/newsubscriber') New Subscriber
|
a.btn.btn-primary(href='https://stripe.com/docs/api', target='_blank')
|
||||||
|
i.fa.fa-code
|
||||||
|
| API Reference
|
||||||
|
a.btn.btn-primary(href='https://manage.stripe.com/account/apikeys', target='_blank')
|
||||||
|
i.fa.fa-gear
|
||||||
|
| API Keys
|
||||||
|
|
||||||
|
br
|
||||||
|
|
||||||
|
form(method='POST')
|
||||||
|
input(type='hidden', name='_csrf', value=_csrf)
|
||||||
|
script(
|
||||||
|
src='https://checkout.stripe.com/checkout.js',
|
||||||
|
class='stripe-button',
|
||||||
|
data-key='pk_test_6pRNASCoBOKtIshFeQd4XMUh',
|
||||||
|
data-image='http://static.tumblr.com/nljhkjv/z0Jlpk23i/logo',
|
||||||
|
data-name='Hackathon Starter',
|
||||||
|
data-description='Caramel Macchiato ($3.95)',
|
||||||
|
data-amount='395')
|
||||||
|
|
||||||
|
h3
|
||||||
|
i.fa.fa-credit-card
|
||||||
|
| Test Cards
|
||||||
|
p In test mode, you can use these test cards to simulate a successful transaction:
|
||||||
|
|
||||||
|
table.table.table-striped.table-bordered.table-condensed
|
||||||
|
thead
|
||||||
|
tr
|
||||||
|
th Number
|
||||||
|
th Card type
|
||||||
|
tbody
|
||||||
|
tr
|
||||||
|
td 4242 4242 4242 4242
|
||||||
|
td Visa
|
||||||
|
tr
|
||||||
|
td 4012 8888 8888 1881
|
||||||
|
td Visa
|
||||||
|
tr
|
||||||
|
td 5555 5555 5555 4444
|
||||||
|
td MasterCard
|
||||||
|
tr
|
||||||
|
td 5105 1051 0510 5100
|
||||||
|
td MasterCard
|
||||||
|
tr
|
||||||
|
td 3782 822463 10005
|
||||||
|
td American Express
|
||||||
|
tr
|
||||||
|
td 3714 496353 98431
|
||||||
|
td American Express
|
||||||
|
tr
|
||||||
|
td 6011 1111 1111 1117
|
||||||
|
td Discover
|
||||||
|
tr
|
||||||
|
td 6011 0009 9013 9424
|
||||||
|
td Discover
|
||||||
|
tr
|
||||||
|
td 3056 9309 0259 04
|
||||||
|
td Diners Club
|
||||||
|
tr
|
||||||
|
td 3852 0000 0232 37
|
||||||
|
td Diners Club
|
||||||
|
tr
|
||||||
|
td 3530 1113 3330 0000
|
||||||
|
td JCB
|
||||||
|
tr
|
||||||
|
td 3566 0020 2036 0505
|
||||||
|
td JCB
|
||||||
|
|
||||||
|
.panel.panel-primary
|
||||||
|
.panel-heading Stripe Successful Charge Example
|
||||||
|
.panel-body
|
||||||
|
p This is the response you will get when customer's card has been charged successfully.
|
||||||
|
| You could use some of the data below for logging purposes.
|
||||||
|
pre.
|
||||||
|
{ id: 'ch_103qzW2eZvKYlo2CiYcKs6Sw',
|
||||||
|
object: 'charge',
|
||||||
|
created: 1397510564,
|
||||||
|
livemode: false,
|
||||||
|
paid: true,
|
||||||
|
amount: 395,
|
||||||
|
currency: 'usd',
|
||||||
|
refunded: false,
|
||||||
|
card:
|
||||||
|
{ id: 'card_103qzW2eZvKYlo2CJ2Ss4kwS',
|
||||||
|
object: 'card',
|
||||||
|
last4: '4242',
|
||||||
|
type: 'Visa',
|
||||||
|
exp_month: 11,
|
||||||
|
exp_year: 2015,
|
||||||
|
fingerprint: 'Xt5EWLLDS7FJjR1c',
|
||||||
|
customer: null,
|
||||||
|
country: 'US',
|
||||||
|
name: 'sahat@me.com',
|
||||||
|
address_line1: null,
|
||||||
|
address_line2: null,
|
||||||
|
address_city: null,
|
||||||
|
address_state: null,
|
||||||
|
address_zip: null,
|
||||||
|
address_country: null,
|
||||||
|
cvc_check: 'pass',
|
||||||
|
address_line1_check: null,
|
||||||
|
address_zip_check: null },
|
||||||
|
captured: true,
|
||||||
|
refunds: [],
|
||||||
|
balance_transaction: 'txn_103qzW2eZvKYlo2CNEcJV8SN',
|
||||||
|
failure_message: null,
|
||||||
|
failure_code: null,
|
||||||
|
amount_refunded: 0,
|
||||||
|
customer: null,
|
||||||
|
invoice: null,
|
||||||
|
description: 'sahat@me.com',
|
||||||
|
dispute: null,
|
||||||
|
metadata: {},
|
||||||
|
statement_description: null }
|
||||||
|
Reference in New Issue
Block a user