123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 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<Map<String, String>> 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<String, String> 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<String, String> 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<String, String> 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<Integer> getWxAccountType(String appId) {
- Integer wxAccountType = shopMapper.getWxAccountTypeByAppId(appId);
- if (null == wxAccountType) {
- return ResponseJson.success(3, "公众号不存在", null);
- }
- return ResponseJson.success(wxAccountType);
- }
- }
|