Как отправить данные в экспресс-сервер Stripe nodejs - PullRequest
1 голос
/ 30 мая 2019

Я попытался интегрировать 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()), но решил сначала проконсультироваться с вами, ребята.

1 Ответ

3 голосов
/ 30 мая 2019

Если я вас правильно понимаю, вы хотите опубликовать 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! == tokenidreq.body.tokenid)

...