仅在成功进行条带付款后,如何将用户重定向到站点?

时间:2019-01-09 10:31:57

标签: node.js express stripe-payments

对于我的网站,我有一个网站可以解释价格计划以及您可以在其中提交电子邮件和信用卡信息的地方。之后,您将被重定向到创建帐户站点。我只想在付款成功的情况下重定向到该站点,否则-不能访问/ createaccount网址。我对如何执行操作有一些想法,但是在此方面需要帮助或给小费。

过去,我尝试在/ createaccount:id网址中添加一些ID,但没有成功。

前端代码是带有stripe.elemens和elements.create('card')

的典型的条纹订阅代码。

后端代码如下:

app.post("/charge", (req, res) => {
let email = req.body.email;
let card = req.body.stripeToken;
let amount = req.body.plan;
let interval = req.body.interval;
const createSubscription = async () => {
const stripe = require("stripe")(SK);
const {
  data: plans
} = await stripe.plans.list({
  product: "prod_id"
})
// Create Customer
const customer = await stripe.customers.create({
  email: email,
  card: card,
});
const planToSubscribeTo = plans.find(p => p.interval === interval)
// Subscribe Customer to plan
const subscription = await stripe.subscriptions.create({
  customer: customer.id,
  items: [{
    plan: planToSubscribeTo.id
  }],
});
return {
  customer,
  // prodgHack,
  planToSubscribeTo,
  // ThreeMonthFreeCoupon,
  subscription
};
};

console.log('Creating subscriptions ...... ');
createSubscription().then((sub) => {
 console.log(sub);
}).catch(err => {
 console.warn('Failed to create subscriptions ', err);
});
res.redirect('/createAccount');
});

1 个答案:

答案 0 :(得分:0)

过去使用Stripe(尽管是收费而不是订阅),假设过程类似,我在下面做了类似的事情

app.post('/payment', async (req, res) => {
  stripe.charges.create({
    amount: 10000,
    currency: 'gbp',
    description: 'Description Here',
    source: req.body.stripeToken,
    receipt_email: req.body.stripeEmail,
    metadata: { email: req.body.stripeEmail },
  }, async (err, charge) => {
    if (err && err.type === 'StripeCardError') {
      res.render('payment_declined');
    } else {
      // Do anything else here like update DB etc and then render view
      res.render('successful_payment');
    }
  });
});

这是正确的方法还是不确定我是否遗漏了部分内容,但是也许这会使您更进一步?如果不愿意删除此答案,以便其他人添加一些东西

此外,在代码中,您可能不需要声明以下变量,只需直接调用它们即可

let email = req.body.email;
let card = req.body.stripeToken;
let amount = req.body.plan;
let interval = req.body.interval;
// So just use req.body.email, req.body.plan where required

const stripe = require("stripe")(SK);最好放在文件的顶部(仅调用一次,如果应用程序中有多个付款路径,会发生这种情况),而不是放在post函数本身中