Flutter在线支付插件razorpay_web_totalxsoftware的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter在线支付插件razorpay_web_totalxsoftware的使用

www.totalx.in

探索更多关于TotalX在www.totalx.in - 您信赖的软件开发公司!

razorpay_web_totalxsoftware 是一个用于通过Firebase Cloud Functions集成Razorpay支付的Flutter Web插件。本指南将引导您完成设置Firebase Cloud Function以创建Razorpay订单,并将其与Flutter Web应用程序集成的过程。

特性

  • 通过Firebase Cloud Functions进行安全的Razorpay支付处理。
  • 处理支付成功、失败和错误回调。
  • 支持可定制的用户配置文件和数据。

前提条件

确保您已经:

  • 拥有一个带有API凭证(Key ID和Key Secret)的Razorpay账户。
  • 启用了Cloud Functions的Firebase项目。
  • 准备好集成的Flutter Web项目。

Firebase Cloud Function设置

1. 在您的项目中初始化Firebase Functions

首先,在终端中打开命令行,导航到您的Firebase项目目录,并初始化Firebase Functions:

firebase init functions

Firebase Cloud Function设置

您需要设置Firebase Cloud Functions以安全地创建Razorpay订单。以下是一个示例函数:

import * as dayjs from "dayjs";
import * as admin from "firebase-admin";
import * as functions from "firebase-functions";
import { v4 as uuidv4 } from "uuid";
import Razorpay = require("razorpay");

// 初始化Firebase Admin SDK
admin.initializeApp();

const firestore = admin.firestore();

export const createRazorpayOrder = functions.https.onCall(
  async (data, context) => {
    try {
      const amount = data.amount;

      // 从Firestore获取Razorpay凭证
      const razorpayDoc = await firestore
        .collection("general")
        .doc("payment")
        .get();
      if (!razorpayDoc.exists) {
        throw new Error("Razorpay凭证未在Firestore中找到");
      }

      const RZP_KEY = razorpayDoc.data()?.razorpay;
      const RZP_SECRET = razorpayDoc.data()?.keysecret;

      // 创建唯一的收据
      const receipt = `rcpt_${dayjs().format(
        "YYYYMMDDHHmmss"
      )}_${uuidv4().substring(0, 8)}`;

      // 初始化Razorpay实例
      const razorpayInstance = new Razorpay({
        key_id: RZP_KEY,
        key_secret: RZP_SECRET,
      });

      // 准备订单数据
      const orderData = {
        amount: amount * 100, // 转换为派士
        currency: "INR",
        receipt: receipt,
      };

      // 创建订单
      const response = await razorpayInstance.orders.create(orderData);

      return { orderId: response.id };
    } catch (error) {
      throw new functions.https.HttpsError(
        "unknown",
        `创建订单时出错: ${error}`
      );
    }
  }
);

使用方法

以下是如何在您的Flutter应用中使用razorpay_web_totalxsoftware的示例:

final HttpsCallable callable = FirebaseFunctions.instance.httpsCallable('createRazorpayOrder');
final result = await callable.call({'amount': 100});
final orderId = result.data['orderId'];

RazorpayWebTotalxsoftware.pay(
  context,
  amount: 100,
  saveInFirebase: false,
  rzpOrderId: orderId,
  rzpKey: 'your_rzp_key',
  // itemName: , // 可选
  razorpayKeySecret: 'your_rzp_secret',
  appName: 'razorpay_web_totalxsoftware',
  userProfile: RzpUserProfile(
    uid: 'unique_user_id',
    name: 'John Doe',
    email: 'john.doe@example.com',
    phoneNumber: '1234567890',
  ),
  success: (response) {
    print('支付成功: $response');
  },
  failure: (response) {
    print('支付失败: $response');
  },
  error: (response) {
    print('支付错误: $response');
  },
);

示例代码

// import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_functions/cloud_functions.dart';
import 'package:flutter/material.dart';
import 'package:razorpay_web_totalxsoftware/razorpay_web_totalxsoftware.dart';
// import 'package:razorpay_totalxsoftware_example/firebase_options.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // Firebase.initializeApp(
  //   options: DefaultFirebaseOptions.currentPlatform,
  // );
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Razorpay Web Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const PaymentScreen(),
    );
  }
}

