DEV Community

flfljh
flfljh

Posted on

HarmonyOS Flutter Alipay Plugin (Custom Payment Integration)

HarmonyOS Flutter Alipay Plugin (Custom Payment Integration)


I. MethodChannel Implementation

1. Flutter Code Implementation

Define the MethodChannel and Handle Payment Responses

/// Flutter plugin implementation using MethodChannel for Alipay integration
class MethodChannelExamOhosUtils extends ExamOhosUtilsPlatform {
  /// Method channel for communication with the native platform
  @visibleForTesting
  final methodChannel = const MethodChannel('exam_ohos_utils');

  @override
  Future<String> getPlatformVersion() async {
    final version = await methodChannel.invokeMethod<String>('getPlatformVersion');
    return version;
  }

  @override
  Future<Map<dynamic, dynamic>> aliPayAuth(String authParams) async {
    final result = await methodChannel.invokeMethod<Map<dynamic, dynamic>>('aliPayAuth', authParams);
    return result;
  }
}
Enter fullscreen mode Exit fullscreen mode

2. OHOS Code Implementation

Integrate with Flutter Engine and Handle Alipay Payments

import { Pay } from '@cashier_alipay/cashiersdk';
import {
  FlutterPlugin,
  FlutterPluginBinding,
  MethodCall,
  MethodCallHandler,
  MethodChannel,
  MethodResult,
} from '@ohos/flutter_ohos';
import { BusinessError } from '@kit.BasicServicesKit';

/** Alipay Plugin for HarmonyOS Flutter Integration */
export default class ExamOhosUtilsPlugin implements FlutterPlugin, MethodCallHandler {
  private channel: MethodChannel | null = null;

  constructor() {}

  getUniqueClassName(): string {
    return "ExamOhosUtilsPlugin";
  }

  onAttachedToEngine(binding: FlutterPluginBinding): void {
    this.channel = new MethodChannel(binding.getBinaryMessenger(), "exam_ohos_utils");
    this.channel.setMethodCallHandler(this);
  }

  onDetachedFromEngine(binding: FlutterPluginBinding): void {
    if (this.channel != null) {
      this.channel.setMethodCallHandler(null);
    }
  }

  async onMethodCall(call: MethodCall, result: MethodResult): Promise<void> {
    try {
      if (call.method === "getPlatformVersion") {
        // Test method to return platform version
        result.success("OpenHarmony ^ ^");
      } else if (call.method === "aliPayAuth") {
        // Handle Alipay payment
        const payResult = await new Pay().pay(call.args as string, true);
        result.success(payResult);
      } else {
        result.notImplemented();
      }
    } catch (error) {
      const errorMap = new Map<string, string>();
      errorMap.set("resultCode", "-1");
      errorMap.set("errorMsg", error.message || "Payment failed");
      result.success(errorMap);
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

II. Alipay Integration Workflow

1. Initialize the Plugin

// Register the plugin in your Flutter app
final examOhosUtils = MethodChannelExamOhosUtils();
Enter fullscreen mode Exit fullscreen mode

2. Trigger Alipay Payment

// Prepare payment parameters (JSON string)
const authParams = '{"orderNo":"123456","amount":99.99}';

// Call the Alipay payment method
examOhosUtils.aliPayAuth(authParams).then((response) {
  if (response["resultCode"] == "9000") {
    print("Payment successful!");
  } else {
    print("Payment failed: ${response["errorMsg"]}");
  }
}).catchError((err) {
  print("Payment error: $err");
});
Enter fullscreen mode Exit fullscreen mode

III. Key Features

  • Seamless Integration: Uses Alipay's official SDK for secure payments.
  • Asynchronous Handling: Supports non-blocking payment flows with Futures.
  • Error Handling: Provides detailed error codes and messages for debugging.

Top comments (0)