package com.caimei.service.wechat.impl; import com.caimei.components.RedisService; import com.caimei.mapper.cmMapper.ShopMapper; import com.caimei.model.ResponseJson; import com.caimei.service.wechat.SDKService; import com.caimei.utils.CodeUtil; import com.caimei.utils.SHA1; import com.caimei.utils.WxUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * Description * * @author : Aslee * @date : 2021/7/14 */ @Slf4j @Service public class SDKServiceImpl implements SDKService { @Resource private ShopMapper shopMapper; private RedisService redisService; @Autowired public void setRedisService(RedisService redisService) { this.redisService = redisService; } @Override public ResponseJson> getConfigData(HttpServletRequest request, String appId, String url) throws Exception { String clientIp = request.getHeader("x-forwarded-for"); if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) { clientIp = request.getHeader("Proxy-Client-IP"); } if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) { clientIp = request.getHeader("WL-Proxy-Client-IP"); } if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) { clientIp = request.getHeader("HTTP_CLIENT_IP"); } if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) { clientIp = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) { clientIp = request.getRemoteAddr(); } log.info("clientIp--------->" + clientIp); if (StringUtils.isEmpty(appId)) { return ResponseJson.error("参数异常,请输入appId", null); } if (StringUtils.isEmpty(url)) { return ResponseJson.error("参数异常,请输入url", null); } // 获取供应商公众号appId对应的appSecret String appSecret = shopMapper.getAppSecretByAppId(appId); if (StringUtils.isEmpty(appSecret)) { return ResponseJson.error("参数异常,该公众号不存在", null); } // 获取accessToken String accessToken = null == redisService.get("token:" + appId) ? null : String.valueOf(redisService.get("token:" + appId)); if (StringUtils.isEmpty(accessToken)) { Map tokenMap = WxUtils.getAccessToken(appId, appSecret); if ("-1".equals(tokenMap.get("code"))) { return ResponseJson.error(tokenMap.get("errmsg"), null); } accessToken = tokenMap.get("accessToken"); } // 获取jsapiTicket String ticket = null == redisService.get("ticket:" + appId) ? null : String.valueOf(redisService.get("ticket:" + appId)); if (StringUtils.isEmpty(ticket)) { Map ticketMap = WxUtils.getJsapiTicket(appId, accessToken); if ("-1".equals(ticketMap.get("code"))) { return ResponseJson.error(ticketMap.get("errmsg"), null); } ticket = ticketMap.get("ticket"); } // 生成noncestr(随机字符串)和timestamp(时间戳) String noncestr = CodeUtil.getRandomCharAndNumr(8); String timestamp = String.valueOf(System.currentTimeMillis() / 1000); String signStr = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url; String signature = SHA1.getSHA1(signStr); Map map = new HashMap<>(5); map.put("timestamp", timestamp); map.put("accessToken", accessToken); map.put("ticket", ticket); map.put("noncestr", noncestr); map.put("signature", signature); log.info("生成签名:>>>>" + signature); return ResponseJson.success(map); } @Override public ResponseJson getWxAccountType(String appId) { Integer wxAccountType = shopMapper.getWxAccountTypeByAppId(appId); if (null == wxAccountType) { return ResponseJson.success(3, "公众号不存在", null); } return ResponseJson.success(wxAccountType); } }