xiaoyong931011
2023-08-15 84c7afc62bb1eb6f5d80d2d9928d0d11a1ffbdda
src/main/java/cc/mrbird/febs/pay/util/WechatEventUtil.java
@@ -1,7 +1,11 @@
package cc.mrbird.febs.pay.util;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrFormatter;
@@ -50,6 +54,10 @@
    @Autowired
    RestTemplate restTemplate;
    @Autowired
    MallMemberMapper mallMemberMapper;
    private static Logger log = LoggerFactory.getLogger(WechatEventUtil.class);
    /**
@@ -95,27 +103,46 @@
        log.info("事件处理:event:{}、msgType:{}、toUserName:{}、fromUserName:{}", eventType, msgType, toUserName, fromUserName);
        if ("event".equals(msgType)) {
            if ("subscribe".equals(eventType)) {
                result = imgTextMsg(toUserName, fromUserName, "欢迎光临", "欢迎光临【药王谷铺子】,点击左下角【药王谷铺子】-【商城】,进入商城。", "图片地址", "点击后跳转的路径");
                result = imgTextMsg(toUserName, fromUserName, "欢迎光临", "欢迎光临【药王谷铺子】,点击左下角【药王谷铺子】-【商城】,进入商城。", "https://excoin.oss-cn-hangzhou.aliyuncs.com/uploadeFile/1690447963307584cd27ac623427f8c07ed1d3bbe4279.png", "http://ywgouth.meiao.biz/");
                log.info("新增关注事件:toUserName{}、fromUserName{}", toUserName, fromUserName);
                StringBuffer stringBuffer = new StringBuffer();
                if(map.containsKey("EventKey")){
                if(map.containsKey("EventKey") && ObjectUtil.isNotEmpty(map.get("EventKey"))){
                    /**
                     * 扫带参数二维码
                     */
                    String eventKey = map.get("EventKey");
                    if(StrUtil.isNotEmpty(eventKey)){
                        stringBuffer.append(eventKey);
                        stringBuffer.append("-");
                        String[] eventKeyStr = StrUtil.split(eventKey, "_");
                        stringBuffer.append(eventKeyStr[1]);
                        stringBuffer.append("@");
                        stringBuffer.append(fromUserName);
                        agentProducer.sendMemberSubScanMsg(stringBuffer.toString());
                    }
                }else{
                    /**
                     * 普通关注事件
                     */
                    agentProducer.sendMemberSubMsg(fromUserName);
                }
                /**
                 * 普通关注事件
                 */
                agentProducer.sendMemberSubMsg(fromUserName);
            } else if ("unsubscribe".equals(eventType)) {
                log.info("取消关注事件:toUserName{}、fromUserName{}", toUserName, fromUserName);
                //取消关注则退出商城
                MallMember mallMember = mallMemberMapper.selectMemberByOpenId(fromUserName);
                mallMember.setSubStatus(MallMember.SUB_STATUS_DISABLED);
                mallMemberMapper.updateById(mallMember);
                if(ObjectUtil.isNotEmpty(mallMember)){
                    String redisKey = AppContants.XCX_LOGIN_PREFIX + mallMember.getId();
                    String existToken = redisUtils.getString(redisKey);
                    if (StrUtil.isNotBlank(existToken)) {
                        Object o = redisUtils.get(existToken);
                        if (ObjectUtil.isNotEmpty(o)) {
                            redisUtils.del(existToken);
                        }
                    }
                    redisUtils.del(existToken);
                    redisUtils.del(AppContants.XCX_LOGIN_PREFIX + mallMember.getId());
                }
            }else if ("SCAN".equals(eventType)) {
                log.info("扫码关注事件:toUserName{}、fromUserName{}", toUserName, fromUserName);
                if(map.containsKey("EventKey")){
@@ -125,12 +152,19 @@
                     */
                    String eventKey = map.get("EventKey");
                    if(StrUtil.isNotEmpty(eventKey)){
//                        String[] eventKeyStr = StrUtil.split(eventKey, "_");
//                        stringBuffer.append(eventKeyStr[1]);
                        stringBuffer.append(eventKey);
                        stringBuffer.append("@");
                        stringBuffer.append(fromUserName);
                        agentProducer.sendMemberSubScanMsg(stringBuffer.toString());
                    }
                }
            }else if ("VIEW".equals(eventType)) {
                /**
                 * 普通关注事件
                 */
                agentProducer.sendMemberSubMsg(fromUserName);
            }
        }
        return result;
