Firebase 有没有办法通过Flatter和stripe创建每月订阅?
我正在为我的机构创建一个应用程序,每月订阅一次,每次订阅一次。我已经把它和firebase结合起来了。常规购买部分已经完成,但是我不知道如何处理flutter stripe中的每月订阅。在节点、C#、Go、python等的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
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'],
});
});