package com.dobbinsoft.fw.support.captcha; import com.alibaba.fastjson.JSONObject; import com.dobbinsoft.fw.support.captcha.v20190722.CaptchaClient; import com.dobbinsoft.fw.support.captcha.v20190722.models.DescribeCaptchaResultRequest; import com.dobbinsoft.fw.support.captcha.v20190722.models.DescribeCaptchaResultResponse; import com.dobbinsoft.fw.support.properties.FwCaptchaProperties; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.profile.ClientProfile; import com.tencentcloudapi.common.profile.HttpProfile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; public class QCloudFwCaptchaClient implements FwCaptchaClient { @Autowired private FwCaptchaProperties captchaProperties; private static final Logger logger = LoggerFactory.getLogger(QCloudFwCaptchaClient.class); @Override public boolean verify(String raw, String userIp) { try{ JSONObject jsonObject = JSONObject.parseObject(raw); String ticket = jsonObject.getString("ticket"); String randStr = jsonObject.getString("randStr"); // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密 // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取 Credential cred = new Credential(this.captchaProperties.getQcloudSecretId(), this.captchaProperties.getQcloudSecretKey()); // 实例化一个http选项,可选的,没有特殊需求可以跳过 HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("captcha.tencentcloudapi.com"); // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); // 实例化要请求产品的client对象,clientProfile是可选的 CaptchaClient client = new CaptchaClient(cred, "", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 DescribeCaptchaResultRequest req = new DescribeCaptchaResultRequest(); req.setCaptchaType(9L); req.setTicket(ticket); req.setUserIp(userIp); req.setRandstr(randStr); req.setCaptchaAppId(this.captchaProperties.getQcloudAppId()); req.setAppSecretKey(this.captchaProperties.getQcloudAppSecretKey()); // 返回的resp是一个DescribeCaptchaResultResponse的实例,与请求对象对应 DescribeCaptchaResultResponse resp = client.DescribeCaptchaResult(req); // 输出json格式的字符串回包 Long captchaCode = resp.getCaptchaCode(); return captchaCode.intValue() == 1; } catch (Exception e) { logger.error("[腾讯云] 滑动验证码校验 异常", e); } return false; } }