天天看點

java 微信小程式訂閱推送消息

java 微信小程式訂閱推送消息
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