4
0
forked from crowetic/commerce

Embedded checkout

This commit is contained in:
Luis Alvarez 2020-10-14 17:53:50 -05:00
parent a487ee3081
commit b796e625df
3 changed files with 74 additions and 5 deletions

View File

@ -29,11 +29,8 @@ const cartApi: BigcommerceApiHandler<
if (!isAllowedMethod(req, res, METHODS)) return
try {
// Return current cart info
if (req.method === 'GET') {
const body = req.query
return await handlers['getProducts']({ req, res, config, body })
}
const body = req.query
return await handlers['getProducts']({ req, res, config, body })
} catch (error) {
console.error(error)

View File

@ -0,0 +1,69 @@
import isAllowedMethod from './utils/is-allowed-method'
import createApiHandler, {
BigcommerceApiHandler,
} from './utils/create-api-handler'
import { BigcommerceApiError } from './utils/errors'
const METHODS = ['GET']
// TODO: a complete implementation should have schema validation for `req.body`
const checkoutApi: BigcommerceApiHandler<any> = async (req, res, config) => {
if (!isAllowedMethod(req, res, METHODS)) return
const { cookies } = req
const cartId = cookies[config.cartCookie]
try {
if (!cartId) {
return res.status(404).end()
}
const { data } = await config.storeApiFetch(
`/v3/carts/${cartId}/redirect_urls`,
{
method: 'POST',
}
)
const html = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Checkout</title>
<script src="https://checkout-sdk.bigcommerce.com/v1/loader.js"></script>
<script>
window.onload = function() {
checkoutKitLoader.load('checkout-sdk').then(function (service) {
console.log('SERVICE', service)
service.embedCheckout({
containerId: 'checkout',
url: '${data.embedded_checkout_url}'
});
});
}
</script>
</head>
<body>
<div id="checkout"></div>
</body>
</html>
`
res.status(200)
res.setHeader('Content-Type', 'text/html')
res.write(html)
res.end()
} catch (error) {
console.error(error)
const message =
error instanceof BigcommerceApiError
? 'An unexpected error ocurred with the Bigcommerce API'
: 'An unexpected error ocurred'
res.status(500).json({ data: null, errors: [{ message }] })
}
}
export default createApiHandler(checkoutApi, {})

View File

@ -0,0 +1,3 @@
import checkoutApi from '@lib/bigcommerce/api/checkout'
export default checkoutApi()