微信公众号消息推送流

一、前期准备工作;

1、需要申请私人/公司的测试号-- 参考这篇文章 ,微信公众平台测试帐号申请 - 简书 (jianshu.com)

       1.1、需要响应微信发送的Token请求;

         注意:这里的端口必须是80或443,http请求或https请求。

        1.2、响应代码:

@RestController
public class AgentWeixinReplyController {
 
	@RequestMapping(value = "/wx/reply.do")
	public void get(HttpServletRequest request, HttpServletResponse response) throws Exception {

		Enumeration pNames = request.getParameterNames();
		while (pNames.hasMoreElements()) {
			String name = (String) pNames.nextElement();
			String value = request.getParameter(name);
			String log = "name =" + name + "     value =" + value;
		}
		String signature = request.getParameter("signature");/// 微信加密签名
		String timestamp = request.getParameter("timestamp");/// 时间戳
		String nonce = request.getParameter("nonce"); /// 随机数
		String echostr = request.getParameter("echostr"); // 随机字符串
		PrintWriter out = response.getWriter();
 
		 if (SignUtil.checkSignature(signature, timestamp, nonce)) {
			 System.out.println("校验成功!");
	          out.print(echostr);  
	      } 
		
		out.close();
		out = null;
 
	}
 
}

配置端口(我这里选择的是 443端口):

 1.3、由于响应微信发送的Token请求是在公网上面的,所以需要把你的响应程序配置在公网上面,有两种方法,一是将程序打包配置在服务器上(有云服务的可以选择,并开放一下80或443端口具体根据application的配置决定),二是去网上找内网穿透工具可以将本地电脑配置为公网(参考这篇文章:(10条消息) 内网穿透-把自己的电脑部署为公网可访问的服务器_飞鸿先森的博客-CSDN博客)。

配置完成就可以使用了。

2、查阅开发文档

1.1、进入微信公众平台

1.2、 选择上面的公司选择"服务号",个人选择"订阅号",我这里选择”订阅号“--》开发文档,点击进入;

在 基础消息能力--》模板消息接口,去查看公众号模板消息推送的接口 ,模板消息 | 微信开放文档

1.3、调用流程;

1.4、获取access_token代码:

public String getAccessToken() {
       /* 这里是固定每次调用都get凭证,实际可以使用redis进行缓存 */
        
        /*2、获取调用微信接公众号接口凭证*/
        String offAppID = "xxxxxxxxxxx";
        String offAppSecret = "xxxxxxxxx";
        RestTemplate restTemplate = new RestTemplate();
        Map<String, String> params = new HashMap<>();
        params.put("APPID", offAppID);  //
        params.put("APPSECRET", offAppSecret);  //
        /*3、获取access_token和expires_in*/
        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 accessToken = object.getString("access_token");
        String expiresIn = object.getString("expires_in");// 过期时长(两小时)

        return accessToken;
    }

1.5、配置参数,并调用消息推送;

**
 * 微信消息参数
 */
public class WxTemplate {
	
	//进行推送所需参数
    private String touser;//用户openid(接收人)
    private String template_id;//消息模版id
    private String url;//跳转到某链接或某页面
    private Map<String, TemplateData> data;//要推送的模板内容

    public String getTouser() {
        return touser;
    }

    public void setTouser(String touser) {
        this.touser = touser;
    }

    public String getTemplate_id() {
        return template_id;
    }

    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Map<String, TemplateData> getData() {
        return data;
    }

    public void setData(Map<String, TemplateData> data) {
        this.data = data;
    }

}
/**
 * 微信模版消息内容
 */
public class TemplateData {

    private String value;//消息内容
    private String color;//消息颜色

    //构造方法(空参)
    public TemplateData() {
    }

    //构造方法(有参)
    public TemplateData(String value, String color) {
        this.value = value;
        this.color = color;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

}
public JSONObject messagePush(String openid) {
        /*1、调用微信api将消息推送至公众号*/
        RestTemplate restTemplate = new RestTemplate();
        String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getAccessToken();
        /*2、固定设置推送内容,可配置成动态*/
        WxTemplate wxTe = new WxTemplate();
        wxTe.setTouser(openid);//用户的openid(接收人,这里应该传进来的)
        wxTe.setTemplate_id("xxxxxx");//订阅消息模板id
        wxTe.setUrl("xxxxxx");//跳转链接
        Map<String, TemplateData> map = new HashMap<>();
        /*2.1、设置模板参数,里面的key要和模板中的{{xxx.DATA}}中xxx对应*/
      
                map.put("name", new TemplateData("大锤", "#173177"));
                map.put("age", new TemplateData("999", "#7f7f7f"));
                map.put("sex", new TemplateData("男", "#333333"));
     
                wxTe.setData(map);
               
        /*2.2、推送请求*/
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxTe, String.class);

        return JSON.parseObject(responseEntity.getBody());
    }

完成。

注意:添加模板

公众号消息推送就完成啦~~~~~~~ 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值