62 lines
1.5 KiB
TypeScript

import type { CustomerCardEndpoint } from '.'
import type { OredercloudCreditCard } from '../../../../types/customer/card'
import Stripe from "stripe"
const stripe = new Stripe(process.env.STRIPE_SECRET as string, {
apiVersion: "2020-08-27"
})
const addItem: CustomerCardEndpoint['handlers']['addItem'] = async ({
res,
body: { item, cartId },
config: { restFetch },
}) => {
// Return an error if no item is present
if (!item) {
return res.status(400).json({
data: null,
errors: [{ message: 'Missing item' }],
})
}
// Return an error if no item is present
if (!cartId) {
return res.status(400).json({
data: null,
errors: [{ message: 'Cookie not found' }],
})
}
// Get token
const token = await stripe.tokens.create({
card: {
number: item.cardNumber,
exp_month: item.cardExpireDate.split('/')[0],
exp_year: item.cardExpireDate.split('/')[1],
cvc: item.cardCvc
}
}).then((res: {id: string}) => res.id)
// Register credit card
const creditCard = await restFetch('POST', `/me/creditcards`, {
"Token": token,
"CardType": "credit",
"PartialAccountNumber": item.cardNumber.slice(-4),
"CardholderName": item.cardHolder,
"ExpirationDate": item.cardExpireDate
}).then(
(response: OredercloudCreditCard) => response.ID
)
// Assign payment to order
await restFetch('POST', `/orders/Outgoing/${cartId}/payments`, {
"Type": "CreditCard",
CreditCardID: creditCard
})
return res.status(200).json({ data: null, errors: [] })
}
export default addItem