首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将变量描述传递给Stripe Express后端

如何将变量描述传递给Stripe Express后端
EN

Stack Overflow用户
提问于 2019-04-10 05:40:10
回答 1查看 670关注 0票数 0

我正在建立一个条带自定义结账集成,允许用户注册和支付事件。注册选项非常简单,只有4个类别-所有相同的价格。

我已经成功地将类别标题传递给了条纹检出弹出窗口中的描述参数,但是在将相同的描述参数传递给条纹API时遇到了麻烦。

测试充值成功后,条纹返回带有'description: null‘的对象。

向description参数添加字符串可以正确地返回该字符串,但我希望它返回表单中的类别标题集。

INDEX.HTML

代码语言:javascript
复制
   <script>      

        var checkoutHandler = StripeCheckout.configure({
            key: "pk_test_stripeTestKey",
            locale: "auto",
        });

       // var button = document.getElementById("submitButton");
        // button.addEventListener("click", function(ev) {

        function checkout(ev) {
        var description = $('#categoryDesc').val();
        checkoutHandler.open({
        image: "/cj-stripe-icon.jpg",
        name: 'The EVENT 2019',
        description: description, //$("#categoryDesc").val() + " - " + "$130",
        amount: 13000,
        token: handleToken
    });
};
// });

            function handleToken(token) {
                fetch("/charge", {
                    method: "POST",
                    headers: {"Content-Type": "application/json"},
                    body: JSON.stringify(token)
                })
                .then(response => {
                    if (!response.ok)
                        throw response;
                    return response.json();
                })
                .then(output => {
                    console.log("Purchase succeeded:", output);
                    submitToAPI(event);
                    document.getElementById("shop").innerHTML = "<h2>Thank you for registering!</h2><h3>You should receive an email confirmation shortly.</h3>";
                })
                .catch(err => {
                    console.log("Purchase failed:", err);
                })
            }               

            </script>

APP.JS

代码语言:javascript
复制
onst express = require("express");
const stripe = require("stripe")(keySecret);
const bodyParser = require("body-parser");

const app = express();
app.use(express.static("public")); // serves content from the public directory

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.post("/charge", (req, res) => {
  let amount = 13000;

  stripe.customers.create({
    email: req.body.email,
    card: req.body.id
  })
  .then(customer =>
    stripe.charges.create({
      amount,
      currency: "usd",
      description: req.body.description,
      customer: customer.id
    }))
    .then(charge => res.send(charge))
    .catch(err => {
      console.log("Error:", err);
      res.status(500).send({error: "Purchase Failed"});
    });
});
EN

回答 1

Stack Overflow用户

发布于 2019-04-10 05:57:07

当你在前端得到令牌响应时,我会构建一个新的Javascript对象。它应该包含两个属性:(a)令牌ID和(b)映射到后端设置的价格/服务的一些ENUM/描述。

例如:

代码语言:javascript
复制
var payload = {
  tokenId: token.id,
  productId: <<some product id>>
}

然后在您的后端,您应该检索此信息。

例如:

代码语言:javascript
复制
var PRODUCTS = {
  // productId: {description: 'Cat Mittens', price: 2000, ...}
  product1: {description: 'Product #1', price: 1000},
  product2: {description: 'Product #2', price: 2000}
}

if (!(req.body.productId in PRODUCTS)) {
  // Couldn't find the product id in the product list-- raise an error!
}

var product = PRODUCTS[req.body.productId];

这样你就可以得到描述,在前端和后端之间进行映射。如果你不这样做,一些恶意的人可能会改变他们正在购买的产品或他们正在购买的产品的描述,甚至可能是他们正在购买的产品的价值。因此,这里的最佳实践是共享某种枚举。

另一件很酷的事情是让你在后端验证令牌。当您尝试使用Secret API密钥检索令牌时,您可以看到有关令牌的更多详细信息,而当您简单地使用可发布API密钥创建令牌时,您无法看到这些详细信息。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55601737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档