fix: mob geetest

This commit is contained in:
My-Responsitories
2026-06-07 14:58:52 +08:00
committed by dom
parent bccda095e5
commit 776fc83904
3 changed files with 55 additions and 33 deletions

View File

@@ -110,24 +110,17 @@ class LoginPageController extends GetxController
String geeChallenge, String geeChallenge,
VoidCallback onSuccess, VoidCallback onSuccess,
) { ) {
void updateCaptchaData(Map json) { GeetestWebviewDialog.geetest(geeGt, geeChallenge).then((res) {
captchaData if (res is Map) {
..validate = json['geetest_validate'] captchaData
..seccode = json['geetest_seccode'] ..validate = res['geetest_validate']
..geetest = GeetestData( ..seccode = res['geetest_seccode']
challenge: json['geetest_challenge'], ..geetest = GeetestData(
gt: geeGt, challenge: res['geetest_challenge'],
); gt: geeGt,
SmartDialog.showToast('验证成功'); );
onSuccess(); SmartDialog.showToast('验证成功');
} onSuccess();
showDialog<Map<String, dynamic>>(
context: Get.context!,
builder: (context) => GeetestWebviewDialog(geeGt, geeChallenge),
).then((res) {
if (res != null) {
updateCaptchaData(res);
} }
}); });
} }

View File

@@ -10,14 +10,25 @@ import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
const _geetestJsUri = 'https://static.geetest.com/static/js/fullpage.0.0.0.js';
class GeetestWebviewDialog extends StatelessWidget { class GeetestWebviewDialog extends StatelessWidget {
const GeetestWebviewDialog(this.gt, this.challenge, {super.key}); const GeetestWebviewDialog(this.gt, this.challenge, {super.key});
final String gt; final String gt;
final String challenge; final String challenge;
static Future geetest(String gt, String challenge) {
return showDialog(
context: Get.context!,
builder: (context) => GeetestWebviewDialog(gt, challenge),
);
}
static const _geetestJsUri =
'https://static.geetest.com/static/js/fullpage.0.0.0.js';
static String _showJs(String response) =>
't=Geetest($response).onSuccess(()=>R("success",t.getValidate())).onError(o=>R("error",o)).onClose(o=>R("close",o));t.onReady(()=>t.verify())';
static Future<LoadingState<String>> _getConfig( static Future<LoadingState<String>> _getConfig(
String gt, String gt,
String challenge, String challenge,
@@ -67,7 +78,7 @@ class GeetestWebviewDialog extends StatelessWidget {
return AlertDialog( return AlertDialog(
title: const Text('验证码'), title: const Text('验证码'),
content: SizedBox( content: SizedBox(
width: 300, width: 320,
height: 400, height: 400,
child: InAppWebView( child: InAppWebView(
webViewEnvironment: webViewEnvironment, webViewEnvironment: webViewEnvironment,
@@ -79,11 +90,31 @@ class GeetestWebviewDialog extends StatelessWidget {
algorithmicDarkeningAllowed: true, algorithmicDarkeningAllowed: true,
useShouldOverrideUrlLoading: true, useShouldOverrideUrlLoading: true,
userAgent: BrowserUa.mob, userAgent: BrowserUa.mob,
mixedContentMode: MixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW, mixedContentMode: .MIXED_CONTENT_ALWAYS_ALLOW,
incognito: true,
allowFileAccess: false,
allowsLinkPreview: false,
allowContentAccess: false,
useOnDownloadStart: false,
geolocationEnabled: false,
thirdPartyCookiesEnabled: false,
enterpriseAuthenticationAppLinkPolicyEnabled: false,
saveFormData: false,
safeBrowsingEnabled: false,
isFraudulentWebsiteWarningEnabled: false,
domStorageEnabled: false,
databaseEnabled: false,
cacheEnabled: false,
cacheMode: .LOAD_NO_CACHE,
horizontalScrollBarEnabled: false,
verticalScrollBarEnabled: false,
overScrollMode: .NEVER,
), ),
initialData: InAppWebViewInitialData( initialData: InAppWebViewInitialData(
data: data:
'<!DOCTYPE html><html><head></head><body><script src="$_geetestJsUri"></script><script>function R(n,o){flutter_inappwebview.callHandler(n,o)}</script></body></html>', '<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"></head><body><script src="$_geetestJsUri"></script><script>R=flutter_inappwebview.callHandler</script></body></html>',
), ),
onWebViewCreated: (ctr) { onWebViewCreated: (ctr) {
ctr ctr
@@ -104,16 +135,17 @@ class GeetestWebviewDialog extends StatelessWidget {
callback: (args) { callback: (args) {
debugPrint('geetest error: $args'); debugPrint('geetest error: $args');
}, },
)
..addJavaScriptHandler(
handlerName: 'close',
callback: (args) => Get.back(),
); );
}, },
onLoadStop: (ctr, _) async { onLoadStop: (ctr, _) async {
final config = await future; final config = await future;
if (!context.mounted) return; if (!context.mounted) return;
if (config case Success(:final response)) { if (config case Success(:final response)) {
ctr.evaluateJavascript( ctr.evaluateJavascript(source: _showJs(response));
source:
'let t=Geetest($response).onSuccess(()=>R("success",t.getValidate())).onError((o)=>R("error",o));t.onReady(()=>t.verify());',
);
} else { } else {
config.toast(); config.toast();
Get.back(); Get.back();

View File

@@ -561,17 +561,14 @@ abstract final class RequestUtils {
} }
} }
final json = await showDialog<Map<String, dynamic>>( final json = await GeetestWebviewDialog.geetest(gt!, challenge!);
context: Get.context!, if (json is Map) {
builder: (context) => GeetestWebviewDialog(gt!, challenge!),
);
if (json != null) {
captchaData captchaData
..validate = json['geetest_validate'] ..validate = json['geetest_validate']
..seccode = json['geetest_seccode'] ..seccode = json['geetest_seccode']
..geetest = GeetestData( ..geetest = GeetestData(
challenge: json['geetest_challenge'], challenge: json['geetest_challenge'],
gt: gt!, gt: gt,
); );
gaiaVgateValidate(); gaiaVgateValidate();
} }