微信小程序订阅消息

HTTPS 调用
请求地址

POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN

消息订阅官方文档:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html

下面的很重要,一定看仔细

订阅消息参数值内容限制说明
参数类别	参数说明	参数值限制	说明
thing.DATA	事物	20个以内字符	可汉字、数字、字母或符号组合
number.DATA	数字	32位以内数字	只能数字,可带小数
letter.DATA	字母	32位以内字母	只能字母
symbol.DATA	符号	5位以内符号	只能符号
character_string.DATA	字符串	32位以内数字、字母或符号	可数字、字母或符号组合
time.DATA	时间	24小时制时间格式(支持+年月日),支持填时间段,两个时间点之间用“~”符号连接	例如:15:01,或:201910115:01
date.DATA	日期	年月日格式(支持+24小时制时间),支持填时间段,两个时间点之间用“~”符号连接	例如:2019101日,或:201910115:01
amount.DATA	金额	1个币种符号+10位以内纯数字,可带小数,结尾可带“元”	可带小数
phone_number.DATA	电话	17位以内,数字、符号	电话号码,例:+86-0766-66888866
car_number.DATA	车牌	8位以内,第一位与最后一位可为汉字,其余为字母或数字	车牌号码:粤A8Z888挂
name.DATA	姓名	10个以内纯汉字或20个以内纯字母或符号	中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
phrase.DATA	汉字	5个以内汉字	5个以内纯汉字,例如:配送中
符号表示除中文、英文、数字外的常见符号,不能带有换行等控制字符。 时间格式支持HH:MM:SS或者HH:MM。 日期包含年月日,为y年m月d日,y年m月、m月d日格式,或者用‘-’、‘/’、‘.’符号连接,如2018-01-012018/01/012018.01.012018-0101-01。 每个模板参数都会以类型为前缀,例如第一个数字模板参数为number01.DATA,第二个为number02.DATA

例如,模板的内容为

姓名: {{name01.DATA}}
金额: {{amount01.DATA}}
行程: {{thing01.DATA}}
日期: {{date01.DATA}}
则对应的json为

{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "data": {
      "name01": {
          "value": "某某"
      },
      "amount01": {
          "value": "¥100"
      },
      "thing01": {
          "value": "广州至北京"
      } ,
      "date01": {
          "value": "2018-01-01"
      }
  }
}

消息模板

import io.geekidea.springbootplus.system.param.wxsmallTemplateParam;
import lombok.Data;

import java.util.List;

@Data
public class wxsmallTemplate {
    private String page; //跳转小程序页面路径
    private String template_id;//模板消息id
    private String touser;//给谁推送 用户的openid (可以调用根据code换openid接口)
    private Object data;//用户接受到的数据
    private String token;//
    
}

模板参数值

import lombok.Data;

@Data
public class wxsmallTemplateParam {
    private String key;
    private String value;
    private String color;
    public wxsmallTemplateParam(String key, String value, String color) {
        this.key = key;
        this.value = value;
        this.color = color;
    }
    public wxsmallTemplateParam(){};



}

使用方法

wxsmallTemplate tem = new wxsmallTemplate();//消息模板
//=====================data数据封装==========================
Map<String,Object>  m= new HashMap<>();//消息模板 data中的值
m.put("微信消息模板key", new wxsmallTemplateParam("自己的key", 自己的值, "(颜色)#DC143C"));
......
//=====================data数据封装end==========================
//=====================数据封装==========================
tem.setTouser(用户在此平台唯一表示[openid]);
//跳转小程序页面路径
tem.setPage("pages/index/index");
tem.setTemplate_id("消息模板id");
tem.setData(m);
//=====================数据封装end==========================

GET------>获取access_token
需要: appid and secret

public String getAccess_token(String appid, String appsecret) {
        String url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appsecret;
        JSONObject jsonObject = doGet1(url);
        System.out.println(jsonObject.toString());
        String errCode = jsonObject.getString("expires_in");
        if (!StringUtils.isEmpty(errCode)  && !StringUtils.isEmpty(jsonObject.getString("access_token").toString())) {
            String token = jsonObject.get("access_token").toString();
            return token;
        } else {
            return null;
        }
    }

获取access_token 的具体方法

public static JSONObject doGet1(String url) {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        JSONObject jsonObject = null;
        try {
            HttpResponse httpResponse = client.execute(httpGet);
            HttpEntity entity = httpResponse.getEntity();
            if (entity != null) {
                String result = EntityUtils.toString(entity, "UTF-8");
                jsonObject = JSONObject.parseObject(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                //        释放连接
                httpGet.releaseConnection();
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return jsonObject;
    }

POST ---------------------》调用消息模板
需要 : 上一步的 access_token and tem (封装的数据)

此处地址(requestUrl) :已在文档开始处贴出

public static boolean sendTemplateMsg1(String token,wxsmallTemplate template) {
        boolean flag = false;
        String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN";
        requestUrl = requestUrl.replace("ACCESS_TOKEN", token);
        JSONObject jsonResult =JSON.parseObject(post(JSONObject.parseObject(JSONArray.toJSON(template).toString()),requestUrl)) ;
        if (jsonResult != null) {
            Integer errorCode = jsonResult.getInteger("errcode");
            String errorMessage = jsonResult.getString("errmsg");
            if (errorCode == 0) {
                flag = true;
            } else {
                System.out.println("模板消息发送失败:" + errorCode + "," + errorMessage);
                flag = false;
            }
        }
        return flag;
    }

POST 请求 具体方法:

//post请求
    public static String post(JSONObject json,String URL) {

        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(URL);
        post.setHeader("Content-Type", "application/json");
        post.addHeader("Authorization", "Basic YWRtaW46");
        String result = "";

        try {

            StringEntity s = new StringEntity(json.toString(), "utf-8");
            s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                    "application/json"));
            post.setEntity(s);

            // 发送请求
            HttpResponse httpResponse = client.execute(post);

            // 获取响应输入流
            InputStream inStream = httpResponse.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    inStream, "utf-8"));
            StringBuilder strber = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null)
                strber.append(line + "\n");
            inStream.close();

            result = strber.toString();
            System.out.println(result);

            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                System.out.println("请求服务器成功,做相应处理");
            } else {
                System.out.println("请求服务端失败");
            }
        } catch (Exception e) {
            System.out.println("请求异常");
            throw new RuntimeException(e);
        }

        return result;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值