feat:验证码
This commit is contained in:
@@ -8,7 +8,8 @@ import lombok.Getter;
|
|||||||
public enum YcCodeTypeEnum {
|
public enum YcCodeTypeEnum {
|
||||||
|
|
||||||
YC_10118(10118, "中文字符 1~4位 plus 其他类型准确率不满足 可使用本类型"),
|
YC_10118(10118, "中文字符 1~4位 plus 其他类型准确率不满足 可使用本类型"),
|
||||||
YC_6246(30100, "通用中文点选1")
|
YC_6246(30100, "通用中文点选1"),
|
||||||
|
YC_310700(310700, "适合Zlb使用的word click")
|
||||||
|
|
||||||
;
|
;
|
||||||
private final Integer type;
|
private final Integer type;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class YcCodeRequest {
|
public class YcCodeRequest {
|
||||||
/**
|
/**
|
||||||
* 图片
|
* 图片 base64
|
||||||
*/
|
*/
|
||||||
private String image;
|
private String image;
|
||||||
/**
|
/**
|
||||||
@@ -21,4 +21,9 @@ public class YcCodeRequest {
|
|||||||
*/
|
*/
|
||||||
private Integer type;
|
private Integer type;
|
||||||
private String extra;
|
private String extra;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模板图片 base64
|
||||||
|
*/
|
||||||
|
private String labelImage;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,10 +9,13 @@ import com.xiang.common.pojo.code.YcCodeDataResp;
|
|||||||
import com.xiang.common.pojo.code.YcCodeRequest;
|
import com.xiang.common.pojo.code.YcCodeRequest;
|
||||||
import com.xiang.common.utils.HttpService;
|
import com.xiang.common.utils.HttpService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@@ -42,14 +45,34 @@ public class CodeServiceImpl implements ICodeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String codeResolve(String image, String extra) {
|
public List<String> codeResolve(String image, String templateImage) {
|
||||||
YcCodeBaseResponse<YcCodeDataResp> resp = baseCodeResolve(YcCodeTypeEnum.YC_6246.getType(), image, extra);
|
HashMap<String, String> header = Maps.newHashMap();
|
||||||
if (Objects.isNull(resp)) {
|
header.put("Content-Type", "application/json");
|
||||||
|
YcCodeRequest ycCodeRequest = new YcCodeRequest();
|
||||||
|
ycCodeRequest.setImage(image);
|
||||||
|
ycCodeRequest.setToken("9LQ1ATKVEeO8Arhq-HavXzpHvkzdZz_r7ydmqlYhp9c");
|
||||||
|
ycCodeRequest.setLabelImage(templateImage);
|
||||||
|
|
||||||
|
String resp = HttpService.doPost(YUN_CODE_API_URL, header, JSON.toJSONString(ycCodeRequest));
|
||||||
|
YcCodeBaseResponse<YcCodeDataResp> response = JSON.parseObject(resp, new TypeReference<YcCodeBaseResponse<YcCodeDataResp>>() {
|
||||||
|
});
|
||||||
|
if (Objects.isNull(response)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Integer code = resp.getCode();
|
Integer code = response.getCode();
|
||||||
if (200 == code) {
|
if (10000 == code) {
|
||||||
return resp.getData().getData();
|
YcCodeDataResp data = response.getData();
|
||||||
|
if (Objects.isNull(data)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Integer dataCode = data.getCode();
|
||||||
|
if (0 == dataCode) {
|
||||||
|
String dataData = data.getData();
|
||||||
|
if (StringUtils.isNotBlank(dataData)) {
|
||||||
|
String[] split = dataData.split("\\|");
|
||||||
|
return Arrays.asList(split);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,13 @@ import com.xiang.common.pojo.code.YcCodeBaseResponse;
|
|||||||
import com.xiang.common.pojo.code.YcCodeDataResp;
|
import com.xiang.common.pojo.code.YcCodeDataResp;
|
||||||
import com.xiang.common.pojo.code.YcCodeRequest;
|
import com.xiang.common.pojo.code.YcCodeRequest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface ICodeService {
|
public interface ICodeService {
|
||||||
|
|
||||||
String templateCodeResolve(String image);
|
String templateCodeResolve(String image);
|
||||||
|
|
||||||
String codeResolve(String image, String extra);
|
List<String> codeResolve(String image, String extra);
|
||||||
|
|
||||||
YcCodeBaseResponse<YcCodeDataResp> baseCodeResolve(Integer type, String image, String extra);
|
YcCodeBaseResponse<YcCodeDataResp> baseCodeResolve(Integer type, String image, String extra);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.xiang.common.factory.JntyzxDingTalkFactory;
|
import com.xiang.common.factory.JntyzxDingTalkFactory;
|
||||||
import com.xiang.common.pojo.jntyzx.zlb.*;
|
import com.xiang.common.pojo.jntyzx.zlb.*;
|
||||||
import com.xiang.common.service.ICodeService;
|
import com.xiang.common.service.ICodeService;
|
||||||
@@ -17,6 +18,7 @@ import com.xiang.common.utils.DateUtils;
|
|||||||
import com.xiang.common.utils.OkHttpUtil;
|
import com.xiang.common.utils.OkHttpUtil;
|
||||||
import com.xiang.service.module.jntyzx.zlb.constants.ZlbUrlConstants;
|
import com.xiang.service.module.jntyzx.zlb.constants.ZlbUrlConstants;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -362,19 +364,54 @@ public class ZlbServiceImpl implements ZlbService {
|
|||||||
//获取图片验证码
|
//获取图片验证码
|
||||||
String s = client.postJson(ZlbUrlConstants.captchaUrl, null, "{}");
|
String s = client.postJson(ZlbUrlConstants.captchaUrl, null, "{}");
|
||||||
JSONObject jsonObject = JSON.parseObject(s);
|
JSONObject jsonObject = JSON.parseObject(s);
|
||||||
String templateImage = JSON.toJSONString(jsonObject.get("templateImage"));
|
String id = (String) jsonObject.get("id");
|
||||||
String templeCode = codeService.templateCodeResolve(templateImage);
|
|
||||||
String captcha = JSON.toJSONString(jsonObject.get("captcha"));
|
String captcha = JSON.toJSONString(jsonObject.get("captcha"));
|
||||||
String backgroundImage = JSON.toJSONString(JSON.parseObject(captcha).get("backgroundImage"));
|
String backgroundImage = JSON.toJSONString(JSON.parseObject(captcha).get("backgroundImage"));
|
||||||
String track = codeService.codeResolve(backgroundImage, templeCode);
|
String templateImage = JSON.toJSONString(JSON.parseObject(captcha).get("templateImage"));
|
||||||
|
List<String> trackList = codeService.codeResolve(backgroundImage, templateImage);
|
||||||
|
ZlbOrderInfo orderInfo = new ZlbOrderInfo();
|
||||||
|
orderInfo.setId(id);
|
||||||
//获取验证码轨迹
|
//获取验证码轨迹
|
||||||
ZlbOrderInfo zlbOrderInfo = JSONObject.parseObject(track, ZlbOrderInfo.class);
|
List<ZlbOrderInfo.ZlbData.TrackList> trackListList = convert(trackList);
|
||||||
zlbOrderInfo.setSiteOrderDetailsStr(siteOrderDetailsStr);
|
ZlbOrderInfo.ZlbData data = new ZlbOrderInfo.ZlbData();
|
||||||
String jsonString = JSON.toJSONString(zlbOrderInfo);
|
// data.setBgImageWidth();
|
||||||
|
// data.setBgImageHeight();
|
||||||
|
// data.setStartTime();
|
||||||
|
// data.setStopTime();
|
||||||
|
data.setTrackList(trackListList);
|
||||||
|
|
||||||
|
orderInfo.setData(data);
|
||||||
|
orderInfo.setSiteOrderDetailsStr(siteOrderDetailsStr);
|
||||||
|
String jsonString = JSON.toJSONString(orderInfo);
|
||||||
log.info("json:\n {}", jsonString);
|
log.info("json:\n {}", jsonString);
|
||||||
return jsonString;
|
return jsonString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<ZlbOrderInfo.ZlbData.TrackList> convert(List<String> trackList) {
|
||||||
|
List<ZlbOrderInfo.ZlbData.TrackList> result = Lists.newArrayList();
|
||||||
|
|
||||||
|
for (String track : trackList) {
|
||||||
|
String[] split = track.split(",");
|
||||||
|
String x = split[0];
|
||||||
|
String y = split[1];
|
||||||
|
ZlbOrderInfo.ZlbData.TrackList data = new ZlbOrderInfo.ZlbData.TrackList();
|
||||||
|
data.setX(Integer.valueOf(x));
|
||||||
|
data.setY(Integer.valueOf(y));
|
||||||
|
data.setT(1);
|
||||||
|
data.setType("click");
|
||||||
|
result.add(data);
|
||||||
|
|
||||||
|
ZlbOrderInfo.ZlbData.TrackList move = new ZlbOrderInfo.ZlbData.TrackList();
|
||||||
|
move.setX(Integer.valueOf(x));
|
||||||
|
move.setY(Integer.valueOf(y));
|
||||||
|
move.setT(1);
|
||||||
|
move.setType("move");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteRedis(String name) {
|
public void deleteRedis(String name) {
|
||||||
// 定义模糊匹配模式
|
// 定义模糊匹配模式
|
||||||
|
|||||||
Reference in New Issue
Block a user