You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中通过Firebase Stripe扩展创建产品(客户端/云函数)

通过Flutter客户端或Cloud Functions创建Stripe产品并同步到Firestore

一、Flutter客户端实现

注意:客户端直接调用Stripe API需使用受限的Stripe API密钥(仅开放产品/价格创建权限),避免泄露完整密钥带来风险。

  1. 添加依赖
    在pubspec.yaml中引入所需包:
dependencies:
  flutter:
    sdk: flutter
  stripe_sdk: ^1.1.0
  cloud_firestore: ^4.14.0
  1. 初始化工具类
import 'package:stripe_sdk/stripe_sdk.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

final stripe = StripeApi('你的受限Stripe API密钥');
final firestore = FirebaseFirestore.instance;
  1. 产品创建与同步逻辑
Future<void> createProductAndSync({
  required String name,
  required String description,
  required int priceAmount, // 单位:分,如100代表1美元
  required String currency,
}) async {
  // 1. 在Stripe创建产品
  final productResp = await stripe.post('/v1/products', body: {
    'name': name,
    'description': description,
    'type': 'service', // 按活动类型调整,可选service/good
  });

  // 2. 创建对应价格项
  final priceResp = await stripe.post('/v1/prices', body: {
    'product': productResp['id'],
    'unit_amount': priceAmount,
    'currency': currency,
    'recurring': {'interval': 'once'}, // 活动多为一次性支付,按需修改
  });

  // 3. 同步数据到Firestore
  await firestore.collection('products').doc(productResp['id']).set({
    'stripeProductId': productResp['id'],
    'name': productResp['name'],
    'description': productResp['description'],
    'stripePriceId': priceResp['id'],
    'price': priceAmount / 100, // 转换为常规货币单位存储
    'currency': currency,
    'createdAt': Timestamp.now(),
  });
}

二、Cloud Functions实现(更安全推荐)

客户端直接调用API存在密钥泄露风险,优先用Cloud Functions做中间层,密钥仅在服务器端存储。

  1. 初始化Cloud Functions项目
    确保已安装Firebase CLI,在项目根目录执行:
firebase init functions
  1. 安装Stripe依赖
    进入functions目录:
npm install stripe
  1. 编写云函数代码
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const stripe = require("stripe")("你的Stripe秘钥");

admin.initializeApp();
const firestore = admin.firestore();

exports.createStripeProduct = functions.https.onCall(async (data, context) => {
  // 可选:验证用户权限,仅允许管理员创建产品
  if (!context.auth || !context.auth.token.admin) {
    throw new functions.https.HttpsError('permission-denied', '仅管理员可创建产品');
  }

  const { name, description, priceAmount, currency } = data;

  try {
    // 创建Stripe产品
    const product = await stripe.products.create({
      name: name,
      description: description,
      type: 'service',
    });

    // 创建价格项
    const price = await stripe.prices.create({
      product: product.id,
      unit_amount: priceAmount,
      currency: currency,
      recurring: { interval: 'once' },
    });

    // 同步到Firestore
    await firestore.collection('products').doc(product.id).set({
      stripeProductId: product.id,
      name: product.name,
      description: product.description,
      stripePriceId: price.id,
      price: priceAmount / 100,
      currency: currency,
      createdAt: admin.firestore.FieldValue.serverTimestamp(),
    });

    return { success: true, productId: product.id };
  } catch (error) {
    throw new functions.https.HttpsError('internal', error.message);
  }
});
  1. 部署云函数
firebase deploy --only functions
  1. Flutter客户端调用云函数
import 'package:cloud_functions/cloud_functions.dart';

final functions = FirebaseFunctions.instance;

Future<void> callCreateProductFunc({
  required String name,
  required String description,
  required int priceAmount,
  required String currency,
}) async {
  try {
    final result = await functions.httpsCallable('createStripeProduct').call({
      'name': name,
      'description': description,
      'priceAmount': priceAmount,
      'currency': currency,
    });
    print('产品创建成功:${result.data}');
  } catch (e) {
    print('创建失败:$e');
  }
}

注意事项

  • 安全层面:客户端方式必须用受限密钥,严格限制API权限;优先选择Cloud Functions方案,彻底避免密钥暴露。
  • 数据一致性:若Stripe创建成功但Firestore同步失败,可添加重试机制,或通过Stripe Webhook监听产品创建事件,再触发同步逻辑。
  • 字段扩展:可根据活动管理需求,在Firestore文档中添加活动时间、名额限制等自定义字段。

内容的提问来源于stack exchange,提问作者Seonaidh Morrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:10:50