后台java发送微信订阅消息
小程序
小程序通过调用requestSubscribeMessage方法,引导用户点击允许接收订阅消息。
小程序js代码:
click:function(){
let templateId = '订阅消息模板id'
wx.requestSubscribeMessage({
tmplIds: [templateId],
success: (res)=> {
debugger
// 如果用户点击允许
if(res[templateId] == 'accept'){
console.log('点击了允许')
//用户接收订阅消息,调用后台发送消息接口
} else {
console.log('点击了取消')
//用户不接收订阅消息
}
},
fail:(res) => {}
})
}
##后端java代码
1、后台控制层Controller层代码
/**
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
*/
package com.jeesite.modules.wxPush.web;
import com.jeesite.common.web.BaseController;
import com.jeesite.modules.wxPush.service.WxPushService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 微信推送Controller
* @author wu
* @version 2021-04-27
*/
@Controller
@RequestMapping(value = "${adminPath}/wxPush/api")
public class WxPushController extends BaseController {
@Autowired
private WxPushService wxPushService;
/**
* 发送微信订阅消息接口
* @return
* @throws Exception
*/
@RequestMapping("/checkToken")
@ResponseBody
public String checkToken(HttpServletRequest request, HttpServletResponse response) throws Exception {
String access_token = getAccess_token();//获取access_token
String openid= '订阅消息的接收者openid';
String templateId = '订阅消息模板id';
String url= '消息跳转页面';
String result = wxPushService.subscribeMessage(access_token,openid,templateId,url);
return result;
}
}
/*
* 获取access_token
* appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来
* */
public String getAccess_token() {
//获取access_token
String appid = "小程序appid";
String appsecret = "小程序密钥";
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
"&appid=" + appid + "&secret=" + appsecret;
if(restTemplate==null){
restTemplate = new RestTemplate();
}
String json = restTemplate.getForObject(url, String.class);
JSONObject myJson = JSONObject.parseObject(json);
return myJson.get("access_token").toString();
}
2、service层代码
package com.jeesite.modules.wxPush.service;
import com.alibaba.fastjson.JSONObject;
import com.jeesite.common.service.CrudService;
import com.jeesite.modules.user.dao.UserInfoDao;
import com.jeesite.modules.user.entity.UserInfo;
import com.jeesite.modules.util.UrlUtil;
import com.jeesite.modules.wxPush.entity.Template;
import com.jeesite.modules.wxPush.entity.TemplateParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(readOnly=true)
public class WxPushService extends CrudService<UserInfoDao, UserInfo> {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Autowired
private RestTemplate restTemplate;
/**
* 发送订阅消息sendTemplateMessage
* 小程序订阅消息,发送服务通知
*
* @param touser 接收者(用户)的 openid
* @param templateId 所需下发的模板消息的id
* @param page 点击模板卡片后的跳转页面,仅限本小程序内的页面。
*/
public String subscribeMessage(String accessToken,String touser, String templateId, String page) {
Template template=new Template();
template.setTemplate_id(templateId);
template.setTouser(touser);
template.setPage(page);
List<TemplateParam> paras=new ArrayList<TemplateParam>();
paras.add(new TemplateParam("time2","2015年01月05日"));
paras.add(new TemplateParam("thing3","请进入小程序查1看"));
template.setTemplateParamList(paras);
String requestUrl="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN";
requestUrl=requestUrl.replace("ACCESS_TOKEN", accessToken);
System.out.println(template.toJSON());
String ret = UrlUtil.sendPost(requestUrl, template.toJSON());
if(ret!=null){
System.out.println(ret);
JSONObject jsonObject = (JSONObject) JSONObject.parse(ret);
int errorCode=jsonObject.getInteger("errcode");
String errorMessage=jsonObject.getString("errmsg");
if(errorCode==0){
System.out.println("Send Success");
}else{
System.out.println("订阅消息发送失败:"+errorCode+","+errorMessage);
}
}
return ret;
}
/*
* 获取access_token
* appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来
* */
public String getAccess_token() {
//获取access_token
String appid = "小程序appid";
String appsecret = "小程序密钥";
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
"&appid=" + appid + "&secret=" + appsecret;
if(restTemplate==null){
restTemplate = new RestTemplate();
}
String json = restTemplate.getForObject(url, String.class);
JSONObject myJson = JSONObject.parseObject(json);
return myJson.get("access_token").toString();
}
}
3、小程序调用发送消息接口,即可实现消息推送