javascript - 如何在 meteor 中为 Stripe 卡充值

标签 javascript jquery meteor stripe-payments

在 Meteor 中尝试充值,度过了一段愉快的时光。我得到的错误是:调用方法“chargeCard”时出现异常错误:匹配错误:预期字符串,获取对象。我确实得到了输入电子邮件和卡号的模式,但按下支付按钮后,在终端中我收到了错误消息。

如何正确调用计费函数?我找不到任何与我的实现方式非常匹配的教程。

设置非常基本。我还安装了jquery。

模板:

<template name="hello">
  <form id="myForm">
    <input type="text" id="amount" name="amount"/>
    <input type="hidden" id="stripeToken" name="stripeToken"/>
    <input type="hidden" id="stripeEmail" name="stripeEmail"/>
  </form>
  <hr>
  <button id="customButton">Pay</button>
</template>

js:

if (Meteor.isClient) {


  Template.hello.helpers({

  });

  Template.hello.events({
    'click button': function (e) {
        e.preventDefault();
        var handler = StripeCheckout.configure({
          key: 'pk_test_rand',
          token: function(token) {
            $("#stripeToken").val(token.id);
            $("#stripeEmail").val(token.email);
            $("#myForm").submit();
            Meteor.call('chargeCard', token); // this seem not right?
          }
        });

        // Showing the pop up Stripe dialog
        var amount = $("#amount").val() *100;
        // Open Checkout with further options
        handler.open({
          name: 'Demo Site',
          description: '2 widgets ($20.00)',
          amount: amount
        });


        // Close Checkout on page navigation
        $(window).on('popstate', function() {
          handler.close();
        });
      }
    });

  Meteor.startup(function(){
   $.getScript('https://checkout.stripe.com/checkout.js', function(){
    // script has loaded
   });
  });


}

if (Meteor.isServer) {
  Meteor.methods({
    'chargeCard': function(stripeToken) {
      check(stripeToken, String);
      var Stripe = StripeAPI('sk_test_rand');

      Stripe.charges.create({
        source: stripeToken,
        amount: 5000, // this is equivalent to $50
        currency: 'usd'
      }, function(err, charge) {
        console.log(err, charge);
      });
    }
  });
}

最佳答案

看来您正在传递整个 token 对象:

Meteor.call('chargeCard', token);

但是您的 chargeCard() 方法需要一个字符串:

check(stripeToken, String);

因此您需要仅传递 token id:

Meteor.call('chargeCard', token.id);

或更改您的 chargeCard() 方法以期望并使用整个 token 对象:

Meteor.methods({
    'chargeCard': function(stripeToken) {
        check(stripeToken, Object);
        var Stripe = StripeAPI('sk_test_rand');

        Stripe.charges.create({
            source: stripeToken.id,
            ...

关于javascript - 如何在 meteor 中为 Stripe 卡充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32705247/

相关文章:

javascript - IE Windows 主题、CSS 和当前样式

jquery - 点击事件之间的冲突

node.js - 怎么查 "Exception form Deps recompute"有什么线索呢?

javascript - Mixitup 过滤器消失并添加 "fail"类

javascript - 在 jQuery 中显示/隐藏子列表项

javascript - 如何在html页面中显示xml数据?

android - Meteor android 构建说 "Application not installed"

javascript - 可以使用 Node.js 通过 Google API 在 map 上进行真正的实时更新

javascript - 使用正则表达式查找字符串,并在新的周围文本中重用该字符串

javascript - jQuery ajax 发布未捕获的 RangeError : Maximum call stack size exceeded