| | |
| | | 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; |
| | |
| | | @Autowired |
| | | RestTemplate restTemplate; |
| | | |
| | | |
| | | @Autowired |
| | | MallMemberMapper mallMemberMapper; |
| | | |
| | | private static Logger log = LoggerFactory.getLogger(WechatEventUtil.class); |
| | | |
| | | /** |
| | |
| | | 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")){ |
| | |
| | | */ |
| | | 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; |
| | |
| | | // |
| | | // 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 |
| | | // + "×tamp=" + 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 |
| | | + "×tamp=" + 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) { |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | /** |
| | | *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 ""; |
| | | // } |
| | | |
| | | |
| | | /** |