无法弄清楚Parse Hosting - 云代码集成

时间:2015-06-06 18:13:36

标签: express parse-platform stripe-payments cloud-code

我一直在研究这个看似简单的问题大约一个星期,感觉信息存在冲突,我希望有人可以为我提供一些启示。我正在尝试将Parse Hosting用于带有bootstrap的营销网站,只需使用带有一点JS的HTML和CSS;和Cloud Code做一些简单的服务器端任务,比如通过Stripe为卡充电。文档中的所有内容都使得它看起来很容易实现,但文档似乎也让我相信某些方法不是。

例如,此视频显示了Stripe工程师正构建我想要的内容。然而,他并没有非常清楚他使用纯HTML和CSS作为前端而不是Express模板引擎(我没有使用) - http://blog.parse.com/videos/parse-developer-day-2013-a-new-kind-of-checkout/

这篇帖子说Parse Hosting和Express现在携手合作,太棒了! http://blog.parse.com/announcements/building-parse-web-apps-with-the-express-web-framework/

但文档(JS>云托管>动态网站)说您必须删除index.html>> “如果您选择使用Express或Node.js,您首先需要删除public / index.html,以便请求可以通过您的自定义处理程序函数。”

我希望在public / index.html上托管单页网站,使用Stripe Checkout v3创建令牌,然后将其传递给Parse以快速执行收费,但同样,我尝试的每一种方式都是到目前为止都没有成功。

此外,我认为纯HTML / CSS的Parse Hosting不能以我想要的方式使用Cloud Code,因为下面的/ hello简单调用不会返回任何内容。

这是我的代码:

//public
//index.html
<form action="/charge" method="POST">
  <script 
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="pk_test_zippitydoo"
    data-image="http://image.jpg"
    data-name="Thing"
    data-description="Shut up and take my money"
    data-amount="4000">
  </script>
</form>

//cloud
//main.js
var express = require('express');
var app = express();

var Stripe = require('stripe');
Stripe.initialize('sk_test_blahblahblah');

app.get('/hello', function(req, res) {
  res.send('hello world');
});

app.post('/charge', function(req, res) {
  res.send('Charge Attempt');
  token_id = req.body.stripe_token
  Stripe.Tokens.retrieve(token_id).then(function(token) {
    return Stripe.Charges.create({
      amount: 1000,
      currency: "usd",
      source: token_id
    });
  });
});

2 个答案:

答案 0 :(得分:1)

您需要的是快递服务您的HTML。为此,请注册静态资源目录。在您的main.js中,在使用var app = express()实例化您的应用后,请执行以下操作:

app.use(express.static('public'));

Express默认情况下应将您的/public/index.html文件视为目录索引,您的应用将提供/public下的任何其他文件。更多信息:http://expressjs.com/4x/api.html#express.static

答案 1 :(得分:1)

我在这里做错了几件事。我将解释我的错误,然后您可以将以下代码与上述代码进行比较,而不是问题。

1)我没有解析我收到的数据(参见//应用程序配置部分) 2)传递的JSON需要使用CamelCase进行解析(stripeToken而不是stripe_token) 3)电荷设置为变量,不返回(var =电荷而不是返回电荷)。返回可能有效,但我没有测试。 4)必须包含app.listen();为了从云文件夹连接到公用文件夹

//cloud
//main.js

var express = require('express');
var Stripe = require('stripe');
Stripe.initialize('sk_test_blahblahblah');

var app = express();

// App configuration section
app.use(express.bodyParser());    // Middleware for reading request body

app.post('/charge', function(req, res) {
  var stripeToken = req.body.stripeToken;
  var stripeEmail = req.body.stripeEmail;

  res.send('Charging your card...');

  var charge = Stripe.Charges.create({
      amount: price,
      currency: "usd",
      source: stripeToken,
      receipt_email: stripeEmail
  }, function(err, charge) {
    if (err && err.type === 'StripeCardError') {
      res.send('The card has been declined. Please check your card and try again.');
    }
  });
});

// Attach the Express app to your Cloud Code
app.listen();