TencentCloudAPIDemo.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.miaxis.common.utils;
  2. import org.springframework.context.annotation.Configuration;
  3. import java.io.UnsupportedEncodingException;
  4. import java.net.URLEncoder;
  5. import java.util.Random;
  6. import java.util.TreeMap;
  7. import javax.crypto.Mac;
  8. import javax.crypto.spec.SecretKeySpec;
  9. import javax.xml.bind.DatatypeConverter;
  10. /**
  11. * @author wwl
  12. * @version 1.0
  13. * @date 2021/7/6 10:44
  14. */
  15. @Configuration
  16. public class TencentCloudAPIDemo {
  17. private final static String CHARSET = "UTF-8";
  18. public static String sign(String s, String key, String method) throws Exception {
  19. Mac mac = Mac.getInstance(method);
  20. SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(CHARSET), mac.getAlgorithm());
  21. mac.init(secretKeySpec);
  22. byte[] hash = mac.doFinal(s.getBytes(CHARSET));
  23. return DatatypeConverter.printBase64Binary(hash);
  24. }
  25. public static String getStringToSign(TreeMap<String, Object> params) {
  26. StringBuilder s2s = new StringBuilder("GETcvm.tencentcloudapi.com/?");
  27. // 签名时要求对参数进行字典排序,此处用TreeMap保证顺序
  28. for (String k : params.keySet()) {
  29. s2s.append(k).append("=").append(params.get(k).toString()).append("&");
  30. }
  31. return s2s.toString().substring(0, s2s.length() - 1);
  32. }
  33. public static String getUrl(TreeMap<String, Object> params) throws UnsupportedEncodingException {
  34. StringBuilder url = new StringBuilder("https://cvm.tencentcloudapi.com/?");
  35. // 实际请求的url中对参数顺序没有要求
  36. for (String k : params.keySet()) {
  37. // 需要对请求串进行urlencode,由于key都是英文字母,故此处仅对其value进行urlencode
  38. url.append(k).append("=").append(URLEncoder.encode(params.get(k).toString(), CHARSET)).append("&");
  39. }
  40. return url.toString().substring(0, url.length() - 1);
  41. }
  42. public static String getSignature() throws Exception {
  43. TreeMap<String, Object> params = new TreeMap<String, Object>(); // TreeMap可以自动排序
  44. // 实际调用时应当使用随机数,例如:params.put("Nonce", new Random().nextInt(java.lang.Integer.MAX_VALUE));
  45. params.put("Nonce", new Random().nextInt(java.lang.Integer.MAX_VALUE)); // 公共参数
  46. // 实际调用时应当使用系统当前时间,例如: params.put("Timestamp", System.currentTimeMillis() / 1000);
  47. params.put("Timestamp", System.currentTimeMillis() / 1000); // 公共参数
  48. params.put("SecretId", "AKIDwISNOFsJXYGjy89FJI9UnzuZFgTtRgFe"); // 公共参数
  49. params.put("Action", "GetVideoInfo"); // 公共参数
  50. params.put("Version", "2017-03-12"); // 公共参数
  51. params.put("Region", "ap-guangzhou"); // 公共参数
  52. params.put("Limit", 20); // 业务参数
  53. params.put("Offset", 0); // 业务参数
  54. params.put("InstanceIds.0", "ins-09dx96dg"); // 业务参数
  55. params.put("Signature", sign(getStringToSign(params), "IK5af8MJzPoKbdQxDCtKWR5T5PSEkyDB", "HmacSHA1")); // 公共参数
  56. System.out.println(getUrl(params));
  57. return getUrl(params);
  58. }
  59. }