Firebase 有没有办法通过Flatter和stripe创建每月订阅?

Firebase 有没有办法通过Flatter和stripe创建每月订阅?,firebase,flutter,stripe-payments,e-commerce,Firebase,Flutter,Stripe Payments,E Commerce,我正在为我的机构创建一个应用程序,每月订阅一次,每次订阅一次。我已经把它和firebase结合起来了。常规购买部分已经完成,但是我不知道如何处理flutter stripe中的每月订阅。在节点、C#、Go、python等的stripe文档中已经有代码可用;老实说,我不理解这些代码。这就是为什么我想知道,无论如何,有通过颤振条纹二重唱定期付款。如果有,请告诉我。以下是一次性购买的代码: import 'package:cloud_firestore/cloud_firestore.dart'; i

我正在为我的机构创建一个应用程序,每月订阅一次,每次订阅一次。我已经把它和firebase结合起来了。常规购买部分已经完成,但是我不知道如何处理flutter stripe中的每月订阅。在节点、C#、Go、python等的stripe文档中已经有代码可用;老实说,我不理解这些代码。这就是为什么我想知道,无论如何,有通过颤振条纹二重唱定期付款。如果有,请告诉我。以下是一次性购买的代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:stripe_payment/stripe_payment.dart';
import 'package:cloud_functions/cloud_functions.dart';

class StripeService{
  final HttpsCallable intent = FirebaseFunctions.instance.httpsCallable('createPaymentIntent');
  User user;
  DocumentReference userDocReference;

  StripePayments(this.user) {
    user != null ? userDocReference = FirebaseFirestore.instance.collection("User").doc(user.uid)
    : user = FirebaseAuth.instance.currentUser;
    userDocReference = FirebaseFirestore.instance.collection("User").doc(user.uid);
  }

  startPaymentProcess(double amount) {
    StripePayment.paymentRequestWithCardForm(CardFormPaymentRequest()).then((paymentMethod) {
      amount *= 100.0; // multipliying with 100 to change $ to cents
      intent.call(<String, dynamic>{'amount': amount, 'currency': 'usd'}).then(
          (response) {
            _cnfrmPayment(response.data["client_secret"],
            paymentMethod); //function for confirmation for payment
      });
    });
  }

  _cnfrmPayment(String clientSecret, PaymentMethod paymentMethod, context) {
    StripePayment.confirmPaymentIntent(PaymentIntent(
      clientSecret: clientSecret,
      paymentMethodId: paymentMethod.id,
   )
  ).then((intentResult) {
      userDocReference.set({
        "status": intentResult.status,
        "paymentMethodId": intentResult.paymentMethodId,
        "paymentIntentId": intentResult.paymentIntentId
      });
      Scaffold.of(context).showSnackBar(
        SnackBar(
          content: Text("Payment done successfully")
        )
      );
    });
  }

  confirmDialog(String clientSecret, PaymentMethod paymentMethod, context) {
    var confirm = AlertDialog(
      title: Text("Confirm Payement"),
      content: Container(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text(
              "Make Payment",
              style: TextStyle(fontSize: 25),
            ),
            Text("Charge amount:\$100")
          ],
        ),
      ),
      actions: <Widget>[
        RaisedButton(
          child: Text('CANCEL'),
          onPressed: () {
            Navigator.of(context).pop();
            final snackBar = SnackBar(
              content: Text('Payment Cancelled'),
            );
            Scaffold.of(context).showSnackBar(snackBar);
          },
        ),
        RaisedButton(
          child: new Text('Confirm'),
          onPressed: () {
            Navigator.of(context).pop();
            _cnfrmPayment(
            clientSecret, paymentMethod); // function to confirm Payment
          },
        ),
      ],
    );
    showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return confirm;
        }
     );
  }
}

订阅需要使用您的密钥通过后端调用创建,因此您可以在设置中使用Firebase进行该调用。在@taintedzodiac有一个(非颤振)工作示例,谢谢mate@taintedzodiac扩展要求您在firebase中执行火焰计划
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

const firestore = admin.firestore();
const settings = { timestampInSnapshots: true };
firestore.settings(settings)
const stripe = require('stripe')('MY_STRIPE_SECRET_KEY');
exports.createPaymentIntent = functions.https.onCall((data, context) => {
    return stripe.paymentIntents.create({
        amount: data.amount,
        currency: data.currency,
        payment_method_types: ['card'],
    });
});