<!-- 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)
问题是,他们独立工作。如果我本地托管我的网站文件夹public
(server.js
中的public/subfolder
)位于端口7878
,则提交付款按钮会成功提交带有条带测试的令牌卡信息,但随后将我重定向到file:///D:/charge
,并显示404
- 错误。
现在如果我在cmd中运行node server.js
,然后转到localhost:5000
,那么我可以使用测试卡进行充电。
我希望我的网站上的按钮生成并提交令牌(它会这样做),然后启动收费。
请随意详细说明API / HTML关系,因为我显然感到困惑。
答案 0 :(得分:1)
当您直接提供文件时,您实际上并没有运行节点服务器,因此无法运行/charge
路由。
为了实现这一点,您需要服务器端节点代码在服务器上运行 - 并且可以访问<form>
提交的HTML文件;那些东西不能在客户端运行 - 所以你需要在某个地方托管。
它不一定需要托管在与HTML相同的位置,但它确实需要从网站某处进行访问。
您可能希望查看Heroku之类的内容来托管该部分。