首页 > 解决方案 > 无法取消 UPI 付款 Razorpay Flutter

问题描述

我正在使用razorpay_flutter来集成付款,我的问题是,如果我选择 UPI 作为付款选项,并且在处理付款时,如果我取消付款,它仍然会进入 PaymentSuccessResponse。根据 razorpay 的文档,如果通过用户方式取消支付,它应该进入 PaymentFailureResponse。

这是我的代码:

class CheckRazor extends StatefulWidget {

  const CheckRazor({Key key}) : super(key: key);
  @override
  _CheckRazorState createState() => _CheckRazorState();
}

class _CheckRazorState extends State<CheckRazor> {
 
  Razorpay _razorpay = Razorpay();
  var options;

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

    _razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
    _razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
    _razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET, _handleExternalWallet);
  }

  void _handlePaymentSuccess(PaymentSuccessResponse response) async {
    print(response);
    var message = response.paymentId;
    Navigator.pushReplacementNamed(context, Routes.PaymentSuccess,
        arguments: widget.details);
    _razorpay.clear();
  }

  void _handlePaymentError(PaymentFailureResponse response) {
    var message = response.message;
    Map res = json.decode(message);
    Map reason = res["error"];
    String finalReason = reason["reason"];
    if(finalReason == "payment_cancelled") {
      Navigator.of(context).pop(context);
      _razorpay.clear();
    }
    else if(finalReason == "payment_failed") {
      Navigator.pushReplacementNamed(context, Routes.PaymentFailure,
          arguments: response);
      _razorpay.clear();
    }
  }

  void _handleExternalWallet(ExternalWalletResponse response) {
    _razorpay.clear();
  }

  @override
  void initState() {
    super.initState();
  
    options = {
      'key':
         // "rzp_test_11111111111", // Enter the Live Key ID generated from the Dashboard
          "rzp_test_OCp8bDk51p2f96",
      'amount': 100,
      'name': 'Test',
      'currency': "INR",
      'description': 'Fees',
      'prefill': {
        'contact': 8888888888,
        'email': test@email.com,
      },
      'external': {
        'wallets': ['paytm']
      }
    };
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
          future: payData(),
          builder: (context, snapshot) {
            return Container(
              child: Center(
                child: Text(
                  "Loading...",
                  style: TextStyle(
                    fontSize: 20,
                  ),
                ),
              ),
            );
          }),
    );
  }
}

标签: flutterdart

解决方案


推荐阅读