✨ (payment) add payment test to about page
This commit is contained in:
62
src/components/Payment.vue
Normal file
62
src/components/Payment.vue
Normal file
@@ -0,0 +1,62 @@
|
||||
<template>
|
||||
<div class="payment">
|
||||
<Card
|
||||
ref="stripeCard"
|
||||
class="stripe-card"
|
||||
:class="{ complete }"
|
||||
stripe="pk_test_CO1FMasxNSwIX0P9FgzmDMyp"
|
||||
@change="complete = $event.complete"
|
||||
/>
|
||||
<button class="button is-primary" @click="pay" :disabled="!complete">
|
||||
Payer par carte bleue
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { Component, Vue } from 'vue-property-decorator'
|
||||
import {
|
||||
Card,
|
||||
createToken,
|
||||
confirmPaymentIntent,
|
||||
instance as Stripe
|
||||
} from 'vue-stripe-elements-plus'
|
||||
import IPaymentIntent from '@/models/IPaymentIntent'
|
||||
import IPayment from '@/models/IPayment'
|
||||
import notif from '@/utils/notif'
|
||||
|
||||
@Component({
|
||||
components: {
|
||||
Card
|
||||
}
|
||||
})
|
||||
export default class Payment extends Vue {
|
||||
private complete: boolean = false
|
||||
|
||||
private async pay() {
|
||||
const paymentIntentResponse = await fetch('http://localhost:9000/payment')
|
||||
const paymentIntent: IPaymentIntent = await paymentIntentResponse.json()
|
||||
|
||||
const data: IPayment | null = await createToken()
|
||||
|
||||
if (paymentIntent && data) {
|
||||
try {
|
||||
const result = await Stripe.confirmCardPayment(
|
||||
paymentIntent.clientSecret,
|
||||
{
|
||||
payment_method: {
|
||||
card: (this.$refs.stripeCard as any).$refs.element._element,
|
||||
billing_details: {
|
||||
name: 'Julien Calixte',
|
||||
email: 'juliencalixte@gmail.com'
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
} catch (error) {
|
||||
notif.error('une erreur est survenue lors de votre paiement')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -35,7 +35,7 @@ export default {
|
||||
},
|
||||
about: {
|
||||
description: `
|
||||
Vaquant est une application pour réaliser
|
||||
Vaquant est une application qui réalise
|
||||
des balances équitables de vos budgets entre
|
||||
amis lors de vos colocations, vacances, séjours,
|
||||
voyages, etc.`
|
||||
|
||||
33
src/models/IPayment.ts
Normal file
33
src/models/IPayment.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
export default interface IPayment {
|
||||
token: {
|
||||
id: string
|
||||
object: string
|
||||
card: {
|
||||
id: string
|
||||
object: 'token'
|
||||
address_city: string | null
|
||||
address_country: string | null
|
||||
address_line1: string | null
|
||||
address_line1_check: string | null
|
||||
address_line2: string | null
|
||||
address_state: string | null
|
||||
address_zip: string
|
||||
address_zip_check: string
|
||||
brand: string
|
||||
country: string
|
||||
cvc_check: string
|
||||
dynamic_last4: string | null
|
||||
exp_month: number
|
||||
exp_year: number
|
||||
funding: string
|
||||
last4: string
|
||||
name: string | null
|
||||
tokenization_method: string | null
|
||||
}
|
||||
client_ip: string
|
||||
created: number
|
||||
livemode: boolean
|
||||
type: string
|
||||
used: boolean
|
||||
}
|
||||
}
|
||||
3
src/models/IPaymentIntent.ts
Normal file
3
src/models/IPaymentIntent.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export default interface IPaymentIntent {
|
||||
clientSecret: string
|
||||
}
|
||||
1
src/shims-vue.d.ts
vendored
1
src/shims-vue.d.ts
vendored
@@ -9,3 +9,4 @@ declare module 'crypto-js/aes'
|
||||
declare module 'crypto-js/enc-utf8'
|
||||
declare module '@xkeshi/vue-qrcode'
|
||||
declare module 'font-color-contrast'
|
||||
declare module 'vue-stripe-elements-plus'
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div class="about no-margin">
|
||||
<Payment />
|
||||
<img class="logo" src="../assets/logo.svg" title="logo Vaquant" />
|
||||
<p class="simple-description" v-t="'about.description'"></p>
|
||||
<hr />
|
||||
@@ -9,10 +10,12 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { Component, Vue } from 'vue-property-decorator'
|
||||
import Payment from '@/components/Payment.vue'
|
||||
|
||||
@Component({
|
||||
components: {
|
||||
'app-resume': () => import('@/components/AppResume.vue')
|
||||
'app-resume': () => import('@/components/AppResume.vue'),
|
||||
Payment
|
||||
}
|
||||
})
|
||||
export default class About extends Vue {}
|
||||
|
||||
Reference in New Issue
Block a user