我尝试使用https://stripe.com/docs/recipes/elements-react上的官方文档将Stripe集成到我的React应用程序中。如果您可以浏览这份文件,就会发现他们使用的是固定值(2000)。
// server.js
const app = require("express")();
const stripe = require("stripe")("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
app.use(require("body-parser").text());
app.post("/charge", async (req, res) => {
try {
let {status} = await stripe.charges.create({
amount: 2000,
currency: "usd",
description: "An example charge",
source: req.body
});
res.json({status});
} catch (err) {
res.status(500).end();
}
});
使用提取功能从前端获取的post
API是:
async submit(ev) {
let {token} = await this.props.stripe.createToken({name: "Name"});
let response = await fetch("/charge", {
method: "POST",
headers: {"Content-Type": "text/plain"},
body: token.id
});
if (response.ok) console.log("Purchase Complete!")
}
在这里,他们正在发送令牌ID,并在后端将其引用为source:req.body
。
现在,我已尝试通过POST请求从前端发送金额,如下所示:
body:{
amount: 2000,
tokenId: token.Id
}
,然后在后端将其引用为
...
amount: req.body.amount,
source: req.body.tokenid
...
它不起作用。并安慰都返回未定义
我尝试了很多操作,例如删除内容类型标头和一些非常小的事情。有人指出我应该将content-type更改为application / json,我已经考虑过设置
app.use(require("body-parser").text())
至app.use(require("body-parser").json())
,但决定先咨询你们。
答案 0 :(得分:1)
如果我对您的理解正确,则希望从客户端发布json以表示服务器。如果是这样:
客户
fetch({
method: 'POST',
body: JSON.stringify({
amount: 2000,
tokenId: token.Id
}),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
});
服务器
const app = express();
// if express >= 4
app.use(express.json());
app.post("/charge", async (req, res) => {
console.log(req.body);
});
通过tokenId
!== tokenid
(在req.body.tokenid
中)