package com.doumee.core.wx; import com.alibaba.fastjson.JSONObject; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.HttpsUtil; import com.doumee.dao.business.model.Goodsorder; import com.doumee.dao.business.model.Member; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2022/12/7 17:27 */ @Slf4j public class SendWxMessage { public static final String APP_ACCESS_TOKEN_URL= "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxcd2b89fd2ff065f8&secret=1ceb7c9dff3c4330d653adc3ca55ea24"; private static AccessToken at; private static String programUrl = "pages/orderDetail/orderDetail?orderId="; private static String programUserUrl = "pages/balanceDetails/balanceDetails"; /** * 取消订单 通知 * @param member 会员信息 * @param goodsName 商品名称 */ public static void orderCancel(Goodsorder goodsorder,Member member,String goodsName){ RestTemplate restTemplate = new RestTemplate(); String accessToken = getToken(); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVo = new WxMsgVO(); //用户的openid(要发送给那个用户) wxMsgVo.setTouser(member.getOpenId()); //订阅消息模板id wxMsgVo.setTemplate_id("dz-O6n3r-N60q0M0vDUMDbc-vnX5p3VIPgGxkXn0_vE"); Map m = new HashMap<>(4); m.put("character_string1", new TemplateData(goodsorder.getCode().toString())); m.put("thing4", new TemplateData(goodsName + " 等")); m.put("time5", new TemplateData(DateUtil.getDate(new Date(),"yyyy-MM-dd"))); m.put("thing2", new TemplateData(goodsorder.getCancelInfo())); wxMsgVo.setPage(programUrl +goodsorder.getId()); wxMsgVo.setData(m); ResponseEntity responseEntity = restTemplate.postForEntity(url, wxMsgVo, String.class); log.info("微信小程序->报价订阅消息发送日志:{}",JSONObject.toJSONString(responseEntity)); } /** * 订单发货通知 * @param goodsorder * @param godosName * @param member * @throws Exception */ public static void orderSendNotice(Goodsorder goodsorder, String godosName, Member member){ RestTemplate restTemplate = new RestTemplate(); String accessToken = getToken(); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVo = new WxMsgVO(); //用户的openid(要发送给那个用户) wxMsgVo.setTouser(member.getOpenId()); //订阅消息模板id wxMsgVo.setTemplate_id("JngxRyDgYGzdZl1lA6Yo0GmqI_uBnerjQToFBXgVmlk"); Map m = new HashMap<>(5); m.put("thing1", new TemplateData(godosName+" 等")); m.put("character_string2", new TemplateData(goodsorder.getCode().toString())); m.put("date3", new TemplateData(DateUtil.getDate(goodsorder.getKdDate(),"yyyy-MM-dd"))); m.put("thing4", new TemplateData(goodsorder.getKdName())); m.put("character_string5", new TemplateData(goodsorder.getKdCode())); wxMsgVo.setPage(programUrl+goodsorder.getId()); wxMsgVo.setData(m); ResponseEntity responseEntity = restTemplate.postForEntity(url, wxMsgVo, String.class); log.info("微信小程序->报价订阅消息发送日志:{}",JSONObject.toJSONString(responseEntity)); } /** * 余额变动通知 * @param changeIntegral 变动余额 * @param member 会员信息 * @throws Exception */ public static void integralChangeNotice(Member member,BigDecimal changeIntegral){ RestTemplate restTemplate = new RestTemplate(); String accessToken = getToken(); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVo = new WxMsgVO(); //用户的openid(要发送给那个用户) wxMsgVo.setTouser(member.getOpenId()); //订阅消息模板id wxMsgVo.setTemplate_id("8933kvcfxKy3f0zrnlCQaPy2nPDwjk7S4KeqLjU7vVY"); Map m = new HashMap<>(3); m.put("name5", new TemplateData(member.getName())); m.put("amount6", new TemplateData(changeIntegral.toString())); m.put("amount1", new TemplateData((member.getIntegral().subtract(changeIntegral)).toString())); m.put("time8", new TemplateData(DateUtil.getDate(new Date(),"yyyy-MM-dd"))); wxMsgVo.setPage(programUserUrl); wxMsgVo.setData(m); ResponseEntity responseEntity = restTemplate.postForEntity(url, wxMsgVo, String.class); log.info("微信小程序->订单取消通知息发送日志:{}",JSONObject.toJSONString(responseEntity)); } public static String getToken(){ if (at == null || at.isExpired()){ getAccessToken(); } return at.getAccessToken(); } /** * 获取token */ private static void getAccessToken() { //发送请求获取token JSONObject token = null; try { token = JSONObject.parseObject(HttpsUtil.get(APP_ACCESS_TOKEN_URL,false)); } catch (Exception e) { e.printStackTrace(); } JSONObject jsonObject = token; String accessToken = (String) jsonObject.get("access_token"); Integer expiresIn = (Integer) jsonObject.get("expires_in"); //创建token对象,并存储 at = new AccessToken(accessToken,String.valueOf(expiresIn)); } }