package com.juju.common.utils;
import com.google.gson.Gson;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.*;
/**
* Created on 2021/10/8.
*
* @author 愛上深呼吸
*/
public class WxSendTemplate {
private static final Logger log = LoggerFactory.getLogger(WxSendTemplate.class);
/*
* 微信小程式推送單個使用者
* */
public String pushOneUser(String openid, String formid) {
//擷取access_token
String access_token = getAccess_token("appid", "appserct");
String url ="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+ access_token;
//拼接推送的模版
WxMssVo wxMssVo = new WxMssVo();
wxMssVo.setTouser(openid);//使用者openid
wxMssVo.setTemplate_id(formid);//模版id
List<TemplateParam> paras=new ArrayList<TemplateParam>();
Map<String, TemplateParam> map=new HashMap<String,TemplateParam>();
map.put("thing1",new TemplateParam("000001"));//對應圖檔上面參數
map.put("time2",new TemplateParam("15:01"));
map.put("thing3",new TemplateParam("888.88"));
map.put("thing4",new TemplateParam(decode("請進入小程式查1看A")));
wxMssVo.setData(map);
String json=com.alibaba.fastjson.JSON.toJSONString(wxMssVo);//關鍵
System.out.println(json);
RestTemplate restTemplate=new RestTemplate();
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
ResponseEntity<String> responseEntity =
restTemplate.postForEntity(url, json, String.class);
log.error("小程式推送結果={}", responseEntity.getBody());
return responseEntity.getBody();
}
public static String decode(String param){
String result= null;
try {
result = new String(param.getBytes("utf-8"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/*
* 擷取access_token
* appid和appsecret到小程式背景擷取,當然也可以讓小程式開發人員給你傳過來
* */
public String getAccess_token(String appid, String appsecret) {
//擷取access_token
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
"&appid=" + appid + "&secret=" + appsecret;
String json = new RestTemplate().getForObject(url, String.class);
AccessToken accessToken = new Gson().fromJson(json, AccessToken.class);
System.out.println(accessToken.getAccess_token());
return accessToken.getAccess_token();
}
public static void main(String[] args) {
WxSendTemplate wx =new WxSendTemplate();
wx.pushOneUser("openid","模闆id");
}
}
/*
* 小程式推送所需資料
* */
@Data
class WxMssVo {
private String touser;//使用者openid
private String template_id;//模版id
private String page = "index";//預設跳到小程式首頁
private String miniprogram_state = "trial";//預設跳到小程式首頁
private String lang = "zh_CN";//進入小程式檢視”的語言類型
private Object data;//推送文字
}
/*
* 小程式推送所需資料
* */
@Data
class AccessToken {
private String access_token;
private String expires_in;
}
@Data
class TemplateParam {
private String value;
public TemplateParam(String value){
this.value=value;
}
}
官方位址
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html