江体小程序和zlb接口开发 #1

Merged
XiangZ merged 32 commits from feat/script_v1 into master 2026-05-10 09:06:35 +00:00
5 changed files with 83 additions and 15 deletions
Showing only changes of commit a1d42a4b27 - Show all commits

View File

@@ -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;

View File

@@ -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;
} }

View File

@@ -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;
} }

View File

@@ -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);
} }

View File

@@ -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) {
// 定义模糊匹配模式 // 定义模糊匹配模式