我试图将条纹集成到我的结帐,我得到了一个小错误,我似乎无法修复。当点击checkout按钮时,不是得到checkout页面,而是显示以下内容:{“url”:“https://checkout.stripe.com/c/pay/cs_test_rest_of_link_here“}所以不知何故,我没有得到指导,因为我应该。以下是我到目前为止拥有的代码:
customer_cart控制器文件
const AllProduct = require('../database_models/allproduct');
const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY)
module.exports.checkout = async (req, res) => {
if (!req.session.cart) {
req.flash('error', 'There are no items to be checked out');
res.redirect('/');
}
try {
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
mode: 'payment',
line_items: req.session.cart.map(item => {
return {
price_data: {
currency: 'gbp',
product_data: {
name: item.productName
},
unit_amount: item.itemPrice
},
quantity: item.quantity * 100
}
}),
success_url: `${process.env.SERVER_URL}/success`,
cancel_url: `${process.env.SERVER_URL}/cancel.html`
})
res.json({ url: session.url })
} catch (error) {
res.status(500).json({ error: error.message })
}
};
客户路由文件
// Require Modules
const express = require('express');
const router = express.Router();
const cart = require('../controllers/customer_cart');
const catchAsync = require('../utils/catchAsync');
const ExpressError = require('../utils/ExpressError');
const { productSchema } = require('../joivalidations.js');
const { isLoggedIn } = require('../middleware');
const AllProduct = require('../database_models/allproduct');
router.get('/add/:id', isLoggedIn, catchAsync(cart.addToCart));
router.get('/', isLoggedIn, catchAsync(cart.viewCart));
router.get('/clear', isLoggedIn, catchAsync(cart.clearCart));
router.get('/checkout', isLoggedIn, catchAsync(cart.checkout))
router.post('/checkout', isLoggedIn, catchAsync(cart.checkout));
module.exports = router;
和checkout.ejs文件
<% layout('layouts/productboilerplate')%>
<h1>TEST</h1>
<!-- Display a payment form -->
<button>Checkout</button>
<script>
const button = document.querySelector("button")
button.addEventListener("click", () => {
fetch('/cart/checkout', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
items: req.session.cart,
}),
}).then(res => {
if (res.ok) return res.json()
return res.json().then(json => Promise.reject(json))
}).then(({ url }) => {
console.log(url)
window.location.href = url
}).catch(error => {
console.error(error)
})
})
</script>
我怀疑我没有正确处理checkout.ejs文件中的url属性,但我希望能得到一些意见,因为我已经开始在这方面很长时间了,并没有很快得到任何进展
先谢谢你了
1条答案
按热度按时间8e2ybdfx1#
一般看起来不错。你在这里使用JSON数据进行响应:
res.json({ url: session.url })
所以你应该跟踪你的
fetch().then()...
链,看看哪里出错了。你得到
res.ok
了吗?您看到console.log(url)
输出了吗?一步一步来,确保你在每个阶段都得到了预期的结果。