一、基础概念:
准备条件:
1、公众号和小程序必须在同一个公司主体下。
2、在公众号后台需要对小程序进程绑定操作。
公众号提供了两种消息,一种是订阅消息,一种是模板消息。
订阅消息需要用户主动订阅,然后才能接收消息,微信提供前端组件用于用户进行订阅。
模板消息,用户只需要关注公众号,就能发送消息给用户。
本文主要介绍后台服务器接入微信openapi发送模板消息。
登录公众号后台,查看模板消息,进行模板消息选择,如果没有模板消息选项,则需要在更多功能和设置中进行模板消息的开通。
二、接入微信OpenApi发送模板消息。
微信开发文档相关地址:下发统一消息 | 微信开放文档
使用:
https://api./cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN
进行消息的发送。access_token采用微信小程序提供的获取token的api获取
获取token的api:
https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET
统一发送消息的的参数说明:
小程序模板消息已经下架,我们使用公众号的消息模板。
参数中,miniprogram是一个关于小程序的结构体,子参数有小程序的appId和小程序的指定页面,用于用户点击消息,跳转到相应的小程序。
miniprogram未指定的情况下,指定了URL,则点击消息,则会跳转到URL指定的页面。
data参数根据你使用的模板进行参数设置。
基本结构参数如下:
token,参数都组装好后,就可以通过http请求给关注公众号的相应用户发送消息。
三、接入相关代码
1、参数实体
@Datapublic class WechatOAMsg implements Serializable {private static final long serialVersionUID = -1012245204329270134L;/*** openid*/private String touser;/*** 公众号模板消息相关的信息*/private MpTemplateMsg mp_template_msg;@Datapublic static class MpTemplateMsg{/*** 公众号appid,要求与小程序有绑定且同主体*/private String appid;/*** 消息模板ID*/private String template_id;/*** 公众号模板消息所要跳转的url*/private String url;/*** 公众号模板消息所要跳转的小程序,小程序的必须与公众号具有绑定关系*/private Map<String,String> miniprogram;/*** 公众号模板消息的数据,消息json*/private Map<String,Map<String,String>> data;}}
2、返回接收
@Datapublic class WechatOAResult implements Serializable {private static final long serialVersionUID = -8530125244567710894L;/*** 返回码*/private Integer errcode;/*** 消息体*/private String errmsg;}
3、发送方法
/*** 发送微信公众号消息* @param wechatOAMsg* @return*/public WechatOAResult sendWechatOAMsg(WechatOAMsg wechatOAMsg){String postData = JsonUtil.toJsonString(wechatOAMsg);String token = getAccessToken(2);String getOpenUrl = weChatConfiguration.getSendMsgUrl();getOpenUrl = getOpenUrl.replace("ACCESS_TOKEN",token);if (null != postData) {//http 调用第三方接口log.info("send Wechat msg Url :{} postData:{} ", getOpenUrl,postData);String result = HttpUtil.post(getOpenUrl, postData);log.info("send wechat msg result:"+result);WechatOAResult wechatOAResult = JsonUtil.parseObject(result,WechatOAResult.class);return wechatOAResult;}return null;}
其他相关业务代码,请自行补全。