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<String, TemplateData> 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<String> 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<String, TemplateData> 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<String> 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<String, TemplateData> 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<String> 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));
|
}
|
|
}
|