Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在向信用卡收费之前开始无条纹试用期?_Javascript_Node.js_Reactjs_Stripe Payments - Fatal编程技术网

Javascript 如何在向信用卡收费之前开始无条纹试用期?

Javascript 如何在向信用卡收费之前开始无条纹试用期?,javascript,node.js,reactjs,stripe-payments,Javascript,Node.js,Reactjs,Stripe Payments,我试图为用户提供一个7天的免费试用期,然后再收费。 我在计划中加入了7天的试用期。但是,它会立即向用户收费 我也试着这样传递论点 const stripe = require("stripe")("sk_test_key"); if (planType === "monthly") { stripe.subscriptions.create( { customer: customer, items: [ {

我试图为用户提供一个7天的免费试用期,然后再收费。 我在计划中加入了7天的试用期。但是,它会立即向用户收费

我也试着这样传递论点

  const stripe = require("stripe")("sk_test_key");
  if (planType === "monthly") {
    stripe.subscriptions.create(
      {
        customer: customer,
        items: [
          {
            plan: "plan...."
          }
        ],
        coupon: coupon
        trial_end : 1579313395
      },
      function(err, subscription) {
        addDataToUserProfile(uid, "subscription", subscription);
      }
    );
  } else if (planType === "1year") {
    stripe.subscriptions.create(
      {
        customer: customer,
        items: [
          {
            plan: "plan......."
          }
        ],
        coupon: coupon
      },
      function(err, subscription) {
        addDataToUserProfile(uid, "subscription", subscription);
      }
    );
  } else {
    console.log("invalid plan type selected");
  }
};
这会导致付款失败。然后我在这个函数中调用它

exports.addStripeID = functions.https.onCall((data, context) => {
  const stripe = require("stripe")("sk_test_key");
  const uid = data.uid;
  const source = data.source;
  const email = data.email;
  const planType = data.planType;
  const coupon = data.coupon;
  return stripe.customers
    .create({
      source: source,
      email: email
    })
    .then(
      customer => {
        addCustomerToPlan(customer.id, uid, planType, coupon);
        addData(uid, "stripeID", customer.id);
        return { success: true };
      },
      err => {
        console.log("the error", err);
        return { error: err, message: "there was an error", success: false };
      }
    )
});
这就是我在firebase中的称呼

doAddStripeID(source, email, uid, planType, coupon) {
  console.log("do add stripe ID local function called");

  //change to this.functions
  var addData = app.functions().httpsCallable("addStripeID");

  addData({ source: source, email: email, uid: uid, planType: planType, coupon: coupon})
    .then(function (result) {
      console.log("add stripe result is ", result);
      // this.doAddDataToUser(uid, result.key, result.value)
      if (result.data.success) {
        console.log("it works");

        //this can probably be fixed with a reload instead of a interval
        setInterval(() => { window.location.assign("/payment-success") }, 3000);
      } else {
        console.log("nope");
        setInterval(() => { window.location.assign("/payment-failure") }, 3000);
      }
    })
    .catch(err => {
      console.log(err.code);
    });
}

问题是我以毫秒为单位发布了
trial\u end
参数。在将它除以1000并使用
parseInt
之后,它工作得很好。谢谢您的建议。

您已经包括了两个调用
stripe.subscriptions.create
,哪一个会导致立即收费(或同时收费)?如果您实际上通过了
试用期,并且时间戳是在将来,那么应该会导致它进行试用,而不是立即收费。您是否已在仪表板中确认这就是实际发生的情况?@HenryWoody这两个结果都会立即生效。@floatingLomas是的,我有您可能应该在支持中写入订阅ID等详细信息,等等,以便他们可以为您查看详细信息:我们是否需要创建单独的订阅。为常规和试用事务创建实例?否您可以使用现有实例。