flutter

引入插件

根据对应版本接入即可

  1. dio: ^3.0.9
  2. steel_crypt: ^1.5.3
  3. encrypt: ^4.0.0

使用方式

  1. //点选拼图
  2. //import 'package:captcha/captcha/click_word_captcha.dart';
  3. static void loadingClickWord(BuildContext context, {barrierDismissible = true}) {
  4. showDialog<Null>(
  5. context: context,
  6. barrierDismissible: barrierDismissible,
  7. builder: (BuildContext context) {
  8. return ClickWordCaptcha(
  9. onSuccess: (v){//成功回调(回调为加密后内容,依据项目而定)
  10. },
  11. onFail: (){
  12. },
  13. );
  14. },
  15. );
  16. }
  17. //滑动拼图
  18. //import 'package:captcha/captcha/block_puzzle_captcha.dart';
  19. static void loadingBlockPuzzle(BuildContext context, {barrierDismissible = true}) {
  20. showDialog<Null>(
  21. context: context,
  22. barrierDismissible: barrierDismissible,
  23. builder: (BuildContext context) {
  24. return BlockPuzzleCaptchaPage(
  25. onSuccess: (v){ //成功回调(回调为加密后内容,依据项目而定)
  26. },
  27. onFail: (){
  28. },
  29. );
  30. },
  31. );
  32. }

事件

参数说明
onSuccess可自定义回调内容,根据自己服务定制
onFail失败回调默认为空,可自定义回调内容,根据自己服务定制

请求处理

  1. import 'package:captcha/request/HttpManager.dart';

请求接口地址 配置在 HttpManager类中 ,需要更改地址替换baseUrl即可

请求注意

请求验证码接口中会有secretKey参数,当secretKey有值, 进行as加密, 加密key为secretKey,不加密情况下pointJson为json系列化为字符串

  1. {
  2. "pointJson": cryptedStr,
  3. "captchaType": "clickWord",
  4. "token": _clickWordCaptchaModel.token
  5. }
  1. // secretKey 不为空 进行as加密
  2. if(!ObjectUtils.isEmpty(_clickWordCaptchaModel.secretKey)){
  3. var aesEncrypter = AesCrypt(_clickWordCaptchaModel.secretKey, 'ecb', 'pkcs7');
  4. cryptedStr = aesEncrypter.encrypt(pointStr);
  5. var dcrypt = aesEncrypter.decrypt(cryptedStr);
  6. }

二次校验传出的参数

  1. //如果不加密 将 token 和 坐标序列化 通过 --- 链接成字符串
  2. var captchaVerification = "$captchaToken---$pointStr";
  3. if(!ObjectUtils.isEmpty(secretKey)){
  4. //如果加密 将 token 和 坐标序列化 通过 --- 链接成字符串 进行加密 加密密钥为 _clickWordCaptchaModel.secretKey
  5. captchaVerification = EncryptUtil.aesEncode(key: secretKey, content: captchaVerification);
  6. }
  7. checkSuccess(captchaVerification);