我正在建立一个条带自定义结账集成,允许用户注册和支付事件。注册选项非常简单,只有4个类别-所有相同的价格。
我已经成功地将类别标题传递给了条纹检出弹出窗口中的描述参数,但是在将相同的描述参数传递给条纹API时遇到了麻烦。
测试充值成功后,条纹返回带有'description: null‘的对象。
向description参数添加字符串可以正确地返回该字符串,但我希望它返回表单中的类别标题集。
INDEX.HTML
<script>
var checkoutHandler = StripeCheckout.configure({
key: "pk_test_stripeTestKey",
locale: "auto",
});
// var button = document.getElementById("submitButton");
// button.addEventListener("click", function(ev) {
function checkout(ev) {
var description = $('#categoryDesc').val();
checkoutHandler.open({
image: "/cj-stripe-icon.jpg",
name: 'The EVENT 2019',
description: description, //$("#categoryDesc").val() + " - " + "$130",
amount: 13000,
token: handleToken
});
};
// });
function handleToken(token) {
fetch("/charge", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(token)
})
.then(response => {
if (!response.ok)
throw response;
return response.json();
})
.then(output => {
console.log("Purchase succeeded:", output);
submitToAPI(event);
document.getElementById("shop").innerHTML = "<h2>Thank you for registering!</h2><h3>You should receive an email confirmation shortly.</h3>";
})
.catch(err => {
console.log("Purchase failed:", err);
})
}
</script>APP.JS
onst express = require("express");
const stripe = require("stripe")(keySecret);
const bodyParser = require("body-parser");
const app = express();
app.use(express.static("public")); // serves content from the public directory
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.post("/charge", (req, res) => {
let amount = 13000;
stripe.customers.create({
email: req.body.email,
card: req.body.id
})
.then(customer =>
stripe.charges.create({
amount,
currency: "usd",
description: req.body.description,
customer: customer.id
}))
.then(charge => res.send(charge))
.catch(err => {
console.log("Error:", err);
res.status(500).send({error: "Purchase Failed"});
});
});发布于 2019-04-10 05:57:07
当你在前端得到令牌响应时,我会构建一个新的Javascript对象。它应该包含两个属性:(a)令牌ID和(b)映射到后端设置的价格/服务的一些ENUM/描述。
例如:
var payload = {
tokenId: token.id,
productId: <<some product id>>
}然后在您的后端,您应该检索此信息。
例如:
var PRODUCTS = {
// productId: {description: 'Cat Mittens', price: 2000, ...}
product1: {description: 'Product #1', price: 1000},
product2: {description: 'Product #2', price: 2000}
}
if (!(req.body.productId in PRODUCTS)) {
// Couldn't find the product id in the product list-- raise an error!
}
var product = PRODUCTS[req.body.productId];这样你就可以得到描述,在前端和后端之间进行映射。如果你不这样做,一些恶意的人可能会改变他们正在购买的产品或他们正在购买的产品的描述,甚至可能是他们正在购买的产品的价值。因此,这里的最佳实践是共享某种枚举。
另一件很酷的事情是让你在后端验证令牌。当您尝试使用Secret API密钥检索令牌时,您可以看到有关令牌的更多详细信息,而当您简单地使用可发布API密钥创建令牌时,您无法看到这些详细信息。
希望这能有所帮助!
https://stackoverflow.com/questions/55601737
复制相似问题