Switched to Stripe.js checkout for ease of use and better security

This commit is contained in:
Sahat Yalkabov
2014-04-14 17:34:51 -04:00
parent 2dae0ee0ab
commit 84a911da03
3 changed files with 143 additions and 142 deletions

View File

@ -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.

View File

@ -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

View File

@ -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 }