Я попытался интегрировать Stripe в свое приложение React, используя официальный документ по адресу https://stripe.com/docs/recipes/elements-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();
}
});
API post
из внешнего интерфейса, использующего fetch:
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!")
}
Здесь они отправляют идентификатор токена и ссылаются на него в серверной части как source:req.body
.
Теперь я попытался отправить сумму из внешнего интерфейса через запрос POST следующим образом:
body:{
amount: 2000,
tokenId: token.Id
}
, а затем сослаться на него в бэкэнде как
...
amount: req.body.amount,
source: req.body.tokenid
...
Это не работает,И утешительные оба возврата не определены
Я пробовал много вещей, таких как удаление заголовка с типом контента и милые мелочи.Кто-то указал, что мне следует изменить тип содержимого на application / json, и я подумал о том, чтобы установить app.use(require("body-parser").text())
на app.use(require("body-parser").json())
, но решил сначала проконсультироваться с вами, ребята.