SDKServiceImpl.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.caimei.service.wechat.impl;
  2. import com.caimei.components.RedisService;
  3. import com.caimei.mapper.cmMapper.ShopMapper;
  4. import com.caimei.model.ResponseJson;
  5. import com.caimei.service.wechat.SDKService;
  6. import com.caimei.utils.CodeUtil;
  7. import com.caimei.utils.SHA1;
  8. import com.caimei.utils.WxUtils;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import javax.annotation.Resource;
  14. import javax.servlet.http.HttpServletRequest;
  15. import java.util.HashMap;
  16. import java.util.Map;
  17. /**
  18. * Description
  19. *
  20. * @author : Aslee
  21. * @date : 2021/7/14
  22. */
  23. @Slf4j
  24. @Service
  25. public class SDKServiceImpl implements SDKService {
  26. @Resource
  27. private ShopMapper shopMapper;
  28. private RedisService redisService;
  29. @Autowired
  30. public void setRedisService(RedisService redisService) {
  31. this.redisService = redisService;
  32. }
  33. @Override
  34. public ResponseJson<Map<String, String>> getConfigData(HttpServletRequest request, String appId, String url) throws Exception {
  35. String clientIp = request.getHeader("x-forwarded-for");
  36. if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
  37. clientIp = request.getHeader("Proxy-Client-IP");
  38. }
  39. if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
  40. clientIp = request.getHeader("WL-Proxy-Client-IP");
  41. }
  42. if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
  43. clientIp = request.getHeader("HTTP_CLIENT_IP");
  44. }
  45. if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
  46. clientIp = request.getHeader("HTTP_X_FORWARDED_FOR");
  47. }
  48. if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {
  49. clientIp = request.getRemoteAddr();
  50. }
  51. log.info("clientIp--------->" + clientIp);
  52. if (StringUtils.isEmpty(appId)) {
  53. return ResponseJson.error("参数异常,请输入appId", null);
  54. }
  55. if (StringUtils.isEmpty(url)) {
  56. return ResponseJson.error("参数异常,请输入url", null);
  57. }
  58. // 获取供应商公众号appId对应的appSecret
  59. String appSecret = shopMapper.getAppSecretByAppId(appId);
  60. if (StringUtils.isEmpty(appSecret)) {
  61. return ResponseJson.error("参数异常,该公众号不存在", null);
  62. }
  63. // 获取accessToken
  64. String accessToken = null == redisService.get("token:" + appId) ? null : String.valueOf(redisService.get("token:" + appId));
  65. if (StringUtils.isEmpty(accessToken)) {
  66. Map<String, String> tokenMap = WxUtils.getAccessToken(appId, appSecret);
  67. if ("-1".equals(tokenMap.get("code"))) {
  68. return ResponseJson.error(tokenMap.get("errmsg"), null);
  69. }
  70. accessToken = tokenMap.get("accessToken");
  71. }
  72. // 获取jsapiTicket
  73. String ticket = null == redisService.get("ticket:" + appId) ? null : String.valueOf(redisService.get("ticket:" + appId));
  74. if (StringUtils.isEmpty(ticket)) {
  75. Map<String, String> ticketMap = WxUtils.getJsapiTicket(appId, accessToken);
  76. if ("-1".equals(ticketMap.get("code"))) {
  77. return ResponseJson.error(ticketMap.get("errmsg"), null);
  78. }
  79. ticket = ticketMap.get("ticket");
  80. }
  81. // 生成noncestr(随机字符串)和timestamp(时间戳)
  82. String noncestr = CodeUtil.getRandomCharAndNumr(8);
  83. String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
  84. String signStr = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
  85. String signature = SHA1.getSHA1(signStr);
  86. Map<String, String> map = new HashMap<>(5);
  87. map.put("timestamp", timestamp);
  88. map.put("accessToken", accessToken);
  89. map.put("ticket", ticket);
  90. map.put("noncestr", noncestr);
  91. map.put("signature", signature);
  92. log.info("生成签名:>>>>" + signature);
  93. return ResponseJson.success(map);
  94. }
  95. @Override
  96. public ResponseJson<Integer> getWxAccountType(String appId) {
  97. Integer wxAccountType = shopMapper.getWxAccountTypeByAppId(appId);
  98. if (null == wxAccountType) {
  99. return ResponseJson.success(3, "公众号不存在", null);
  100. }
  101. return ResponseJson.success(wxAccountType);
  102. }
  103. }