柚子快報(bào)邀請(qǐng)碼778899分享:微信小程序向公眾號(hào)推送消息模板
柚子快報(bào)邀請(qǐng)碼778899分享:微信小程序向公眾號(hào)推送消息模板
序言
由于微信小程序長(zhǎng)期訂閱的消息模板全部失效以后,對(duì)于小程序的消息推送可以改成往公眾號(hào)推。 這里將介紹如何使用小程序向公眾號(hào)推送消息,并且消息可以跳轉(zhuǎn)到小程序
準(zhǔn)備
1、微信公眾平臺(tái)注冊(cè)服務(wù)號(hào)(訂閱號(hào)是不可以推送的)與小程序,兩者都需要認(rèn)證并且認(rèn)證主體是一致
2、微信開(kāi)放平臺(tái)注冊(cè)賬號(hào)(該賬號(hào)也需要認(rèn)證),綁定小程序與公眾號(hào) 3、公眾號(hào)根據(jù)想要的模板消息綁定服務(wù)類(lèi)目,去模板消息中先挑選你的模板消息。(如果是剛注冊(cè)的公眾號(hào)還需要去新的功能頁(yè)面添加模板消息功能,需要微信審核,不過(guò)很快) 4、微信公眾號(hào)綁定小程序 5、小程序與公眾號(hào)配置服務(wù)器的ip地址白名單
整體實(shí)現(xiàn)流程
通過(guò)在開(kāi)放平臺(tái)綁定的公眾號(hào)與小程序后,我們?cè)谡{(diào)用微信code2Session接口的時(shí)候會(huì)返回unionid(雖然我們推送用不上哈哈),只要綁定以后,就可以通過(guò)小程序的openid調(diào)用微信的下發(fā)統(tǒng)一消息接口推送消息到公眾號(hào)去了
實(shí)現(xiàn)代碼(java)
1、消息推送接口文檔 2、小程序access_token獲取接口文檔
需要先獲取小程序的access_token
private String getAppletAccessToken() {
// 因?yàn)槲⑿庞邢拗拼螖?shù)跟有效期,所以需要存在redis中
String token = redisCache.getCacheObject(CacheConstants.WECHAT_MINI_ACCESS_TOKEN);
// token失效或者為空
if (StringUtils.isEmpty(token)) {
HashMap
map.put("appid", weAppAppId); // 小程序appid
map.put("secret", weAppSecret); // 小程序secret
map.put("grant_type", "client_credential");
// 發(fā)送Http的post請(qǐng)求
String resp = HttpUtils.sendPostJson(GET_ACCESS_TOKEN_URL, JSON.toJSONString(map), null);
log.info("獲取小程序accessToken返回:" + resp);
if (StringUtils.isEmpty(resp) || !resp.contains("access_token")) {
throw new ServiceException("獲取小程序accessToken失敗");
}
token = JSONObject.parseObject(resp).getString("access_token");
// 設(shè)置為1.9h(有效期2h)
redisCache.setCacheObject(CacheConstants.WECHAT_MINI_ACCESS_TOKEN, token,
7100, TimeUnit.SECONDS);
}
return token;
}
封裝下發(fā)消息參數(shù)實(shí)體(僅參考,照著接口文檔封)
/**
* 微信下發(fā)統(tǒng)一消息參數(shù)
*
* @author quan
* @date 2023/9/15 16:42
*/
@Data
@NoArgsConstructor
public class PushMsgParams {
/**
* 用戶(hù)openid,可以是小程序的openid,
* 也可以是mp_template_msg.appid對(duì)應(yīng)的公眾號(hào)的openid
*/
private String touser;
/**
* 公眾號(hào)模板消息
*/
private MpTemplateMsg mp_template_msg;
public PushMsgParams(String touser) {
this.touser = touser;
}
}
/**
* 小程序模板消息相關(guān)的信息,可以參考小程序模板消息接口;
* 有此節(jié)點(diǎn)則優(yōu)先發(fā)送小程序模板消息;
* (小程序模板消息已下線(xiàn),不用傳此節(jié)點(diǎn))
*
* @author quan
* @date 2023/9/15 16:48
*/
@Data
public class MpTemplateMsg {
/**
* 公眾號(hào)appid,要求與小程序有綁定且同主體
*/
private String appid;
/**
* 公眾號(hào)模板id
*/
private String template_id;
/**
* 公眾號(hào)模板消息所要跳轉(zhuǎn)的url
*/
private String url;
/**
* 公眾號(hào)模板消息所要跳轉(zhuǎn)的小程序,
* 小程序的必須與公眾號(hào)具有綁定關(guān)系
*/
private Map
/**
* 公眾號(hào)模板消息的數(shù)據(jù)
*/
private Map
/**
* 構(gòu)建data數(shù)據(jù)
*/
public void createData(Map
if (null == data || data.isEmpty()){
return;
}
Map
for (Map.Entry
Map
valMap.put("value", entry.getValue());
map.put(entry.getKey(), valMap);
}
this.data = map;
}
}
消息推送方法封裝
/**
* 下發(fā)統(tǒng)一消息接口
*
* @param pushMsgParams 下發(fā)參數(shù)
* @param data 模板參數(shù)
*/
public void sendUniformMessage(PushMsgParams pushMsgParams, Map
String accessToken = getAppletAccessToken();
MpTemplateMsg templateMsg = new MpTemplateMsg();
// 公眾號(hào)appid
templateMsg.setAppid(mpAppId);
// 前面準(zhǔn)備的模板消息的id
templateMsg.setTemplate_id(templateId);
// 推送參數(shù),格式為keyword,value??煽聪挛⑿盘峁┑膁emo會(huì)清楚點(diǎn)
templateMsg.createData(data);
// 跳轉(zhuǎn)小程序
HashMap
miniPro.put("appid", weAppAppId);
miniPro.put("pagepath", "");
templateMsg.setMiniprogram(miniPro);
pushMsgParams.setMp_template_msg(templateMsg);
// 發(fā)送Http請(qǐng)求
// SEND_UNIFORM_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token="
String resp = HttpUtils.sendPostJson(SEND_UNIFORM_MESSAGE + accessToken, JSON.toJSONString(pushMsgParams), null);
log.info("微信下發(fā)統(tǒng)一消息接口返回:{}", resp);
JSONObject result = JSON.parseObject(resp);
if (!"0".equals(result.getString("errcode"))) {
throw new ServiceException("微信消息推送失敗," + result.getString("errMsg"));
}
}
業(yè)務(wù)調(diào)用推送代碼
for (SysUser user : users) {
// 小程序或公眾號(hào)用戶(hù)的openid都可以推
PushMsgParams pushMsgParams = new PushMsgParams(user.getOpenid());
HashMap
data.put("character_string2", event.getFlightNo());
data.put("thing10", event.getStartPlace());
data.put("thing11", event.getDestPlace());
data.put("time3", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, event.getFlightStartTime()));
data.put("thing9", "請(qǐng)及時(shí)處理關(guān)注事件");
weChatUtil.sendUniformMessage(pushMsgParams, data);
}
推送效果,可直接跳轉(zhuǎn)小程序
柚子快報(bào)邀請(qǐng)碼778899分享:微信小程序向公眾號(hào)推送消息模板
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。