import cn.netuo.saas.exception.RRException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.apache.commons.codec.digest.HmacAlgorithms;
import org.apache.commons.codec.digest.HmacUtils;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
/**
* 腾讯云的工具类,创建nds解析
* @author guolinyuan
*/
public class TencentUtil
{
private static final String secretId = "aaa";
private static final String secretKey = "bbb";
public static void main(String[] args) throws Exception
{
String domain = "aaa.com";
String subDomain = "xx";
String recordLine = "默认";
String value = "118.25.61.111";
String recordType = "A";
DNSEntity nds = new DNSEntity(domain,subDomain,recordType,recordLine,value);
createDNS(nds);
}
public static void createDNSSimple(String domain, String subDomain, String value)
{
createDNS(new DNSEntity(domain,subDomain,value));
}
public static void createDNS(DNSEntity dns)
{
TreeMap<String,String> ps = new TreeMap<>();
//公共参数
ps.put("Timestamp",String.valueOf(System.currentTimeMillis() / 1000L));
ps.put("Nonce",String.valueOf(Math.abs((new SecureRandom()).nextInt())));
ps.put("SecretId",secretId);
ps.put("SignatureMethod","HmacSHA256");
//业务参数
ps.put("Action","RecordCreate");
ps.put("domain",dns.getDomain());
ps.put("subDomain",dns.getSubDomain());
ps.put("recordLine",dns.getRecordLine());
ps.put("value",dns.getValue());
ps.put("recordType",dns.getRecordType());
String url = "cns.api.qcloud.com/v2/index.php";
String result = signAndPost(url,ps);
JSONObject rb = JSONObject.parseObject(result);
if (0 == rb.getInteger("code"))
{
throw new RRException(rb.getString("message"));
}
}
/**
* 信息签名后发出
* @return
*/
private static String signAndPost(String url,TreeMap<String,String> params)
{
String method = "GET";
StringBuilder sb = new StringBuilder();
sb.append(method).append(url).append("?");
boolean first = true;
for (Map.Entry<String,String> o :params.entrySet())
{
if (first)
{
sb.append(o.getKey()).append("=").append(o.getValue());
first = false;
}
else
{
sb.append("&").append(o.getKey()).append("=").append(o.getValue());
}
}
//签名
String signature = Base64.getMimeEncoder().encodeToString(new HmacUtils(HmacAlgorithms.HMAC_SHA_256, secretKey).hmac(sb.toString()));
params.put("Signature",signature);
return HttpUtils.get("https://" + url, params);
}
@Data
static class DNSEntity
{
String domain;
String subDomain;
String recordType;
String recordLine;
String value;
public DNSEntity()
{
}
public DNSEntity(String domain, String subDomain, String value)
{
this.domain = domain;
this.subDomain = subDomain;
this.value = value;
}
public DNSEntity(String domain, String subDomain, String recordType, String recordLine, String value)
{
this.subDomain = subDomain;
this.domain = domain;
this.recordType = recordType;
this.recordLine = recordLine;
this.value = value;
}
}
}