分享

微信公众号如何无限制的定向推送消息

 WindySky 2018-03-06

最近开发的OA平台有一个需求:将待办消息推送到微信公众号的指定用户。但是为了避免用户受到垃圾消息的骚扰,微信对相关的接口做了非常严格的限制。
查阅开发文档,公众号主动推送消息有三种接口:

  • 群发消息
  • 客服消息
  • 模板消息

群发消息

存在条数限制,不适合推送待办消息;

客服消息

虽然没有条数限制,但是确需要48小时内用户主动发送过消息,这也无法满足要求。

模板消息

而唯一能符合推送待办消息要求的只剩下模板消息这一种。
其实大家对模板消息并不陌生。

招商银行公众号推送的消费信息属于模板消息

那么如何实现模板消息的推送呢!
首先 申请:微信公众平台–>功能–>添加功能插件–>模板消息,选择行业,填写申请理由,等待审核通过
第二步 选择适合的模板,获取模板ID
这是我选择的模板

第三步 后台逻辑实现
查看开发文档,具体分两步

ONE:获取模板ID

刚刚已经获取

TWO:请求接口

POST请求 https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
其中,获取ACCESS_TOKEN是关键
POST请求的json的格式如下
{
“touser”:”OPENID”,
“template_id”:”ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY”,
“url”:”http://weixin.qq.com/download“,
“topcolor”:”#FF0000”,
“data”:{
“User”: {
“value”:”黄先生”,
“color”:”#173177”
},
“Date”:{
“value”:”06月07日 19时24分”,
“color”:”#173177”
},
“CardNumber”:{
“value”:”0426”,
“color”:”#173177”
},
“Type”:{
“value”:”消费”,
“color”:”#173177”
},
“Money”:{
“value”:”人民币260.00元”,
“color”:”#173177”
},
“DeadTime”:{
“value”:”06月07日19时24分”,
“color”:”#173177”
},
“Left”:{
“value”:”6504.09”,
“color”:”#173177”
}
}
}

我的代码实现

package com.weixin.handler;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.weixin4j.Configuration;
import org.weixin4j.Weixin;
import org.weixin4j.WeixinException;
import org.weixin4j.WeixinSupport;
import org.weixin4j.http.HttpClient;
import org.weixin4j.http.HttpsClient;
import org.weixin4j.http.OAuthToken;
import org.weixin4j.http.Response;
import org.weixin4j.message.Articles;

import com.alibaba.fastjson.JSONObject;
public class WeixinMessagePush extends WeixinSupport {

    Weixin weixin=new Weixin();
    OAuthToken oAuthToken=null;
    public WeixinMessagePush(){

    }

    public WeixinMessagePush(String appId,String secret){

        try {
            oAuthToken = weixin.login(appId, secret);
        } catch (WeixinException e) 
            e.printStackTrace();
        }
    }
    public void templateMessagePush(String openId,String title,String description) throws WeixinException{
        JSONObject json=new JSONObject();
        JSONObject text=new JSONObject();
        JSONObject keyword1=new JSONObject();
        JSONObject keyword2=new JSONObject();
        JSONObject first=new JSONObject();
        JSONObject remark=new JSONObject();
        json.put("touser",openId);
        json.put("template_id","vrnaSzdFCyCZOuRtGLbbx-zysOF14mNGlIduURC335w");
        json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx22c699fe80c91471&redirect_uri=http%3A%2F%2Fwewill9014.s1.natapp.cc%2FPTCOA%2Fservlet%2FOAuthAPIServlet&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect");
        json.put("topcolor","#ff1a75");
        first.put("value",title);
//      first.put("color","#007f80");
        keyword1.put("value",description );
//      keyword1.put("color", "#007f80");
        keyword2.put("value","签批" );
//      keyword2.put("color","#007f80");
        remark.put("value", "点击可进行处理");
        remark.put("color", "#007f80");
        text.put("keyword1", keyword1);
        text.put("keyword2", keyword2);
        text.put("first", first);
        text.put("remark",remark);
        json.put("data", text);

        //创建请求对象
        HttpsClient http=new HttpsClient();
        Response res = http.post("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+oAuthToken.getAccess_token(), json);
         //根据请求结果判定,是否验证成功
        JSONObject jsonObj = res.asJSONObject();
        if (jsonObj != null) {
            if (Configuration.isDebug()) {
                System.out.println("模板消息返回json:" + jsonObj.toString());
            }
            Object errcode = jsonObj.get("errcode");
            if (errcode != null && !errcode.toString().equals("0")) {
                //返回异常信息
                throw new WeixinException(getCause(Integer.parseInt(errcode.toString())));
            }
        }   
    }   
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

其中

JSONObject keyword1=new JSONObject();
JSONObject keyword2=new JSONObject();
JSONObject first=new JSONObject();
JSONObject remark=new JSONObject();
  • 1
  • 2
  • 3
  • 4

keyword1、keyword2等分别对应模板中的关键字,参考下图
这里写图片描述

而相关jar包如下

import org.weixin4j.Configuration;
import org.weixin4j.Weixin;
import org.weixin4j.WeixinException;
import org.weixin4j.WeixinSupport;
import org.weixin4j.http.HttpClient;
import org.weixin4j.http.HttpsClient;
import org.weixin4j.http.OAuthToken;
import org.weixin4j.http.Response;
import org.weixin4j.message.Articles;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这是开源平台weixin4j提供的jar包
这里写图片描述
点击可前往下载

还有一个非常方便的jar包

com.alibaba.fastjson
  • 1

这个相信许多人都知道,百度你就能找到你想要的答案!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多