【问题标题】:Stripe - Submit token/create charge through 1 HTML-button?Stripe - 通过 1 个 HTML 按钮提交令牌/创建费用?
【发布时间】:2018-03-22 08:49:41
【问题描述】:
                    <!-- Stripeform -->
                    <form action="/charge" method="post" id="payment-form">
                        <div class="form-row">
                            <label for="card-element">
                            Credit or debit card
                            </label>
                            <div id="card-element">
                            <!-- a Stripe Element will be inserted here. -->
                            </div>

                            <!-- Used to display form errors -->
                            <div id="card-errors" role="alert"></div>
                        </div>

                        <button>Submit Payment</button>
                    </form>

这个 HTML 代码,连同我的controller.js 能够向Stripe 提交一个令牌。我还有一个server.js,写在Node.js,成功地向Stripe收费:

// Get our dependencies
var stripe = require("stripe")("sk_test_111111111111111111111111");
var express = require('express'), bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false })
var app = express();
var jwt = require('express-jwt');
var rsaValidation = require('auth0-api-jwt-rsa-validation');

//Implement charge endpoint 
app.get('/', function(req, res) {
// for kicks, just sending checkout
res.send('<form action="/charge" method="POST">Buy it !<script 
src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-
key="pk_test_111111111111111111111"></script></form>')
});

app.post('/charge',urlencodedParser, function(req, res) {

//grab a token
var token = req.body.stripeToken;

//Creating a charge
stripe.charges.create({
amount: 2000,
currency: "usd",
source: token, // obtained with Stripe.js
description: "Charge"
}, function(err, charge) {
    res.send("You made a charge: "+ charge.id);
});
}); 

app.listen(5000)

问题是,它们独立工作。如果我在端口7878 本地主机我的网站文件夹public(也有位于public/subfolder 中的server.js),则提交付款按钮成功提交带有条纹测试卡信息的令牌,但随后将我重定向到file:///D:/charge,带有404-错误。

现在,如果我在 cmd 中运行node server.js,然后转到localhost:5000,那么我可以使用测试卡进行收费。
我希望 我的网站上的按钮 生成并提交令牌(确实如此),并启动收费。

随意详细说明 API/HTML 关系,因为我显然很困惑。

【问题讨论】:

    标签: javascript html node.js api stripe-payments


    【解决方案1】:

    当您直接提供文件时,实际上并没有运行 Node 服务器,因此/charge 路由无法运行。

    为了使其工作,您需要在服务器上运行服务器端节点代码 - 并且可以访问 HTML 文件以进行&lt;form&gt; 提交;那些东西不能在客户端运行——所以你需要把它托管在某个地方。

    它不一定需要托管在与 HTML 相同的位置,但它确实需要可从网络某处访问。

    您可能希望查看 Heroku 之类的内容来托管该部分。

    【讨论】:

    • 谢谢,这很有帮助。但是,我尝试在 firebase 上部署所有内容,并从那里在线托管,但仍然出现 404。托管节点服务器是否与托管网站的其余部分不同?我是否刚刚上传了文件,但实际上没有“运行”? Firebase 免费计划或平台本身是否阻碍了我?再次感谢
    • 您可以为此使用 Firebase 的 Cloud Functions,但它们的工作方式与“常规 Node Express 应用程序”不同:firebase.google.com/docs/functions
    • 我将研究 Cloud Functions。如果我想使用常规的 Node Express 应用程序并将其托管在 Heroku 之类的地方,我还必须将前端托管在 Firebase 以外的其他地方,对吗?您有个人建议哪种设置最适合初创企业?
    猜你喜欢
    • 2018-11-20
    • 2019-08-03
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2011-12-13
    • 2017-09-28
    相关资源
    最近更新 更多