Flutter支付集成插件my2c2psdk的使用

My2c2pSDK for Flutter

Getting Started

Add this to your package’s pubspec.yaml file:

dependencies:
  my2c2psdk: ^0.0.6

System Requirements

The SDK has been developed using Dart version >=2.12.0, iOS Deployment Target 12.0, and Android Version 6 (API Level 23). To ensure you can actually compile the SDK smoothly, we recommend to use the developed versions. However, if needed, you can convert to your preferred version.

Platform Minimum Version
iOS 12.0
Android 6 (API Level 23)

Usage

Import the library in your file:

import 'package:my2c2psdk/my2c2psdk.dart';

Use the My2c2pSDK with your information like this:

final sdk = My2c2pSDK(
  privateKey: 'Your private key',
);
sdk.merchantId = "JT01";
sdk.uniqueTransactionCode = "123456789";
sdk.desc = "product item 1";
sdk.amount = 20.00;
sdk.currencyCode = "764";
sdk.pan = "5105105105105100";
sdk.cardExpireMonth = 12;
sdk.cardExpireYear = 2024;
sdk.cardHolderName = "John";
sdk.panCountry = "TH";
sdk.secretKey = "123456";
sdk.paymentUI = false;

// Set optional fields
sdk.securityCode = "123";

final result = await sdk.proceed();

result should be a response from My2c2pSDK in JSON format that can be parsed to My2c2pSDKResponse class.

For more samples and information, please see iOS documentation, Android documentation.

Proguard for Android

Please add the following config into your proguard config file.

# Optional for proguard, you may use your own proguard configuration.
-dontusemixedcaseclassnames
-dontpreverify
-optimizationpasses 5
-keepparameternames
-renamesourcefileattribute SourceFile

# Mandatory for PGW SDK
# 2C2P PGW Library
-dontwarn com.ccpp.my2c2psdk.**
-keep class com.ccpp.my2c2psdk.** { *; }
-keep interface com.ccpp.my2c2psdk.** { *; }

-keepclassmembers class **.R$* {
    public static <fields>;
}

# okhttp3
-dontwarn okio.**
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-keepclassmembers class * extends javax.net.ssl.SSLSocketFactory {
    private final javax.net.ssl.SSLSocketFactory delegate;
}
-dontwarn javax.annotation.**
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-dontwarn org.codehaus.mojo.animal_sniffer.*
-dontwarn okhttp3.internal.platform.ConscryptPlatform

# Samsung Pay
-dontwarn com.samsung.**
-keep class com.samsung.** { *; }

# Spongy Castle
-dontwarn org.spongycastle.**
-keep class org.spongycastle.** { *; }

# AliPay
-dontwarn com.alipay.**
-dontwarn org.json.alipay.**
-keep class com.alipay.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep class com.alipay.sdk.app.H5PayCallback {
    <fields>;
    <methods>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}
-dontwarn com.ta.utdid2.**
-dontwarn com.ut.device.**
-dontwarn com.alipay.mobilesecuritysdk.**
-dontwarn com.alipay.security.**

For more information, click here.

App Scheme Declaration for iOS (OPTIONAL)

Note: Scheme required for 123 payment: eNETS (Direct Debit/Web Payment)

If you want to use eNETS, please add the scheme as follows:

  • Go to Target > Select Product > Info > URL Types
  • Add my2c2p[your merchant ID] in URL Schemes. If your merchant ID is JT01, it will be like following.

URL Scheme

If the user wants to make payment via Bank (Direct Debit), it will open Safari instead of an in-app webview. Without a scheme, Safari cannot reopen the app after finishing payment.

Note: Scheme required for Alipay

If you want to use Alipay, please add the scheme as follows:

  • Go to Target > Select Product > Info > URL Types
  • Add my2c2pAlipay in URL Schemes. It will be like following.

Alipay Scheme

For more information, click here.

Contributing

2C2P

License

MIT


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

1 回复

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


当然,下面是一个关于如何在Flutter应用中集成并使用my2c2psdk支付插件的示例代码。这个示例假定你已经有一个Flutter项目,并且已经添加了my2c2psdk依赖。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加my2c2psdk的依赖(注意:这里my2c2psdk是一个假设的插件名,你需要替换为实际的插件名或者URL,如果它是一个私有的或者未发布的插件):

dependencies:
  flutter:
    sdk: flutter
  my2c2psdk: ^x.y.z  # 替换为实际的版本号

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

2. 配置Android和iOS

确保你已经按照my2c2psdk文档中的说明配置了Android和iOS平台的支付相关设置。这通常涉及在AndroidManifest.xml中添加权限和配置,以及在iOS的Info.plist中添加必要的配置。

3. 使用插件进行支付

在你的Flutter应用中,你可以这样使用my2c2psdk进行支付:

import 'package:flutter/material.dart';
import 'package:my2c2psdk/my2c2psdk.dart';  // 假设这是插件的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Payment Integration'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _initiatePayment,
            child: Text('Pay Now'),
          ),
        ),
      ),
    );
  }

  Future<void> _initiatePayment() async {
    try {
      // 假设这是插件提供的初始化方法
      await My2c2pSdk.initialize(
        apiKey: 'your_api_key',  // 替换为你的API密钥
        environment: 'sandbox',  // 或者 'production'
      );

      // 创建一个支付请求
      var paymentRequest = PaymentRequest(
        amount: '100.00',
        currency: 'USD',
        description: 'Test Payment',
        // 其他必要的支付参数
      );

      // 发起支付
      var paymentResponse = await My2c2pSdk.startPayment(paymentRequest);

      // 处理支付响应
      if (paymentResponse.status == 'success') {
        print('Payment Successful: ${paymentResponse.transactionId}');
        // 显示支付成功信息或者执行其他逻辑
      } else {
        print('Payment Failed: ${paymentResponse.errorMessage}');
        // 显示支付失败信息或者执行其他逻辑
      }
    } catch (e) {
      print('Error initiating payment: $e');
      // 显示错误信息或者执行其他逻辑
    }
  }
}

// 假设的PaymentRequest和PaymentResponse类定义(根据实际插件的API调整)
class PaymentRequest {
  final String amount;
  final String currency;
  final String description;
  // 其他字段...

  PaymentRequest({
    required this.amount,
    required this.currency,
    required this.description,
    // 其他参数...
  });
}

class PaymentResponse {
  final String status;
  final String transactionId;
  final String errorMessage;
  // 其他字段...

  PaymentResponse({
    required this.status,
    required this.transactionId,
    required this.errorMessage,
    // 其他参数...
  });
}

注意

  1. 插件API:上面的代码示例是基于假设的插件API。实际的my2c2psdk插件可能有不同的初始化方法、支付请求参数和响应结构。因此,你需要参考该插件的官方文档来调整代码。

  2. 错误处理:在实际应用中,你应该添加更详细的错误处理逻辑,以处理各种可能的异常情况,例如网络错误、用户取消支付等。

  3. 安全性:确保你的API密钥和其他敏感信息不会硬编码在客户端代码中,并且遵循最佳的安全实践来保护这些敏感信息。

  4. UI/UX:根据实际需要调整UI/UX设计,以提供更好的用户体验。

  5. 测试:在将支付功能发布到生产环境之前,务必在沙箱环境中进行充分的测试。

回到顶部