小程序订阅消息

小程序给微信用户推送通知,是订阅消息不是模板消息,模板消息已经不能用了,这个是我自己用公司小程序写的练习版,点击按钮后推送消息,wxml代码:

<button bindtap="aaa">按钮</button>

js代码:

  aaa: function () {
    wx.requestSubscribeMessage({
      tmplIds: ['Dw-Dlh5KRd6ce7wUlf259QaaApG7dhdQHN50BOJot1w'],
      success(res) {
        if (res['Dw-Dlh5KRd6ce7wUlf259QaaApG7dhdQHN50BOJot1w'] == 'accept'){
          wx.request({
            url: app.globalData.url + '/appInterface/wxPush.do',
            method: 'POST',
            header: { 'Content-Type': 'application/x-www-form-urlencoded' },
            data: {
              userOpenid: app.globalData.openid
            },
            success: function (res) {
              console.log(res)
            }
          })
        }
      }
    })
  },

java控制器代码:

@RequestMapping("/wxPush")
	@ResponseBody
	public Json wxPush(String userOpenid){
		logger.info("-----------开始微信推送接口接口-------------");
		Json j = new Json();
		j.setSuccess(false);
		logger.info("userOpenid:" + userOpenid);
		try{
			SendWxMessage sendWxMessage = new SendWxMessage();
			j = sendWxMessage.push(userOpenid);
			if(!PbUtils.isEmpty(j.getObj())){
				j.setMsg("推送成功");
				j.setSuccess(true);
				logger.error("------------"+j.getMsg()+"------------");
			}else{
				j.setMsg("推送失败");
				logger.error("------------"+j.getMsg()+"------------");
			}
			
		}catch(Exception e){
			e.printStackTrace();
			j.setMsg("微信推送接口异常" + e.getMessage());
			logger.error(e.getMessage());
		}
		logger.info("-----------结束微信推送接口接口-------------");
		return j;
	}

微信工具类代码:

package com.gt.utils.wx;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.gt.pageModel.Json;

public class SendWxMessage  {
	ConfigInfo configInfo = new ConfigInfo();
    	  /*
         * 发送订阅消息
         * */
        public Json push(String openid) {
        	//订阅模板id
        	String template_id = "Dw-Dlh5KRd6ce7wUlf259QaaApG7dhdQHN50BOJot1w";
        	Json j = new Json();
            RestTemplate restTemplate = new RestTemplate();
            //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取)
            String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken(configInfo.getWxAppId(),configInfo.getWxAppSecret());
            //拼接推送的模版
            WxMssVo wxMssVo = new WxMssVo();
            wxMssVo.setTouser(openid);//用户的openid(要发送给那个用户,通常这里应该动态传进来的)
            wxMssVo.setTemplate_id(template_id);//订阅消息模板id
            wxMssVo.setPage("pages/main/main");

            Map<String, TemplateData> m = new HashMap<>(5);
            //练习代码,数据是写死的,map的key值必须和微信公众平台中使用模板的名称一样
            m.put("date2", new TemplateData("2019年10月15日 00:00:00"));
            m.put("date3", new TemplateData("2019年10月16日 00:00:00"));
            m.put("amount4", new TemplateData("¥100"));
            m.put("phrase7", new TemplateData("转账成功"));
            m.put("thing9", new TemplateData("好的"));
            wxMssVo.setData(m);
            ResponseEntity<String> responseEntity =
                    restTemplate.postForEntity(url, wxMssVo, String.class);
            j.setObj(responseEntity.getBody());
            return j;
        }

        public String getAccessToken(String appid, String appsecret) {
            RestTemplate restTemplate = new RestTemplate();
            Map<String, String> params = new HashMap<>();
            params.put("APPID", appid);  //
            params.put("APPSECRET", appsecret);  //
            ResponseEntity<String> responseEntity = restTemplate.getForEntity(
                    "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params);
            String body = responseEntity.getBody();
            JSONObject object = JSON.parseObject(body);
            String Access_Token = object.getString("access_token");
            String expires_in = object.getString("expires_in");
            System.out.println("有效时长expires_in:" + expires_in);
            return Access_Token;
        }
    
}

你可能感兴趣的:(小程序,java)