Flutter在线支付插件razorpay_web_totalxsoftware的使用
Flutter在线支付插件razorpay_web_totalxsoftware的使用
![www.totalx.in](https://totalx.in/assets/logo-k3HH3X3v.png)
探索更多关于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
更多关于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'),
),
),
);
}
}
注意事项:
- 替换API密钥:确保将
YOUR_RAZORPAY_KEY
替换为你从Razorpay仪表盘中获取的API密钥。 - 金额单位:金额单位为印度卢比,如果你使用其他货币,请确保正确转换。
- 处理支付结果:在实际应用中,你需要在
_handlePaymentSuccess
、_handlePaymentError
和_handleExternalWallet
方法中处理支付结果,比如更新订单状态或显示相应的UI提示。
这个示例代码提供了一个基本的框架,你可以根据实际需求进行扩展和修改。