@@ -329,35 +363,35 @@
//
//    String timestamp = String.format("%010d", System.currentTimeMillis() / 1000);
//
//    public static String createSignature(String nocestr, String ticket, String timestamp, String url) {
//        // 这里参数的顺序要按照 key 值 ASCII 码升序排序
//        String s = "jsapi_ticket=" + ticket + "&noncestr=" + nocestr
//                + "&timestamp=" + timestamp + "&url=" + url;
//        return SHA1(s);
//    }
    public static String createSignature(String nocestr, String ticket, String timestamp, String url) {
        // 这里参数的顺序要按照 key 值 ASCII 码升序排序
        String s = "jsapi_ticket=" + ticket + "&noncestr=" + nocestr
                + "&timestamp=" + timestamp + "&url=" + url;
        return SHA1(s);
    }
//
//    public static String SHA1(String decript) {
//        try {
//            MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
//            digest.update(decript.getBytes());
//            byte messageDigest[] = digest.digest();
//            // Create Hex String
//            StringBuffer hexString = new StringBuffer();
//            // 字节数组转换为 十六进制 数
//            for (int i = 0; i < messageDigest.length; i++) {
//                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
//                if (shaHex.length() < 2) {
//                    hexString.append(0);
//                }
//                hexString.append(shaHex);
//            }
//            return hexString.toString();
//
//        } catch (NoSuchAlgorithmException e) {
//            e.printStackTrace();
//        }
//        return "";
//    }
    public static String SHA1(String decript) {
        try {
            MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static void main(String[] args) {
    }
@@ -369,28 +403,15 @@
        if(ObjectUtil.isEmpty(redisUtils.get("ticket"))){
            ticket = getTicket();
        }
        Map<String, String> data = new HashMap<>();
        //生成10位时间戳
        String timestamp = String.format("%010d", System.currentTimeMillis() / 1000);
        data.put("timestamp", timestamp );
        //生成随机字符串
        String nonceStr = createNonceStr();
        data.put("noncestr", nonceStr );
        data.put("url", url);
        data.put("jsapi_ticket", ticket);
        String signature = null;
        try {
            signature = generateSignature(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String signature = createSignature(nonceStr, ticket, timestamp, url);
        //签名算法
        String sha1 = SHA1(signature);
        Map<String, Object> map = new HashMap<>(16);
        map.put("timestamp", timestamp);
        map.put("nonceStr", nonceStr);
        map.put("signature", sha1);
        map.put("signature", signature);
        return map;
    }
@@ -444,28 +465,28 @@
    /**
     *SHA1签名算法
     */
    public static String SHA1(String decript) {
        try {
            MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
//    public static String SHA1(String decript) {
//        try {
//            MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
//            digest.update(decript.getBytes());
//            byte messageDigest[] = digest.digest();
//            // Create Hex String
//            StringBuffer hexString = new StringBuffer();
//            // 字节数组转换为 十六进制 数
//            for (int i = 0; i < messageDigest.length; i++) {
//                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
//                if (shaHex.length() < 2) {
//                    hexString.append(0);
//                }
//                hexString.append(shaHex);
//            }
//            return hexString.toString();
//
//        } catch (NoSuchAlgorithmException e) {
//            e.printStackTrace();
//        }
//        return "";
//    }
    /**