请任何人帮助我, 我制作了一款接受用户付款的应用程序。 我使用 Razorpay 支付网关。
这是我的付款代码:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:razorpay_flutter/razorpay_flutter.dart';
class PaymentPage extends StatefulWidget {
@override
State<PaymentPage> createState() => _PaymentPageState();
}
class _PaymentPageState extends State<PaymentPage> {
late var _razorpay;
var amountController = TextEditingController();
@override
void initState() {
_razorpay = Razorpay();
_razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
_razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
_razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET, _handleExternalWallet);
super.initState();
}
//payment succeds
void _handlePaymentSuccess(PaymentSuccessResponse response) {
// Do something when payment succeeds
print("Payment Done");
}
//payment Fail
void _handlePaymentError(PaymentFailureResponse response) {
// Do something when payment fails
print("Payment Fail");
}
void _handleExternalWallet(ExternalWalletResponse response) {
// Do something when an external wallet is selected
}
void lunchRazorPay() {
int amountToPay = int.parse(amountController.text) * 100;
///Make payment
var options = {
'key': "rzp_test_dLlOPoSwRLpQJE",
'amount': "$amountToPay",
'name': 'JMC',
'description': 'Donate',
'timeout': 300, // in seconds
'prefill': {'contact': '', 'email': ''}
};
try {
_razorpay.open(options);
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Scaffold(
//Heading Part
appBar: AppBar(
backgroundColor: Color(0xFF22E183),
//for back arrow option
leading: IconButton(
onPressed: () {
Navigator.pop(context, false);
},
icon: const Icon(
Icons.arrow_back,
color: Colors.black,
),
),
title: const Center(
child: Text(
'Donating ',
style: TextStyle(color: Colors.black, fontFamily: 'Gotham'),
),
),
elevation: 0,
),
//body part
body: Container(
height: size.height,
width: size.width,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 30),
child: TextField(
controller: amountController,
decoration:
const InputDecoration(hintText: "Enter your Amount"),
),
),
CupertinoButton(
color: Colors.grey,
child: Text("Pay Amount"),
onPressed: lunchRazorPay,
),
],
),
),
);
}
@override
void dispose() {
_razorpay.clear();
super.dispose();
}
}
的测试卡钱
我的付款页面加载并运行良好,但我的付款总是失败。 我还没有筛选接受和拒绝付款。
代码中出现密钥“key”:“rzp_test_dLlOPoSwRLpQJE”表示您目前处于 Razorpay 测试模式。该密钥以“rzp_test_”为前缀,旨在识别测试环境并防止用实际货币处理现实世界的交易。
这就是为什么包含此键会设置最大金额限制:
Razorpay 在测试模式下保持限制,以防止在开发或测试过程中意外处理大量数据。 50,000 卢比的最高限额有助于防止不必要的财务支出。 避免最大金额错误:
如前所述,有两种方法可以解决您面临的最大金额限制:
要测试支付流程,请将交易金额减少到 50,000 卢比以下。这可以让您完成测试付款而不会出现错误。
切换到实时模式(谨慎):如果需要进行大量测试,请考虑使用实时模式。请记住,由于实时模式处理具有财务影响的真实交易,因此需要高度警惕。确保您设置了一个安全的开发环境来隔离实时模式测试并避免处理未经授权的付款。