diff --git a/lib/src/tobias.dart b/lib/src/tobias.dart index 5674f70..f2928ef 100644 --- a/lib/src/tobias.dart +++ b/lib/src/tobias.dart @@ -5,11 +5,18 @@ class Tobias { /// [evn] only supports Android due to native AliPaySDK /// [universalLink] only supports iOS Future pay(String order, - {AliPayEvn evn = AliPayEvn.online, String? universalLink}) async { + {AliPayEvn evn = AliPayEvn.online, + String? universalLink, + bool isOhosAutoSub = false}) async { return await TobiasPlatform.instance .pay(order, evn: evn, universalLink: universalLink); } + /// 鸿蒙 - 自动订阅支付 + Future payOhosAutoSub(String order) async { + return await TobiasPlatform.instance.payOhosAutoSub(order); + } + /// Auth by AliPay Future auth(String auth) async { return await TobiasPlatform.instance.auth(auth); diff --git a/lib/src/tobias_method_channel.dart b/lib/src/tobias_method_channel.dart index 9b39122..1bbfdc5 100644 --- a/lib/src/tobias_method_channel.dart +++ b/lib/src/tobias_method_channel.dart @@ -14,11 +14,19 @@ class MethodChannelTobias extends TobiasPlatform { /// [universalLink] only supports iOS @override Future pay(String order, - {AliPayEvn evn = AliPayEvn.online, String? universalLink}) async { + {AliPayEvn evn = AliPayEvn.online, + String? universalLink, + bool isOhosAutoSub = false}) async { return await methodChannel.invokeMethod("pay", {"order": order, "payEnv": evn.index, "universalLink": universalLink}); } + /// 鸿蒙 - 自动订阅支付 + @override + Future payOhosAutoSub(String order) async { + return await methodChannel.invokeMethod("payOhosAutoSub", {"order": order}); + } + /// Auth by AliPay @override Future auth(String auth) async { diff --git a/lib/src/tobias_platform_interface.dart b/lib/src/tobias_platform_interface.dart index e720e3e..318c239 100644 --- a/lib/src/tobias_platform_interface.dart +++ b/lib/src/tobias_platform_interface.dart @@ -29,10 +29,18 @@ abstract class TobiasPlatform extends PlatformInterface { } /// [evn] only supports Android due to native AliPaySDK - Future pay(String order, {AliPayEvn evn = AliPayEvn.online, String? universalLink}) async { + Future pay(String order, + {AliPayEvn evn = AliPayEvn.online, + String? universalLink, + bool isOhosAutoSub = false}) async { throw UnimplementedError('pay() has not been implemented.'); } + /// 鸿蒙 - 自动订阅支付 + Future payOhosAutoSub(String order) async { + throw UnimplementedError('payOhosAutoSub() has not been implemented.'); + } + Future auth(String auth) async { throw UnimplementedError('auth() has not been implemented.'); } diff --git a/ohos/src/main/ets/components/plugin/TobiasPlugin.ets b/ohos/src/main/ets/components/plugin/TobiasPlugin.ets index e2669b3..f9121e5 100644 --- a/ohos/src/main/ets/components/plugin/TobiasPlugin.ets +++ b/ohos/src/main/ets/components/plugin/TobiasPlugin.ets @@ -11,8 +11,10 @@ import { import { bundleManager, common } from '@kit.AbilityKit'; import * as alipay from "@cashier_alipay/cashiersdk" import { BusinessError } from '@kit.BasicServicesKit'; +import OpenLinkOptions from '@ohos.app.ability.OpenLinkOptions'; const MESSAGE_CHANNEL_NAME = "com.jarvanmo/tobias"; +const TAG: string = 'TobiasPlugin'; /** TobiasPlugin **/ export default class TobiasPlugin implements FlutterPlugin, MethodCallHandler, AbilityAware { @@ -49,6 +51,9 @@ export default class TobiasPlugin implements FlutterPlugin, MethodCallHandler, A case "pay": this.pay(call, result); break; + case "payOhosAutoSub": + this.payOhosAutoSub(call, result); + break; case "auth": result.notImplemented(); break; @@ -84,6 +89,31 @@ export default class TobiasPlugin implements FlutterPlugin, MethodCallHandler, A }); } + payOhosAutoSub(call: MethodCall, result: MethodResult): void { + const order: string = call.argument("order"); + let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; + let openLinkOptions: OpenLinkOptions = { + appLinkingOnly: false + }; + const resp: Map = new Map(); + try { + context.openLink(order, openLinkOptions) + .then(() => { + console.log(TAG, 'open link success.'); + resp.set("resultStatus", "success"); + result.success(resp) + }).catch((err: BusinessError) => { + console.log(TAG, `open link failed. Code is ${err.code}, message is ${err.message}`); + resp.set("resultStatus", "erroe"); + result.success(resp) + }) + } catch (paramError) { + console.log(TAG, `Failed to start link. Code is ${paramError.code}, message is ${paramError.message}`); + resp.set("resultStatus", "erroe"); + result.success(resp) + } + } + isAliPayInstalled(result: MethodResult): void { result.success(bundleManager.canOpenLink("alipays://")) }