class PaymentScreen extends StatelessWidget {
  const PaymentScreen({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Razorpay Web Payment"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            final HttpsCallable callable =
                FirebaseFunctions.instance.httpsCallable('createRazorpayOrder');
            final result = await callable.call({'amount': 100});
            final orderId = result.data['orderId'];

            RazorpayWebTotalxsoftware.pay(
              context,
              amount: 100,
              saveInFirebase: true,
              rzpOrderId: orderId,
              rzpKey: 'your_rzp_key',
              // itemName: , // 可选
              razorpayKeySecret: 'your_rzp_secret',
              appName: 'razorpay_web_totalxsoftware',
              userProfile: RzpUserProfile(
                uid: 'unique_user_id',
                name: 'John Doe',
                email: 'john.doe@example.com',
                phoneNumber: '1234567890',
              ),
              success: (response) {
                print('支付成功: $response');
              },
              failure: (response) {
                print('支付失败: $response');
              },
              error: (response) {
                print('支付错误: $response');
              },
            );
          },
          child: const Text("Make Payment"),
        ),
      ),
    );
  }
}

更多关于Flutter在线支付插件razorpay_web_totalxsoftware的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter在线支付插件razorpay_web_totalxsoftware的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用razorpay_web_totalxsoftware插件进行在线支付的代码示例。这个插件允许你在Flutter的Web平台上集成Razorpay支付网关。

首先,确保你已经在pubspec.yaml文件中添加了依赖项:

dependencies:
  flutter:
    sdk: flutter
  razorpay_web_totalxsoftware: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你需要按照Razorpay的要求在你的Razorpay仪表盘中创建一个应用并获取API密钥。

下面是一个完整的示例代码,展示如何在Flutter应用中集成并使用Razorpay进行支付:

import 'package:flutter/material.dart';
import 'package:razorpay_web_totalxsoftware/razorpay_web_totalxsoftware.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Razorpay Payment Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PaymentScreen(),
    );
  }
}

class PaymentScreen extends StatefulWidget {
  @override
  _PaymentScreenState createState() => _PaymentScreenState();
}

class _PaymentScreenState extends State<PaymentScreen> {
  final Razorpay _razorpay = Razorpay();

  @override
  void initState() {
    super.initState();
    _razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
    _razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
    _razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET, _handleExternalWallet);
  }

  @override
  void dispose() {
    _razorpay.clear();
    super.dispose();
  }

  void _handlePaymentSuccess(PaymentSuccessResponse response) {
    print("Payment Successful: ${response.paymentId}");
    // 在这里处理支付成功后的逻辑,比如更新订单状态
  }

  void _handlePaymentError(PaymentErrorResponse response) {
    print("Payment Failed: ${response.code}, ${response.message}");
    // 在这里处理支付失败后的逻辑
  }

  void _handleExternalWallet(ExternalWalletResponse response) {
    print("External Wallet Used: ${response.walletName}");
    // 在这里处理使用外部钱包支付后的逻辑
  }

  void _openCheckout() {
    final options = {
      'key': 'YOUR_RAZORPAY_KEY', // 替换为你的Razorpay API密钥
      'amount': '1000', // 支付金额,单位为印度卢比(1000代表100印度卢比)
      'name': 'Your Merchant Name',
      'description': 'Payment Description',
      'image': 'https://your-merchant-image-url.com/image.png',
      'prefill': {
        'email': 'user@example.com',
        'contact': '1234567890',
      },
      'theme': {
        'color': '#F37254',
      },
    };

    try {
      _razorpay.open(options);
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Razorpay Payment Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _openCheckout,
          child: Text('Pay Now'),
        ),
      ),
    );
  }
}

注意事项:

  1. 替换API密钥:确保将YOUR_RAZORPAY_KEY替换为你从Razorpay仪表盘中获取的API密钥。
  2. 金额单位:金额单位为印度卢比,如果你使用其他货币,请确保正确转换。
  3. 处理支付结果:在实际应用中,你需要在_handlePaymentSuccess_handlePaymentError_handleExternalWallet方法中处理支付结果,比如更新订单状态或显示相应的UI提示。

这个示例代码提供了一个基本的框架,你可以根据实际需求进行扩展和修改。

回到顶部