diff --git a/frontend/components/Cart.vue b/frontend/components/Cart.vue index 9337f83..aeaef99 100644 --- a/frontend/components/Cart.vue +++ b/frontend/components/Cart.vue @@ -97,6 +97,9 @@
+ + +
@@ -110,13 +113,15 @@ import store from '@/store'; import Picker from '@/components/ui/Picker' import Button from '@/components/ui/Button' import applePay from '@/components/ui/applePay'; +import stripe from '@/components/stripe'; export default { name: 'Cart', components: { Picker, Button, - applePay + applePay, + stripe }, computed: { cartInventory() { diff --git a/frontend/components/stripe.vue b/frontend/components/stripe.vue new file mode 100644 index 0000000..5652720 --- /dev/null +++ b/frontend/components/stripe.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/package.json b/package.json index f0dc99d..ed4233a 100644 --- a/package.json +++ b/package.json @@ -13,12 +13,14 @@ "license": "MIT", "dependencies": { "@babel/polyfill": "~7.2", + "@stripe/stripe-js": "^1.8.0", "clean-webpack-plugin": "^3.0.0", "extract-text-webpack-plugin": "^3.0.2", "moment": "^2.24.0", "mongoose": "^5.9.24", "node-fetch": "^2.6.0", "node-sass": "^4.13.0", + "stripe": "^8.76.0", "vue": "~2.6", "vue-router": "~3.0", "vuex": "^3.1.1" diff --git a/server/app.js b/server/app.js index a7ae913..686b5d2 100644 --- a/server/app.js +++ b/server/app.js @@ -14,6 +14,8 @@ const PORT = 30010; const productsController = require('./controllers/product.js'); const variationsController = require('./controllers/variation.js'); +const applePayController = require('./controllers/applePay.js'); +const stripeController = require('./controllers/stripe.js'); app.use(express.json()); // app.use(express.urlencoded()); @@ -24,6 +26,10 @@ router.post('/product', productsController.addNewProduct) router.post('/variation/:id', variationsController.addNewVariationToProduct); +router.post('/applepay/validateSession', applePayController.validateSession) +router.post('/applepay/pay', applePayController.pay) +router.post('/stripe/create-payment-intent', stripeController.createPaymentIntent) + app.use("/public", express.static(path.join(__dirname, "public"))); app.use("/dist", express.static(path.join(__dirname, "/../public/dist"))); app.use('/.well-known', express.static(path.join(__dirname, "/../frontend/assets/well-known"))); diff --git a/server/config.example.js b/server/config.example.js new file mode 100644 index 0000000..0e12c15 --- /dev/null +++ b/server/config.example.js @@ -0,0 +1,7 @@ + +module.exports = { + stripe: { + publicKey: '', + secretKey: '' + } +} diff --git a/server/controllers/stripe.js b/server/controllers/stripe.js new file mode 100644 index 0000000..256e2d9 --- /dev/null +++ b/server/controllers/stripe.js @@ -0,0 +1,22 @@ +const config = require('../config') +const Stripe = require('stripe') +const stripe = Stripe(config.stripe.secretKey) + +const createPaymentIntent = async (req, res) => { + const { items, currency } = req.body; + + const paymentIntent = await stripe.paymentIntents.create({ + amount: 1009, + currency: 'NOK' + }) + console.log('created payment intent:', paymentIntent); + + return res.send({ + publishableKey: config.stripe.publicKey, + clientSecret: paymentIntent.client_secret + }) +} + +module.exports = { + createPaymentIntent +}