diff --git a/src/main/java/com/xiang/common/enums/YcCodeTypeEnum.java b/src/main/java/com/xiang/common/enums/YcCodeTypeEnum.java index d43c581..99c9088 100644 --- a/src/main/java/com/xiang/common/enums/YcCodeTypeEnum.java +++ b/src/main/java/com/xiang/common/enums/YcCodeTypeEnum.java @@ -8,7 +8,8 @@ import lombok.Getter; public enum YcCodeTypeEnum { YC_10118(10118, "中文字符 1~4位 plus 其他类型准确率不满足 可使用本类型"), - YC_6246(30100, "通用中文点选1") + YC_6246(30100, "通用中文点选1"), + YC_310700(310700, "适合Zlb使用的word click") ; private final Integer type; diff --git a/src/main/java/com/xiang/common/pojo/code/YcCodeRequest.java b/src/main/java/com/xiang/common/pojo/code/YcCodeRequest.java index de7142b..e0ae7da 100644 --- a/src/main/java/com/xiang/common/pojo/code/YcCodeRequest.java +++ b/src/main/java/com/xiang/common/pojo/code/YcCodeRequest.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class YcCodeRequest { /** - * 图片 + * 图片 base64 */ private String image; /** @@ -21,4 +21,9 @@ public class YcCodeRequest { */ private Integer type; private String extra; + + /** + * 模板图片 base64 + */ + private String labelImage; } diff --git a/src/main/java/com/xiang/common/service/CodeServiceImpl.java b/src/main/java/com/xiang/common/service/CodeServiceImpl.java index 6b44543..5c52888 100644 --- a/src/main/java/com/xiang/common/service/CodeServiceImpl.java +++ b/src/main/java/com/xiang/common/service/CodeServiceImpl.java @@ -9,10 +9,13 @@ import com.xiang.common.pojo.code.YcCodeDataResp; import com.xiang.common.pojo.code.YcCodeRequest; import com.xiang.common.utils.HttpService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.nullness.qual.Nullable; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Objects; @Service @@ -42,14 +45,34 @@ public class CodeServiceImpl implements ICodeService { } @Override - public String codeResolve(String image, String extra) { - YcCodeBaseResponse resp = baseCodeResolve(YcCodeTypeEnum.YC_6246.getType(), image, extra); - if (Objects.isNull(resp)) { + public List codeResolve(String image, String templateImage) { + HashMap header = Maps.newHashMap(); + 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 response = JSON.parseObject(resp, new TypeReference>() { + }); + if (Objects.isNull(response)) { return null; } - Integer code = resp.getCode(); - if (200 == code) { - return resp.getData().getData(); + Integer code = response.getCode(); + if (10000 == code) { + 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; } diff --git a/src/main/java/com/xiang/common/service/ICodeService.java b/src/main/java/com/xiang/common/service/ICodeService.java index b45de0f..ed10cbc 100644 --- a/src/main/java/com/xiang/common/service/ICodeService.java +++ b/src/main/java/com/xiang/common/service/ICodeService.java @@ -4,11 +4,13 @@ import com.xiang.common.pojo.code.YcCodeBaseResponse; import com.xiang.common.pojo.code.YcCodeDataResp; import com.xiang.common.pojo.code.YcCodeRequest; +import java.util.List; + public interface ICodeService { String templateCodeResolve(String image); - String codeResolve(String image, String extra); + List codeResolve(String image, String extra); YcCodeBaseResponse baseCodeResolve(Integer type, String image, String extra); } diff --git a/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java b/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java index 787bd3c..16fe71a 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java +++ b/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java @@ -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.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Lists; import com.xiang.common.factory.JntyzxDingTalkFactory; import com.xiang.common.pojo.jntyzx.zlb.*; 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.service.module.jntyzx.zlb.constants.ZlbUrlConstants; import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.nullness.qual.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -362,19 +364,54 @@ public class ZlbServiceImpl implements ZlbService { //获取图片验证码 String s = client.postJson(ZlbUrlConstants.captchaUrl, null, "{}"); JSONObject jsonObject = JSON.parseObject(s); - String templateImage = JSON.toJSONString(jsonObject.get("templateImage")); - String templeCode = codeService.templateCodeResolve(templateImage); + String id = (String) jsonObject.get("id"); String captcha = JSON.toJSONString(jsonObject.get("captcha")); 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 trackList = codeService.codeResolve(backgroundImage, templateImage); + ZlbOrderInfo orderInfo = new ZlbOrderInfo(); + orderInfo.setId(id); //获取验证码轨迹 - ZlbOrderInfo zlbOrderInfo = JSONObject.parseObject(track, ZlbOrderInfo.class); - zlbOrderInfo.setSiteOrderDetailsStr(siteOrderDetailsStr); - String jsonString = JSON.toJSONString(zlbOrderInfo); + List trackListList = convert(trackList); + ZlbOrderInfo.ZlbData data = new ZlbOrderInfo.ZlbData(); +// 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); return jsonString; } + private List convert(List trackList) { + List 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 public void deleteRedis(String name) { // 定义模糊匹配模式