diff --git a/android/src/main/java/io/github/v7lin/wechat_kit/WechatKitPlugin.java b/android/src/main/java/io/github/v7lin/wechat_kit/WechatKitPlugin.java index f1397fb..dd14d6d 100644 --- a/android/src/main/java/io/github/v7lin/wechat_kit/WechatKitPlugin.java +++ b/android/src/main/java/io/github/v7lin/wechat_kit/WechatKitPlugin.java @@ -9,7 +9,6 @@ import android.content.pm.ProviderInfo; import android.net.Uri; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.core.content.FileProvider; import com.tencent.mm.opensdk.constants.Build; diff --git a/lib/src/model/qrauth.dart b/lib/src/model/qrauth.dart new file mode 100755 index 0000000..230bf5f --- /dev/null +++ b/lib/src/model/qrauth.dart @@ -0,0 +1,92 @@ +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:json_annotation/json_annotation.dart'; + +part 'qrauth.g.dart'; + +abstract class QrauthResp { + const QrauthResp(); + + Map toJson(); + + @override + String toString() => const JsonEncoder.withIndent(' ').convert(toJson()); +} + +@JsonSerializable( + explicitToJson: true, +) +class GotQrcodeResp extends QrauthResp { + const GotQrcodeResp({ + required this.imageData, + }) : super(); + + factory GotQrcodeResp.fromJson(Map json) => + _$GotQrcodeRespFromJson(json); + + @JsonKey(fromJson: _byteArrayFromJson) + final Uint8List imageData; + + @override + Map toJson() => _$GotQrcodeRespToJson(this); + + static Uint8List _byteArrayFromJson(Object? json) { + return json! as Uint8List; + } +} + +@JsonSerializable( + explicitToJson: true, +) +class QrcodeScannedResp extends QrauthResp { + const QrcodeScannedResp(); + + factory QrcodeScannedResp.fromJson(Map json) => + _$QrcodeScannedRespFromJson(json); + + @override + Map toJson() => _$QrcodeScannedRespToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class FinishResp extends QrauthResp { + const FinishResp({ + required this.errorCode, + this.authCode, + }) : super(); + + factory FinishResp.fromJson(Map json) => + _$FinishRespFromJson(json); + + /// Auth成功 + static const int ERRORCODE_OK = 0; + + /// 普通错误 + static const int ERRORCODE_NORMAL = -1; + + /// 网络错误 + static const int ERRORCODE_NETWORK = -2; + + /// 获取二维码失败 + static const int ERRORCODE_GETQRCODEFAILED = -3; + + /// 用户取消授权 + static const int ERRORCODE_CANCEL = -4; + + /// 超时 + static const int ERRORCODE_TIMEOUT = -5; + + @JsonKey(defaultValue: ERRORCODE_OK) + final int errorCode; + final String? authCode; + + bool get isSuccessful => errorCode == ERRORCODE_OK; + + bool get isCancelled => errorCode == ERRORCODE_CANCEL; + + @override + Map toJson() => _$FinishRespToJson(this); +} diff --git a/lib/src/model/qrauth.g.dart b/lib/src/model/qrauth.g.dart new file mode 100644 index 0000000..091bd0b --- /dev/null +++ b/lib/src/model/qrauth.g.dart @@ -0,0 +1,38 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'qrauth.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +GotQrcodeResp _$GotQrcodeRespFromJson(Map json) { + return GotQrcodeResp( + imageData: GotQrcodeResp._byteArrayFromJson(json['imageData']), + ); +} + +Map _$GotQrcodeRespToJson(GotQrcodeResp instance) => + { + 'imageData': instance.imageData, + }; + +QrcodeScannedResp _$QrcodeScannedRespFromJson(Map json) { + return QrcodeScannedResp(); +} + +Map _$QrcodeScannedRespToJson(QrcodeScannedResp instance) => + {}; + +FinishResp _$FinishRespFromJson(Map json) { + return FinishResp( + errorCode: json['errorCode'] as int? ?? 0, + authCode: json['authCode'] as String?, + ); +} + +Map _$FinishRespToJson(FinishResp instance) => + { + 'errorCode': instance.errorCode, + 'authCode': instance.authCode, + }; diff --git a/lib/src/model/qrauth/qrauth_resp.dart b/lib/src/model/qrauth/qrauth_resp.dart deleted file mode 100755 index 5305bcd..0000000 --- a/lib/src/model/qrauth/qrauth_resp.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'dart:convert'; - -import 'package:json_annotation/json_annotation.dart'; - -part 'qrauth_resp.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class QrauthResp { - const QrauthResp({ - required this.errorCode, - this.authCode, - }); - - factory QrauthResp.fromJson(Map json) => - _$QrauthRespFromJson(json); - - /// Auth成功 - static const int ERRORCODE_OK = 0; - - /// 普通错误 - static const int ERRORCODE_NORMAL = -1; - - /// 网络错误 - static const int ERRORCODE_NETWORK = -2; - - /// 获取二维码失败 - static const int ERRORCODE_GETQRCODEFAILED = -3; - - /// 用户取消授权 - static const int ERRORCODE_CANCEL = -4; - - /// 超时 - static const int ERRORCODE_TIMEOUT = -5; - - @JsonKey(defaultValue: ERRORCODE_OK) - final int errorCode; - final String? authCode; - - bool get isSuccessful => errorCode == ERRORCODE_OK; - - bool get isCancelled => errorCode == ERRORCODE_CANCEL; - - Map toJson() => _$QrauthRespToJson(this); - - @override - String toString() => const JsonEncoder.withIndent(' ').convert(toJson()); -} diff --git a/lib/src/model/qrauth/qrauth_resp.g.dart b/lib/src/model/qrauth/qrauth_resp.g.dart deleted file mode 100644 index 93c0b3a..0000000 --- a/lib/src/model/qrauth/qrauth_resp.g.dart +++ /dev/null @@ -1,20 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'qrauth_resp.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -QrauthResp _$QrauthRespFromJson(Map json) { - return QrauthResp( - errorCode: json['errorCode'] as int? ?? 0, - authCode: json['authCode'] as String?, - ); -} - -Map _$QrauthRespToJson(QrauthResp instance) => - { - 'errorCode': instance.errorCode, - 'authCode': instance.authCode, - }; diff --git a/lib/src/model/req.dart b/lib/src/model/req.dart new file mode 100644 index 0000000..1b5ed00 --- /dev/null +++ b/lib/src/model/req.dart @@ -0,0 +1,66 @@ +import 'dart:convert'; + +import 'package:json_annotation/json_annotation.dart'; + +part 'req.g.dart'; + +abstract class BaseReq { + const BaseReq({ + required this.openId, + }); + + final String openId; + + Map toJson(); + + @override + String toString() => const JsonEncoder.withIndent(' ').convert(toJson()); +} + +@JsonSerializable( + explicitToJson: true, +) +class LaunchFromWXReq extends BaseReq { + const LaunchFromWXReq({ + required String openId, + this.messageAction, + this.messageExt, + required this.lang, + required this.country, + }) : super(openId: openId); + + factory LaunchFromWXReq.fromJson(Map json) => + _$LaunchFromWXReqFromJson(json); + + final String? messageAction; + final String? messageExt; + final String lang; + final String country; + + @override + Map toJson() => _$LaunchFromWXReqToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class ShowMessageFromWXReq extends BaseReq { + const ShowMessageFromWXReq({ + required String openId, + this.messageAction, + this.messageExt, + required this.lang, + required this.country, + }) : super(openId: openId); + + factory ShowMessageFromWXReq.fromJson(Map json) => + _$ShowMessageFromWXReqFromJson(json); + + final String? messageAction; + final String? messageExt; + final String lang; + final String country; + + @override + Map toJson() => _$ShowMessageFromWXReqToJson(this); +} diff --git a/lib/src/model/req.g.dart b/lib/src/model/req.g.dart new file mode 100644 index 0000000..3fd8bb6 --- /dev/null +++ b/lib/src/model/req.g.dart @@ -0,0 +1,46 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'req.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +LaunchFromWXReq _$LaunchFromWXReqFromJson(Map json) { + return LaunchFromWXReq( + openId: json['openId'] as String, + messageAction: json['messageAction'] as String?, + messageExt: json['messageExt'] as String?, + lang: json['lang'] as String, + country: json['country'] as String, + ); +} + +Map _$LaunchFromWXReqToJson(LaunchFromWXReq instance) => + { + 'openId': instance.openId, + 'messageAction': instance.messageAction, + 'messageExt': instance.messageExt, + 'lang': instance.lang, + 'country': instance.country, + }; + +ShowMessageFromWXReq _$ShowMessageFromWXReqFromJson(Map json) { + return ShowMessageFromWXReq( + openId: json['openId'] as String, + messageAction: json['messageAction'] as String?, + messageExt: json['messageExt'] as String?, + lang: json['lang'] as String, + country: json['country'] as String, + ); +} + +Map _$ShowMessageFromWXReqToJson( + ShowMessageFromWXReq instance) => + { + 'openId': instance.openId, + 'messageAction': instance.messageAction, + 'messageExt': instance.messageExt, + 'lang': instance.lang, + 'country': instance.country, + }; diff --git a/lib/src/model/resp.dart b/lib/src/model/resp.dart new file mode 100755 index 0000000..1a686b2 --- /dev/null +++ b/lib/src/model/resp.dart @@ -0,0 +1,205 @@ +import 'dart:convert'; + +import 'package:json_annotation/json_annotation.dart'; + +part 'resp.g.dart'; + +abstract class BaseResp { + const BaseResp({ + required this.errorCode, + this.errorMsg, + }); + + /// 成功 + static const int ERRORCODE_SUCCESS = 0; + + /// 普通错误类型 + static const int ERRORCODE_COMMON = -1; + + /// 用户点击取消并返回 + static const int ERRORCODE_USERCANCEL = -2; + + /// 发送失败 + static const int ERRORCODE_SENTFAIL = -3; + + /// 授权失败 + static const int ERRORCODE_AUTHDENY = -4; + + /// 微信不支持 + static const int ERRORCODE_UNSUPPORT = -5; + + /// 错误码 + @JsonKey(defaultValue: ERRORCODE_SUCCESS) + final int errorCode; + + /// 错误提示字符串 + final String? errorMsg; + + bool get isSuccessful => errorCode == ERRORCODE_SUCCESS; + + bool get isCancelled => errorCode == ERRORCODE_USERCANCEL; + + Map toJson(); + + @override + String toString() => const JsonEncoder.withIndent(' ').convert(toJson()); +} + +@JsonSerializable( + explicitToJson: true, +) +class AuthResp extends BaseResp { + const AuthResp({ + required int errorCode, + String? errorMsg, + this.code, + this.state, + this.lang, + this.country, + }) : super( + errorCode: errorCode, + errorMsg: errorMsg, + ); + + factory AuthResp.fromJson(Map json) => + _$AuthRespFromJson(json); + + final String? code; + final String? state; + final String? lang; + final String? country; + + @override + Map toJson() => _$AuthRespToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class OpenUrlResp extends BaseResp { + const OpenUrlResp({ + required int errorCode, + String? errorMsg, + }) : super( + errorCode: errorCode, + errorMsg: errorMsg, + ); + + factory OpenUrlResp.fromJson(Map json) => + _$OpenUrlRespFromJson(json); + + @override + Map toJson() => _$OpenUrlRespToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class ShareMsgResp extends BaseResp { + const ShareMsgResp({ + required int errorCode, + String? errorMsg, + }) : super( + errorCode: errorCode, + errorMsg: errorMsg, + ); + + factory ShareMsgResp.fromJson(Map json) => + _$ShareMsgRespFromJson(json); + + @override + Map toJson() => _$ShareMsgRespToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class SubscribeMsgResp extends BaseResp { + const SubscribeMsgResp({ + required int errorCode, + String? errorMsg, + this.templateId, + this.scene, + this.action, + this.reserved, + this.openId, + }) : super( + errorCode: errorCode, + errorMsg: errorMsg, + ); + + factory SubscribeMsgResp.fromJson(Map json) => + _$SubscribeMsgRespFromJson(json); + + final String? templateId; + final int? scene; + final String? action; + final String? reserved; + final String? openId; + + @override + Map toJson() => _$SubscribeMsgRespToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class LaunchMiniProgramResp extends BaseResp { + const LaunchMiniProgramResp({ + required int errorCode, + String? errorMsg, + this.extMsg, + }) : super( + errorCode: errorCode, + errorMsg: errorMsg, + ); + + factory LaunchMiniProgramResp.fromJson(Map json) => + _$LaunchMiniProgramRespFromJson(json); + + final String? extMsg; + + @override + Map toJson() => _$LaunchMiniProgramRespToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class OpenCustomerServiceChatResp extends BaseResp { + const OpenCustomerServiceChatResp({ + required int errorCode, + String? errorMsg, + }) : super( + errorCode: errorCode, + errorMsg: errorMsg, + ); + + factory OpenCustomerServiceChatResp.fromJson(Map json) => + _$OpenCustomerServiceChatRespFromJson(json); + + @override + Map toJson() => _$OpenCustomerServiceChatRespToJson(this); +} + +@JsonSerializable( + explicitToJson: true, +) +class PayResp extends BaseResp { + const PayResp({ + required int errorCode, + String? errorMsg, + this.returnKey, + }) : super( + errorCode: errorCode, + errorMsg: errorMsg, + ); + + factory PayResp.fromJson(Map json) => + _$PayRespFromJson(json); + + final String? returnKey; + + @override + Map toJson() => _$PayRespToJson(this); +} diff --git a/lib/src/model/resp.g.dart b/lib/src/model/resp.g.dart new file mode 100644 index 0000000..fa40656 --- /dev/null +++ b/lib/src/model/resp.g.dart @@ -0,0 +1,122 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'resp.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +AuthResp _$AuthRespFromJson(Map json) { + return AuthResp( + errorCode: json['errorCode'] as int? ?? 0, + errorMsg: json['errorMsg'] as String?, + code: json['code'] as String?, + state: json['state'] as String?, + lang: json['lang'] as String?, + country: json['country'] as String?, + ); +} + +Map _$AuthRespToJson(AuthResp instance) => { + 'errorCode': instance.errorCode, + 'errorMsg': instance.errorMsg, + 'code': instance.code, + 'state': instance.state, + 'lang': instance.lang, + 'country': instance.country, + }; + +OpenUrlResp _$OpenUrlRespFromJson(Map json) { + return OpenUrlResp( + errorCode: json['errorCode'] as int? ?? 0, + errorMsg: json['errorMsg'] as String?, + ); +} + +Map _$OpenUrlRespToJson(OpenUrlResp instance) => + { + 'errorCode': instance.errorCode, + 'errorMsg': instance.errorMsg, + }; + +ShareMsgResp _$ShareMsgRespFromJson(Map json) { + return ShareMsgResp( + errorCode: json['errorCode'] as int? ?? 0, + errorMsg: json['errorMsg'] as String?, + ); +} + +Map _$ShareMsgRespToJson(ShareMsgResp instance) => + { + 'errorCode': instance.errorCode, + 'errorMsg': instance.errorMsg, + }; + +SubscribeMsgResp _$SubscribeMsgRespFromJson(Map json) { + return SubscribeMsgResp( + errorCode: json['errorCode'] as int? ?? 0, + errorMsg: json['errorMsg'] as String?, + templateId: json['templateId'] as String?, + scene: json['scene'] as int?, + action: json['action'] as String?, + reserved: json['reserved'] as String?, + openId: json['openId'] as String?, + ); +} + +Map _$SubscribeMsgRespToJson(SubscribeMsgResp instance) => + { + 'errorCode': instance.errorCode, + 'errorMsg': instance.errorMsg, + 'templateId': instance.templateId, + 'scene': instance.scene, + 'action': instance.action, + 'reserved': instance.reserved, + 'openId': instance.openId, + }; + +LaunchMiniProgramResp _$LaunchMiniProgramRespFromJson( + Map json) { + return LaunchMiniProgramResp( + errorCode: json['errorCode'] as int? ?? 0, + errorMsg: json['errorMsg'] as String?, + extMsg: json['extMsg'] as String?, + ); +} + +Map _$LaunchMiniProgramRespToJson( + LaunchMiniProgramResp instance) => + { + 'errorCode': instance.errorCode, + 'errorMsg': instance.errorMsg, + 'extMsg': instance.extMsg, + }; + +OpenCustomerServiceChatResp _$OpenCustomerServiceChatRespFromJson( + Map json) { + return OpenCustomerServiceChatResp( + errorCode: json['errorCode'] as int? ?? 0, + errorMsg: json['errorMsg'] as String?, + ); +} + +Map _$OpenCustomerServiceChatRespToJson( + OpenCustomerServiceChatResp instance) => + { + 'errorCode': instance.errorCode, + 'errorMsg': instance.errorMsg, + }; + +PayResp _$PayRespFromJson(Map json) { + return PayResp( + errorCode: json['errorCode'] as int? ?? 0, + errorMsg: json['errorMsg'] as String?, + returnKey: json['returnKey'] as String?, + ); +} + +Map _$PayRespToJson(PayResp instance) => { + 'errorCode': instance.errorCode, + 'errorMsg': instance.errorMsg, + 'returnKey': instance.returnKey, + }; diff --git a/lib/src/model/sdk/wechat_auth_resp.dart b/lib/src/model/sdk/wechat_auth_resp.dart deleted file mode 100755 index 24cd693..0000000 --- a/lib/src/model/sdk/wechat_auth_resp.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -import 'package:wechat_kit/src/model/sdk/wechat_sdk_resp.dart'; - -part 'wechat_auth_resp.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatAuthResp extends WechatSdkResp { - const WechatAuthResp({ - required int errorCode, - String? errorMsg, - this.code, - this.state, - this.lang, - this.country, - }) : super( - errorCode: errorCode, - errorMsg: errorMsg, - ); - - factory WechatAuthResp.fromJson(Map json) => - _$WechatAuthRespFromJson(json); - - final String? code; - final String? state; - final String? lang; - final String? country; - - @override - Map toJson() => _$WechatAuthRespToJson(this); -} diff --git a/lib/src/model/sdk/wechat_auth_resp.g.dart b/lib/src/model/sdk/wechat_auth_resp.g.dart deleted file mode 100644 index 4c5cd82..0000000 --- a/lib/src/model/sdk/wechat_auth_resp.g.dart +++ /dev/null @@ -1,28 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_auth_resp.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatAuthResp _$WechatAuthRespFromJson(Map json) { - return WechatAuthResp( - errorCode: json['errorCode'] as int? ?? 0, - errorMsg: json['errorMsg'] as String?, - code: json['code'] as String?, - state: json['state'] as String?, - lang: json['lang'] as String?, - country: json['country'] as String?, - ); -} - -Map _$WechatAuthRespToJson(WechatAuthResp instance) => - { - 'errorCode': instance.errorCode, - 'errorMsg': instance.errorMsg, - 'code': instance.code, - 'state': instance.state, - 'lang': instance.lang, - 'country': instance.country, - }; diff --git a/lib/src/model/sdk/wechat_launch_from_wx_req.dart b/lib/src/model/sdk/wechat_launch_from_wx_req.dart deleted file mode 100644 index b14bd7b..0000000 --- a/lib/src/model/sdk/wechat_launch_from_wx_req.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_sdk_req.dart'; - -part 'wechat_launch_from_wx_req.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatLaunchFromWXReq extends WechatSdkReq { - const WechatLaunchFromWXReq({ - required String openId, - this.messageAction, - this.messageExt, - required this.lang, - required this.country, - }) : super(openId: openId); - - factory WechatLaunchFromWXReq.fromJson(Map json) => - _$WechatLaunchFromWXReqFromJson(json); - - final String? messageAction; - final String? messageExt; - final String lang; - final String country; - - @override - Map toJson() => _$WechatLaunchFromWXReqToJson(this); -} diff --git a/lib/src/model/sdk/wechat_launch_from_wx_req.g.dart b/lib/src/model/sdk/wechat_launch_from_wx_req.g.dart deleted file mode 100644 index 2b5072e..0000000 --- a/lib/src/model/sdk/wechat_launch_from_wx_req.g.dart +++ /dev/null @@ -1,28 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_launch_from_wx_req.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatLaunchFromWXReq _$WechatLaunchFromWXReqFromJson( - Map json) { - return WechatLaunchFromWXReq( - openId: json['openId'] as String, - messageAction: json['messageAction'] as String?, - messageExt: json['messageExt'] as String?, - lang: json['lang'] as String, - country: json['country'] as String, - ); -} - -Map _$WechatLaunchFromWXReqToJson( - WechatLaunchFromWXReq instance) => - { - 'openId': instance.openId, - 'messageAction': instance.messageAction, - 'messageExt': instance.messageExt, - 'lang': instance.lang, - 'country': instance.country, - }; diff --git a/lib/src/model/sdk/wechat_launch_mini_program_resp.dart b/lib/src/model/sdk/wechat_launch_mini_program_resp.dart deleted file mode 100755 index 0e85262..0000000 --- a/lib/src/model/sdk/wechat_launch_mini_program_resp.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_sdk_resp.dart'; - -part 'wechat_launch_mini_program_resp.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatLaunchMiniProgramResp extends WechatSdkResp { - const WechatLaunchMiniProgramResp({ - required int errorCode, - String? errorMsg, - this.extMsg, - }) : super( - errorCode: errorCode, - errorMsg: errorMsg, - ); - - factory WechatLaunchMiniProgramResp.fromJson(Map json) => - _$WechatLaunchMiniProgramRespFromJson(json); - - final String? extMsg; - - @override - Map toJson() => _$WechatLaunchMiniProgramRespToJson(this); -} diff --git a/lib/src/model/sdk/wechat_launch_mini_program_resp.g.dart b/lib/src/model/sdk/wechat_launch_mini_program_resp.g.dart deleted file mode 100644 index 7d55de9..0000000 --- a/lib/src/model/sdk/wechat_launch_mini_program_resp.g.dart +++ /dev/null @@ -1,24 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_launch_mini_program_resp.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatLaunchMiniProgramResp _$WechatLaunchMiniProgramRespFromJson( - Map json) { - return WechatLaunchMiniProgramResp( - errorCode: json['errorCode'] as int? ?? 0, - errorMsg: json['errorMsg'] as String?, - extMsg: json['extMsg'] as String?, - ); -} - -Map _$WechatLaunchMiniProgramRespToJson( - WechatLaunchMiniProgramResp instance) => - { - 'errorCode': instance.errorCode, - 'errorMsg': instance.errorMsg, - 'extMsg': instance.extMsg, - }; diff --git a/lib/src/model/sdk/wechat_pay_resp.dart b/lib/src/model/sdk/wechat_pay_resp.dart deleted file mode 100755 index e89fd3c..0000000 --- a/lib/src/model/sdk/wechat_pay_resp.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_sdk_resp.dart'; - -part 'wechat_pay_resp.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatPayResp extends WechatSdkResp { - const WechatPayResp({ - required int errorCode, - String? errorMsg, - this.returnKey, - }) : super( - errorCode: errorCode, - errorMsg: errorMsg, - ); - - factory WechatPayResp.fromJson(Map json) => - _$WechatPayRespFromJson(json); - - final String? returnKey; - - @override - Map toJson() => _$WechatPayRespToJson(this); -} diff --git a/lib/src/model/sdk/wechat_pay_resp.g.dart b/lib/src/model/sdk/wechat_pay_resp.g.dart deleted file mode 100644 index ae5b8fb..0000000 --- a/lib/src/model/sdk/wechat_pay_resp.g.dart +++ /dev/null @@ -1,22 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_pay_resp.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatPayResp _$WechatPayRespFromJson(Map json) { - return WechatPayResp( - errorCode: json['errorCode'] as int? ?? 0, - errorMsg: json['errorMsg'] as String?, - returnKey: json['returnKey'] as String?, - ); -} - -Map _$WechatPayRespToJson(WechatPayResp instance) => - { - 'errorCode': instance.errorCode, - 'errorMsg': instance.errorMsg, - 'returnKey': instance.returnKey, - }; diff --git a/lib/src/model/sdk/wechat_sdk_req.dart b/lib/src/model/sdk/wechat_sdk_req.dart deleted file mode 100644 index dca5572..0000000 --- a/lib/src/model/sdk/wechat_sdk_req.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'dart:convert'; - -import 'package:json_annotation/json_annotation.dart'; - -part 'wechat_sdk_req.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatSdkReq { - const WechatSdkReq({ - required this.openId, - }); - - factory WechatSdkReq.fromJson(Map json) => - _$WechatSdkReqFromJson(json); - - final String openId; - - Map toJson() => _$WechatSdkReqToJson(this); - - @override - String toString() => const JsonEncoder.withIndent(' ').convert(toJson()); -} diff --git a/lib/src/model/sdk/wechat_sdk_req.g.dart b/lib/src/model/sdk/wechat_sdk_req.g.dart deleted file mode 100644 index 20b48ec..0000000 --- a/lib/src/model/sdk/wechat_sdk_req.g.dart +++ /dev/null @@ -1,18 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_sdk_req.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatSdkReq _$WechatSdkReqFromJson(Map json) { - return WechatSdkReq( - openId: json['openId'] as String, - ); -} - -Map _$WechatSdkReqToJson(WechatSdkReq instance) => - { - 'openId': instance.openId, - }; diff --git a/lib/src/model/sdk/wechat_sdk_resp.dart b/lib/src/model/sdk/wechat_sdk_resp.dart deleted file mode 100755 index e9575b9..0000000 --- a/lib/src/model/sdk/wechat_sdk_resp.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'dart:convert'; - -import 'package:json_annotation/json_annotation.dart'; - -part 'wechat_sdk_resp.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatSdkResp { - const WechatSdkResp({ - required this.errorCode, - this.errorMsg, - }); - - factory WechatSdkResp.fromJson(Map json) => - _$WechatSdkRespFromJson(json); - - /// 成功 - static const int ERRORCODE_SUCCESS = 0; - - /// 普通错误类型 - static const int ERRORCODE_COMMON = -1; - - /// 用户点击取消并返回 - static const int ERRORCODE_USERCANCEL = -2; - - /// 发送失败 - static const int ERRORCODE_SENTFAIL = -3; - - /// 授权失败 - static const int ERRORCODE_AUTHDENY = -4; - - /// 微信不支持 - static const int ERRORCODE_UNSUPPORT = -5; - - /// 错误码 - @JsonKey(defaultValue: ERRORCODE_SUCCESS) - final int errorCode; - - /// 错误提示字符串 - final String? errorMsg; - - bool get isSuccessful => errorCode == ERRORCODE_SUCCESS; - - bool get isCancelled => errorCode == ERRORCODE_USERCANCEL; - - Map toJson() => _$WechatSdkRespToJson(this); - - @override - String toString() => const JsonEncoder.withIndent(' ').convert(toJson()); -} diff --git a/lib/src/model/sdk/wechat_sdk_resp.g.dart b/lib/src/model/sdk/wechat_sdk_resp.g.dart deleted file mode 100644 index f8e4208..0000000 --- a/lib/src/model/sdk/wechat_sdk_resp.g.dart +++ /dev/null @@ -1,20 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_sdk_resp.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatSdkResp _$WechatSdkRespFromJson(Map json) { - return WechatSdkResp( - errorCode: json['errorCode'] as int? ?? 0, - errorMsg: json['errorMsg'] as String?, - ); -} - -Map _$WechatSdkRespToJson(WechatSdkResp instance) => - { - 'errorCode': instance.errorCode, - 'errorMsg': instance.errorMsg, - }; diff --git a/lib/src/model/sdk/wechat_show_message_from_wx_req.dart b/lib/src/model/sdk/wechat_show_message_from_wx_req.dart deleted file mode 100644 index 05467c3..0000000 --- a/lib/src/model/sdk/wechat_show_message_from_wx_req.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_sdk_req.dart'; - -part 'wechat_show_message_from_wx_req.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatShowMessageFromWXReq extends WechatSdkReq { - const WechatShowMessageFromWXReq({ - required String openId, - this.messageAction, - this.messageExt, - required this.lang, - required this.country, - }) : super(openId: openId); - - factory WechatShowMessageFromWXReq.fromJson(Map json) => - _$WechatShowMessageFromWXReqFromJson(json); - - final String? messageAction; - final String? messageExt; - final String lang; - final String country; - - @override - Map toJson() => _$WechatShowMessageFromWXReqToJson(this); -} diff --git a/lib/src/model/sdk/wechat_show_message_from_wx_req.g.dart b/lib/src/model/sdk/wechat_show_message_from_wx_req.g.dart deleted file mode 100644 index 8ead754..0000000 --- a/lib/src/model/sdk/wechat_show_message_from_wx_req.g.dart +++ /dev/null @@ -1,28 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_show_message_from_wx_req.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatShowMessageFromWXReq _$WechatShowMessageFromWXReqFromJson( - Map json) { - return WechatShowMessageFromWXReq( - openId: json['openId'] as String, - messageAction: json['messageAction'] as String?, - messageExt: json['messageExt'] as String?, - lang: json['lang'] as String, - country: json['country'] as String, - ); -} - -Map _$WechatShowMessageFromWXReqToJson( - WechatShowMessageFromWXReq instance) => - { - 'openId': instance.openId, - 'messageAction': instance.messageAction, - 'messageExt': instance.messageExt, - 'lang': instance.lang, - 'country': instance.country, - }; diff --git a/lib/src/model/sdk/wechat_subscribe_msg_resp.dart b/lib/src/model/sdk/wechat_subscribe_msg_resp.dart deleted file mode 100755 index 6389419..0000000 --- a/lib/src/model/sdk/wechat_subscribe_msg_resp.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_sdk_resp.dart'; - -part 'wechat_subscribe_msg_resp.g.dart'; - -@JsonSerializable( - explicitToJson: true, -) -class WechatSubscribeMsgResp extends WechatSdkResp { - const WechatSubscribeMsgResp({ - required int errorCode, - String? errorMsg, - this.templateId, - this.scene, - this.action, - this.reserved, - this.openId, - }) : super( - errorCode: errorCode, - errorMsg: errorMsg, - ); - - factory WechatSubscribeMsgResp.fromJson(Map json) => - _$WechatSubscribeMsgRespFromJson(json); - - final String? templateId; - final int? scene; - final String? action; - final String? reserved; - final String? openId; - - @override - Map toJson() => _$WechatSubscribeMsgRespToJson(this); -} diff --git a/lib/src/model/sdk/wechat_subscribe_msg_resp.g.dart b/lib/src/model/sdk/wechat_subscribe_msg_resp.g.dart deleted file mode 100644 index f45218f..0000000 --- a/lib/src/model/sdk/wechat_subscribe_msg_resp.g.dart +++ /dev/null @@ -1,32 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'wechat_subscribe_msg_resp.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WechatSubscribeMsgResp _$WechatSubscribeMsgRespFromJson( - Map json) { - return WechatSubscribeMsgResp( - errorCode: json['errorCode'] as int? ?? 0, - errorMsg: json['errorMsg'] as String?, - templateId: json['templateId'] as String?, - scene: json['scene'] as int?, - action: json['action'] as String?, - reserved: json['reserved'] as String?, - openId: json['openId'] as String?, - ); -} - -Map _$WechatSubscribeMsgRespToJson( - WechatSubscribeMsgResp instance) => - { - 'errorCode': instance.errorCode, - 'errorMsg': instance.errorMsg, - 'templateId': instance.templateId, - 'scene': instance.scene, - 'action': instance.action, - 'reserved': instance.reserved, - 'openId': instance.openId, - }; diff --git a/lib/src/wechat.dart b/lib/src/wechat.dart index 9d3ab61..2f64a4f 100755 --- a/lib/src/wechat.dart +++ b/lib/src/wechat.dart @@ -6,13 +6,9 @@ import 'dart:typed_data'; import 'package:convert/convert.dart'; import 'package:crypto/crypto.dart'; import 'package:flutter/services.dart'; -import 'package:wechat_kit/src/model/qrauth/qrauth_resp.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_auth_resp.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_launch_from_wx_req.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_launch_mini_program_resp.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_pay_resp.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_sdk_resp.dart'; -import 'package:wechat_kit/src/model/sdk/wechat_subscribe_msg_resp.dart'; +import 'package:wechat_kit/src/model/qrauth.dart'; +import 'package:wechat_kit/src/model/req.dart'; +import 'package:wechat_kit/src/model/resp.dart'; import 'package:wechat_kit/src/wechat_constant.dart'; /// @@ -48,6 +44,7 @@ class Wechat { 'openCustomerServiceChat'; static const String _METHOD_PAY = 'pay'; static const String _METHOD_LAUNCHFROMWX = 'launchFromWX'; + static const String _METHOD_SHOWMESSAGEFROMWX = 'showMessageFromWX'; static const String _METHOD_ONAUTHRESP = 'onAuthResp'; static const String _METHOD_ONOPENURLRESP = 'onOpenUrlResp'; @@ -100,55 +97,22 @@ class Wechat { static const String _ARGUMENT_KEY_CORPID = 'corpId'; static const String _ARGUMENT_KEY_PARTNERID = 'partnerId'; static const String _ARGUMENT_KEY_PREPAYID = 'prepayId'; - -// static const String _ARGUMENT_KEY_NONCESTR = 'noncestr'; -// static const String _ARGUMENT_KEY_TIMESTAMP = 'timestamp'; static const String _ARGUMENT_KEY_PACKAGE = 'package'; static const String _ARGUMENT_KEY_SIGN = 'sign'; - static const String _ARGUMENT_KEY_RESULT_IMAGEDATA = 'imageData'; - static const String _SCHEME_FILE = 'file'; late final MethodChannel _channel = const MethodChannel('v7lin.github.io/wechat_kit') ..setMethodCallHandler(_handleMethod); - final StreamController - _launchFromWXReqStreamController = - StreamController.broadcast(); + final StreamController _reqStreamController = + StreamController.broadcast(); - final StreamController _authRespStreamController = - StreamController.broadcast(); + final StreamController _respStreamController = + StreamController.broadcast(); - final StreamController _openUrlRespStreamController = - StreamController.broadcast(); - - final StreamController _shareMsgRespStreamController = - StreamController.broadcast(); - - final StreamController - _subscribeMsgRespStreamController = - StreamController.broadcast(); - - final StreamController - _launchMiniProgramRespStreamController = - StreamController.broadcast(); - - final StreamController - _openCustomerServiceChatRespStreamController = - StreamController.broadcast(); - - final StreamController _payRespStreamController = - StreamController.broadcast(); - - final StreamController _authGotQrcodeRespStreamController = - StreamController.broadcast(); - - final StreamController _authQrcodeScannedRespStreamController = - StreamController.broadcast(); - - final StreamController _authFinishRespStreamController = + final StreamController _qrauthStreamController = StreamController.broadcast(); /// 向微信注册应用 @@ -170,103 +134,70 @@ class Wechat { switch (call.method) { // onReq case _METHOD_LAUNCHFROMWX: - _launchFromWXReqStreamController.add(WechatLaunchFromWXReq.fromJson( + _reqStreamController.add(LaunchFromWXReq.fromJson( + (call.arguments as Map).cast())); + break; + case _METHOD_SHOWMESSAGEFROMWX: + _reqStreamController.add(ShowMessageFromWXReq.fromJson( (call.arguments as Map).cast())); break; // onResp case _METHOD_ONAUTHRESP: - _authRespStreamController.add(WechatAuthResp.fromJson( + _respStreamController.add(AuthResp.fromJson( (call.arguments as Map).cast())); break; case _METHOD_ONOPENURLRESP: - _openUrlRespStreamController.add(WechatSdkResp.fromJson( + _respStreamController.add(OpenUrlResp.fromJson( (call.arguments as Map).cast())); break; case _METHOD_ONSHAREMSGRESP: - _shareMsgRespStreamController.add(WechatSdkResp.fromJson( + _respStreamController.add(ShareMsgResp.fromJson( (call.arguments as Map).cast())); break; case _METHOD_ONSUBSCRIBEMSGRESP: - _subscribeMsgRespStreamController.add(WechatSubscribeMsgResp.fromJson( + _respStreamController.add(SubscribeMsgResp.fromJson( (call.arguments as Map).cast())); break; case _METHOD_ONLAUNCHMINIPROGRAMRESP: - _launchMiniProgramRespStreamController.add( - WechatLaunchMiniProgramResp.fromJson( - (call.arguments as Map) - .cast())); + _respStreamController.add(LaunchMiniProgramResp.fromJson( + (call.arguments as Map).cast())); break; case _METHOD_ONOPENCUSTOMERSERVICECHATRESP: - _openCustomerServiceChatRespStreamController.add(WechatSdkResp.fromJson( + _respStreamController.add(OpenCustomerServiceChatResp.fromJson( (call.arguments as Map).cast())); break; case _METHOD_ONPAYRESP: - _payRespStreamController.add(WechatPayResp.fromJson( + _respStreamController.add(PayResp.fromJson( (call.arguments as Map).cast())); break; - // Qrauth + // onQrauth case _METHOD_ONAUTHGOTQRCODE: - _authGotQrcodeRespStreamController - .add(call.arguments[_ARGUMENT_KEY_RESULT_IMAGEDATA] as Uint8List); + _qrauthStreamController.add(GotQrcodeResp.fromJson( + (call.arguments as Map).cast())); break; case _METHOD_ONAUTHQRCODESCANNED: - _authQrcodeScannedRespStreamController.add('QrcodeScanned'); + _qrauthStreamController.add(const QrcodeScannedResp()); break; case _METHOD_ONAUTHFINISH: - _authFinishRespStreamController.add(QrauthResp.fromJson( + _qrauthStreamController.add(FinishResp.fromJson( (call.arguments as Map).cast())); break; } } - /// 登录 - Stream authResp() { - return _authRespStreamController.stream; + /// + Stream reqStream() { + return _reqStreamController.stream; } - /// 打开浏览器 - Stream openUrlResp() { - return _openUrlRespStreamController.stream; + /// + Stream respStream() { + return _respStreamController.stream; } - /// 分享 - Stream shareMsgResp() { - return _shareMsgRespStreamController.stream; - } - - /// 一次性订阅消息 - Stream subscribeMsgResp() { - return _subscribeMsgRespStreamController.stream; - } - - /// 打开小程序 - Stream launchMiniProgramResp() { - return _launchMiniProgramRespStreamController.stream; - } - - /// 打开微信客服 - Stream openCustomerServiceChatResp() { - return _openCustomerServiceChatRespStreamController.stream; - } - - /// 支付 - Stream payResp() { - return _payRespStreamController.stream; - } - - /// 扫码登录 - 获取二维码 - Stream authGotQrcodeResp() { - return _authGotQrcodeRespStreamController.stream; - } - - /// 扫码登录 - 用户扫描二维码 - Stream authQrcodeScannedResp() { - return _authQrcodeScannedRespStreamController.stream; - } - - /// 扫码登录 - 用户点击授权 - Stream authFinishResp() { - return _authFinishRespStreamController.stream; + /// 扫码登录 + Stream authGotQrcodeResp() { + return _qrauthStreamController.stream; } /// 检测微信是否已安装 diff --git a/lib/wechat_kit.dart b/lib/wechat_kit.dart index 5bd34fd..c5a62f8 100755 --- a/lib/wechat_kit.dart +++ b/lib/wechat_kit.dart @@ -1,10 +1,7 @@ library wechat_kit; -export 'src/model/qrauth/qrauth_resp.dart'; -export 'src/model/sdk/wechat_auth_resp.dart'; -export 'src/model/sdk/wechat_launch_mini_program_resp.dart'; -export 'src/model/sdk/wechat_pay_resp.dart'; -export 'src/model/sdk/wechat_sdk_resp.dart'; -export 'src/model/sdk/wechat_subscribe_msg_resp.dart'; +export 'src/model/qrauth.dart'; +export 'src/model/req.dart'; +export 'src/model/resp.dart'; export 'src/wechat.dart'; export 'src/wechat_constant.dart'; diff --git a/test/wechat_kit_test.dart b/test/wechat_kit_test.dart index aaf57fd..36883ef 100644 --- a/test/wechat_kit_test.dart +++ b/test/wechat_kit_test.dart @@ -89,18 +89,20 @@ void main() { }); test('auth', () async { - final StreamSubscription sub = - Wechat.instance.authResp().listen((WechatAuthResp resp) { - expect(resp.errorCode, WechatSdkResp.ERRORCODE_USERCANCEL); + final StreamSubscription sub = + Wechat.instance.respStream().listen((BaseResp resp) { + expect(resp.runtimeType, AuthResp); + expect(resp.errorCode, BaseResp.ERRORCODE_USERCANCEL); }); await Wechat.instance.auth(scope: [WechatScope.SNSAPI_USERINFO]); await sub.cancel(); }); test('share', () async { - final StreamSubscription sub = - Wechat.instance.shareMsgResp().listen((WechatSdkResp resp) { - expect(resp.errorCode, WechatSdkResp.ERRORCODE_SUCCESS); + final StreamSubscription sub = + Wechat.instance.respStream().listen((BaseResp resp) { + expect(resp.runtimeType, ShareMsgResp); + expect(resp.errorCode, BaseResp.ERRORCODE_SUCCESS); }); await Wechat.instance .shareText(scene: WechatScene.SESSION, text: 'share text'); @@ -108,9 +110,10 @@ void main() { }); test('pay', () async { - final StreamSubscription sub = - Wechat.instance.payResp().listen((WechatPayResp resp) { - expect(resp.errorCode, WechatSdkResp.ERRORCODE_USERCANCEL); + final StreamSubscription sub = + Wechat.instance.respStream().listen((BaseResp resp) { + expect(resp.runtimeType, PayResp); + expect(resp.errorCode, BaseResp.ERRORCODE_USERCANCEL); }); await Wechat.instance.pay( appId: 'mock',