Flutter支付插件yenepay_flutter的使用

Flutter支付插件yenepay_flutter的使用

yenepay_flutter 是一个用于通过Yenepay支付网关进行支付的Flutter插件。它支持Android和iOS平台。

安装

要使用该插件,你需要在 pubspec.yaml 文件中添加 yenepay_flutter 作为依赖项。

对于Android

你需要在 android/app/src/main/AndroidManifest.xml 文件中声明以下意图过滤器:

<manifest ...>
  <!-- ... 其他标签 -->
  <!-- 提供API级别30及以上所需的可见性配置 -->
  <queries>
      <intent>
          <action android:name="android.intent.action.VIEW" />
          <data android:scheme="https" />
      </intent>
  </queries>

  <application ...>
    <activity ...>
      <!-- ... 其他标签 -->

      <!-- 深度链接以监听yenepay支付状态 -->
      <intent-filter>
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.DEFAULT" />
              <category android:name="android.intent.category.BROWSABLE" />
              <!-- 接受URI格式为YOUR_SCHEME://YOUR_HOST 的请求 -->
              <data
                  android:scheme="yenepayflutter"
                  android:host="success" />

              <data
                  android:scheme="yenepayflutter"
                  android:host="cancel" />

              <data
                  android:scheme="yenepayflutter"
                  android:host="failure" />
      </intent-filter>
    </activity>
  </application>
</manifest>

对于iOS

你需要在 ios/Runner/Info.plist 文件中添加以下URL方案条目:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>https</string>
  <string>http</string>
</array>

为了监听yenepay支付状态,你还需要在 ios/Runner/Info.plist 文件中声明方案(或者通过Xcode的目标信息编辑器,在URL类型下):

<!-- ... 其他标签 -->
<plist>
<dict>
  <!-- ... 其他标签 -->
  <key>CFBundleURLTypes</key>
  <array>
    <dict>
      <key>CFBundleTypeRole</key>
      <string>Editor</string>
      <key>CFBundleURLName</key>
      <string>[REPLACE_WITH_YOU_APP_BUNDLE_ID]</string>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>yenepayflutter</string>
      </array>
    </dict>
  </array>
  <!-- ... 其他标签 -->
</dict>
</plist>

使用

首先在应用启动时初始化 yenepay_flutter

import 'package:flutter/material.dart';
import 'package:yenepay_flutter/models/enums.dart';
import 'package:yenepay_flutter/models/yenepay_item.dart';
import 'package:yenepay_flutter/models/yenepay_parameters.dart';
import 'package:yenepay_flutter/yenepay_flutter.dart';

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  [@override](/user/override)
  void initState() {
    YenepayFlutter.init(
      onPaymentSuccess: (List<YenepayItem> items) {
        print("onPaymentSuccess ${items.length} ${items[0].itemName}");
      },
      onPaymentCancel: (List<YenepayItem> items) {
        print("onPaymentCancel ${items.length} ${items[0].itemName}");
      },
      onPaymentFailure: (List<YenepayItem> items) {
        print("onPaymentFailure ${items.length} ${items[0].itemName}");
      },
      onError: (e) {
        print("onError ${e.toString()}");
      },
    );

    // 启动支付流程
    YenepayFlutter.startPayment(
      isTestEnv: true,
      yenepayParameters: YenepayParameters(
        process: YenepayProcess.Express,
        merchantId: "SB1356",
        items: [
          YenepayItem(
            itemId: '1',
            unitPrice: 12.2,
            quantity: 2,
            itemName: 'test',
          ),
        ],
      ),
    );

    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    YenepayFlutter.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container();
  }
}

最后别忘了在应用关闭时调用 dispose 方法:

[@override](/user/override)
void dispose() {
  YenepayFlutter.dispose();
  super.dispose();
}

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

1 回复

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


yenepay_flutter 是一个用于在 Flutter 应用中集成 YenePay 支付的插件。YenePay 是一个在埃塞俄比亚广泛使用的支付网关,支持在线支付、移动支付等。通过 yenepay_flutter 插件,你可以轻松地在 Flutter 应用中集成 YenePay 支付功能。

以下是如何使用 yenepay_flutter 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 yenepay_flutter 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  yenepay_flutter: ^1.0.0  # 请检查最新版本

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

2. 初始化 YenePay

在你的 Flutter 应用中,首先需要初始化 YenePay。你可以在 main.dart 文件中进行初始化:

import 'package:yenepay_flutter/yenepay_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await YenepayFlutter.initialize(
    merchantId: 'YOUR_MERCHANT_ID',  // 你的 YenePay 商户 ID
    merchantOrderId: 'YOUR_ORDER_ID',  // 你的订单 ID
    returnUrl: 'YOUR_RETURN_URL',  // 支付成功后的返回 URL
  );
  runApp(MyApp());
}

3. 发起支付请求

在需要发起支付的地方,你可以使用 YenepayFlutter.startPayment 方法来发起支付请求:

import 'package:yenepay_flutter/yenepay_flutter.dart';

Future<void> initiatePayment() async {
  try {
    final paymentResponse = await YenepayFlutter.startPayment(
      amount: 100.0,  // 支付金额
      currency: 'ETB',  // 货币类型
      itemName: 'Sample Product',  // 商品名称
      itemId: '12345',  // 商品 ID
      successUrl: 'https://yoursuccessurl.com',  // 支付成功后的 URL
      failureUrl: 'https://yourfailureurl.com',  // 支付失败后的 URL
      ipnUrl: 'https://youripnurl.com',  // 即时支付通知 URL
    );

    // 处理支付响应
    if (paymentResponse['Status'] == 'Success') {
      print('Payment Successful');
    } else {
      print('Payment Failed');
    }
  } catch (e) {
    print('Error: $e');
  }
}

4. 处理支付结果

startPayment 方法中,你可以通过 successUrlfailureUrl 来指定支付成功或失败后的回调 URL。你可以在这些 URL 中处理支付结果,或者直接在 Flutter 应用中处理 paymentResponse

5. 处理即时支付通知 (IPN)

即时支付通知 (IPN) 是 YenePay 在支付完成后发送到你的服务器的通知。你可以在 ipnUrl 中指定接收 IPN 的 URL,然后在服务器端处理支付结果。

6. 测试支付

在开发过程中,你可以使用 YenePay 的测试环境来进行支付测试。确保在测试时使用测试商户 ID 和测试订单 ID。

7. 发布应用

在发布应用之前,确保你已经配置了正确的生产环境的商户 ID 和其他必要参数。

8. 处理错误和异常

在支付过程中,可能会遇到各种错误和异常。你可以使用 try-catch 块来捕获和处理这些错误,确保用户体验不受影响。

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 yenepay_flutter 插件:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await YenepayFlutter.initialize(
    merchantId: 'YOUR_MERCHANT_ID',
    merchantOrderId: 'YOUR_ORDER_ID',
    returnUrl: 'YOUR_RETURN_URL',
  );
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('YenePay Payment Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              initiatePayment();
            },
            child: Text('Pay with YenePay'),
          ),
        ),
      ),
    );
  }
}

Future<void> initiatePayment() async {
  try {
    final paymentResponse = await YenepayFlutter.startPayment(
      amount: 100.0,
      currency: 'ETB',
      itemName: 'Sample Product',
      itemId: '12345',
      successUrl: 'https://yoursuccessurl.com',
      failureUrl: 'https://yourfailureurl.com',
      ipnUrl: 'https://youripnurl.com',
    );

    if (paymentResponse['Status'] == 'Success') {
      print('Payment Successful');
    } else {
      print('Payment Failed');
    }
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部