如何将数据发送到Stripe Node.js Express后端

时间:2019-05-30 09:38:57

标签: express fetch stripe-payments

我尝试使用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()),但决定先咨询你们。

1 个答案:

答案 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中)