如何在 Flutter 中使用 Razorpay 订单 API?

Posted

技术标签:

【中文标题】如何在 Flutter 中使用 Razorpay 订单 API?【英文标题】:How to use Razorpay Orders API in Flutter? 【发布时间】:2020-08-02 19:54:46 【问题描述】:

我正在我的颤振应用程序中实现支付网关。所以 Razorpay 推荐我使用 Orders API。但我没有任何方法来实现 Orders API。

我参考了以下文档。它包含 java、php 等的示例。但没有找到 Flutter / Dart 的示例。

https://razorpay.com/docs/payment-gateway/orders/integration/#example

提前致谢。

【问题讨论】:

Flutter 包有帮助吗? 【参考方案1】:

谢天谢地,Razorpay 有 Flutter 包可供您使用。以下代码 sn-p 可能会有所帮助:

import 'package:razorpay_flutter/razorpay_flutter.dart';

_razorpay = Razorpay();

var options = 
      'key': '<YOUR_KEY_ID>',
      'amount': 100, //in the smallest currency sub-unit.
      'name': 'Acme Corp.',
      'order_id': 'order_EMBFqjDHEEn80l', // Generate order_id using Orders API
      'description': 'Fine T-Shirt',
      'prefill': 
        'contact': '9123456789',
        'email': 'gaurav.kumar@example.com'
      
    ;

_razorpay.open(options);

请通过this页面了解更多详情。 this YouTube 视频也会有所帮助。

【讨论】:

是的,我已经实现了这个。但我期待“如何使用 Orders API 生成 order_id?”的答案 知道了。答案是 - 不。来自 Razorpay 的 Flutter 包不允许创建订单。您必须使用 REST API。 如何在我的 Flutter 应用中实现 Razorpay.PAYMENT_CANCELLED?我并没有真正在 Razorpay 插件页面上找到文档。 嘿,有人找到解决方案了吗?可以使用Firebase 实现吗?我也达到了@Sukhi 提供的代码,但无法理解如何使用 firebase 进一步做到这一点【参考方案2】:
final client = HttpClient();
  final request =
      await client.postUrl(Uri.parse('https://api.razorpay.com/v1/orders'));
  request.headers.set(
      HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
  String basicAuth = 'Basic ' +
      base64Encode(utf8.encode(
          '$dotenv.env['RAZORPAY_KEY']!:$dotenv.env['RAZORPAY_SECRET']!'));
  request.headers.set(HttpHeaders.authorizationHeader, basicAuth);
  request.add(utf8.encode(json.encode(orderOptions)));
  final response = await request.close();
  response.transform(utf8.decoder).listen((contents) 
    String orderId = contents.split(',')[0].split(":")[1];
    orderId = orderId.substring(1, orderId.length - 1);
    Map<String, dynamic> checkoutOptions = 
      'key': dotenv.env['RAZORPAY_KEY']!,
      'amount': total * 100,
      "currency": "INR",
      'name': 'E Drives',
      'description': 'E Bike',
      'order_id': orderId, // Generate order_id using Orders API
      'timeout': 300,
    ;
    try 
      _razorpay.open(checkoutOptions);
     catch (e) 
      log.e(e.toString());
    

您可以使用 HttpClient 并向Razorpay Orders API 发送请求。 希望这能回答您的问题。

【讨论】:

【参考方案3】:
  Future<void> generate_ODID() async 
      var orderOptions = 
        'amount': 50000,  // amount in the smallest currency unit
        'currency': "INR",
        'receipt': "order_rcptid_11"
      ;
      final client = HttpClient();
      final request =
          await client.postUrl(Uri.parse('https://api.razorpay.com/v1/orders'));
      request.headers.set(
          HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
      String basicAuth = 'Basic ' +
          base64Encode(utf8.encode(
              '$'YourKEY':$'YourSECRET''));
      request.headers.set(HttpHeaders.authorizationHeader, basicAuth);
      request.add(utf8.encode(json.encode(orderOptions)));
      final response = await request.close();
      response.transform(utf8.decoder).listen((contents) 
        print('ORDERID'+contents);
        String orderId = contents.split(',')[0].split(":")[1];
        orderId = orderId.substring(1, orderId.length - 1);
        Fluttertoast.showToast(
            msg: "ORDERID: " +orderId,
            toastLength: Toast.LENGTH_SHORT);
        Map<String, dynamic> checkoutOptions = 
          'key': 'YourKEY',
          'amount': 11100,
          'name': 'Demo',
          'description': 'Fssai Registrtion Charge',
          'prefill': 'contact': '8910407549', 'email': 'xx.xx@gmail.com',
          'external': 
            'wallets': ['paytm']
          
        ;
        try 
          _razorpay.open(checkoutOptions);
         catch (e) 
          print(e.toString());
        
    );
    

我正在使用相同的代码 sn-p 但是当我尝试使用 google pay 付款时,它会失败并显示“您的钱没有被借记,您的服务器很忙”错误,但是当我尝试提供手动 UPI Id 则交易顺利进行,否则交易未使用 UPI 完成。有没有办法解决这个问题?

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何在 Flutter 中使用 Razorpay 订单 API?的主要内容,如果未能解决你的问题,请参考以下文章

razorpay_flutter 在 PUBSPEC.YML 文件中集成它显示错误

如何在同一个inappwebview Flutter中打开弹窗?

如何在 Vue.js 中集成 razorpay

iOS 中的 use_framework 错误

如何在 codeigniter 中集成 razorpay 支付网关

当我们在 razorpay 中使用测试模式时,是不是在 php 中进行实际支付转账?