JsSignUtil.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package com.ylx.massage.utils;
  2. /**
  3. * @author jianlong
  4. * @date 2024-06-20 16:35
  5. */
  6. import com.ylx.common.config.WechatAccountConfig;
  7. import org.springframework.stereotype.Component;
  8. import javax.annotation.Resource;
  9. import java.util.*;
  10. import java.security.MessageDigest;
  11. import java.security.NoSuchAlgorithmException;
  12. import java.io.UnsupportedEncodingException;
  13. /**
  14. * 官方给的使用js的验证工具
  15. */
  16. @Component
  17. public class JsSignUtil {
  18. @Resource
  19. private WechatAccountConfig wxPayProperties;
  20. public Map<String, String> sign(String url,String jsapi_ticket) {
  21. Map<String, String> ret = new HashMap<String, String>();
  22. String nonce_str = create_nonce_str();
  23. String timestamp = create_timestamp();
  24. String string1;
  25. String signature = "";
  26. //注意这里参数名必须全部小写,且必须有序
  27. string1 = "jsapi_ticket=" + jsapi_ticket +
  28. "&noncestr=" + nonce_str +
  29. "&timestamp=" + timestamp +
  30. "&url=" + url;
  31. System.out.println("string1="+string1);
  32. try
  33. {
  34. MessageDigest crypt = MessageDigest.getInstance("SHA-1");
  35. crypt.reset();
  36. crypt.update(string1.getBytes("UTF-8"));
  37. signature = byteToHex(crypt.digest());
  38. }
  39. catch (NoSuchAlgorithmException e)
  40. {
  41. e.printStackTrace();
  42. }
  43. catch (UnsupportedEncodingException e)
  44. {
  45. e.printStackTrace();
  46. }
  47. ret.put("url", url);
  48. ret.put("jsapi_ticket", jsapi_ticket);
  49. ret.put("nonceStr", nonce_str);
  50. ret.put("timestamp", timestamp);
  51. ret.put("signature", signature);
  52. ret.put("appId", wxPayProperties.getMpAppId());//公众号appid
  53. System.out.println("1.ticket(原始)="+jsapi_ticket);
  54. System.out.println("2.url="+ret.get("url"));
  55. System.out.println("3.jsapi_ticket(处理后)="+ret.get("jsapi_ticket"));
  56. System.out.println("4.nonceStr="+ret.get("nonceStr"));
  57. System.out.println("5.signature="+ret.get("signature"));
  58. System.out.println("6.timestamp="+ret.get("timestamp"));
  59. return ret;
  60. }
  61. /**
  62. * 随机加密
  63. * @param hash
  64. * @return
  65. */
  66. private static String byteToHex(final byte[] hash) {
  67. Formatter formatter = new Formatter();
  68. for (byte b : hash)
  69. {
  70. formatter.format("%02x", b);
  71. }
  72. String result = formatter.toString();
  73. formatter.close();
  74. return result;
  75. }
  76. /**
  77. * 产生随机串--由程序自己随机产生
  78. * @return
  79. */
  80. private String create_nonce_str() {
  81. return UUID.randomUUID().toString();
  82. }
  83. /**
  84. * 由程序自己获取当前时间
  85. * @return
  86. */
  87. private String create_timestamp() {
  88. return Long.toString(System.currentTimeMillis() / 1000);
  89. }
  90. }