微信公众号消息推送开发(模板消息):开发实现(二)

  专栏简介

💒个人主页

📄本栏目录

                          📖心灵鸡汤📖

雨滴会变成咖啡,种子会开出玫瑰,旅行是一种约会,离别是为体会寂寞的滋味,不是没人陪,只怪咖啡喝不醉,一路走就累,雨一碰就碎,只有你依然完美。

          ✍相关博文✍

     微信工作号API封装



微信公众号消息推送开发(模板消息):准备工作[公众平台环境配置](一)

前言:

     根据公众平台提供api,需要注意以下几点:

①,access_token需要缓存

②,需要按照所选模板封装对应的数据

③,推送消息必须条件:模板id,被推送者的openid

模板消息接口

开发实现:

下面以实现绑定推送消息为例:

①:获取access_token(由于每天access_token获取有次数限制,需要缓存)

    /**
     * 获取access_token
     * @param AppId
     * @param AppSecret
     * @return
     * @throws Exception
     */
    public static String getAccessToken(String AppId,String AppSecret)throws BusinessException{
        String access_tokenurl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
        access_tokenurl=access_tokenurl.replace("APPID",AppId);
        access_tokenurl=access_tokenurl.replace("APPSECRET",AppSecret);
        String accesstoken="";
        JSONObject jsonObject = WeiXinUtil.httpsRequest(access_tokenurl,"GET",null);
        if (jsonObject !=null){
            accesstoken=jsonObject.getString("access_token");
        }
            return accesstoken;
    }

②,创建模板消息实体对象(由于应用模板较多,这里定义一个javabean.这个根据个人情况定义)

package com.steno.xf.weixin.vo;

import org.apache.lucene.document.StringField;

/**
 * 公众号推送消息封装
 */
public class GZHMsgVo {
    private String touser;
    private String templateId;
    private String title;
    private String remark;
    private String keyword1;
    private String keyword2;
    private String keyword3;
    private String keyword4;
    private String keyword5;
    //是否跳转相关
    private String smUrl;
    private String smAppid;
    private String smpagepath;
    //备注字体颜色
    private String remakColor;
    //标题字体颜色
    private String titleColor;
   
     //....省略geter/setter....//
}

注:根据个人喜好,也可以把keyword封装成集合

③,调用模板消息接口(AccessToken为①获取的值)

GZHMsgVo msgVo = new GZHMsgVo();
msgVo.setTemplateId(ReferenceTool.getItemvalue(XfReferenceConstrants.GZHMSG_BANGDING_ID));//模板id
msgVo.setTouser(gzhopenId);//用户openid
msgVo.setTitle("恭喜!您的新房账号已成功绑定微信");
msgVo.setKeyword1(vo.getUsername());
msgVo.setKeyword2("接收平台通知");
msgVo.setKeyword3(DateFormatUtil.getNowDateTime());
msgVo.setRemark("和谐共享,方便你我");
msgVo.setRemakColor("EE3D11");
WeiXinUtil.sendMessagePush(msgVo,AccessToken);
	

④,WeiXinUtil.sendMessagePush()

调用发送模板消息api:

https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

    /**
     * 公众号推送封装
     * @param vo
     * @param ACCESS_TOKEN
     * @throws Exception
     */
    public static String  sendMessagePush(GZHMsgVo vo,String ACCESS_TOKEN){
        JSONObject json=new JSONObject();
        JSONObject text=new JSONObject();
        JSONObject first=new JSONObject();
        JSONObject remark=new JSONObject();
        if (vo.getTouser()==null){
            return "touser不能为空";
        }
        if (vo.getTemplateId()==null){
            return "TemplateId不能为空";
        }
        json.put("touser",vo.getTouser());
        json.put("template_id",vo.getTemplateId());
        first.put("value",vo.getTitle());
        remark.put("value",vo.getRemark());
        if (vo.getKeyword1()!=null){
            JSONObject keyword1=new JSONObject();
            keyword1.put("value",vo.getKeyword1());
            text.put("keyword1",keyword1);
        }
        if (vo.getKeyword2()!=null){
            JSONObject keyword2=new JSONObject();
            keyword2.put("value",vo.getKeyword2());
            text.put("keyword2",keyword2);
        }
        if (vo.getKeyword3()!=null){
            JSONObject keyword3=new JSONObject();
            keyword3.put("value",vo.getKeyword3());
            text.put("keyword3",keyword3);
        }
        if (vo.getKeyword4()!=null){
            JSONObject keyword4=new JSONObject();
            keyword4.put("value",vo.getKeyword4());
            text.put("keyword4",keyword4);
        }
        if (vo.getKeyword5()!=null){
            JSONObject keyword5=new JSONObject();
            keyword5.put("value",vo.getKeyword5());
            text.put("keyword5",keyword5);
        }
        if (vo.getTitleColor() !=null){
            first.put("color",vo.getTitleColor());
        }
        if (vo.getRemakColor() !=null){
            remark.put("color",vo.getRemakColor());
        }
        text.put("first", first);
        text.put("remark",remark);
        json.put("data", text);
        //发送模板消息
        String sendUrl="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
        sendUrl=sendUrl.replace("ACCESS_TOKEN",ACCESS_TOKEN);
        String jsonstringParm =json.toString();
        JSONObject object=WXAdvancedUtil.httpsRequest(sendUrl,"POST",jsonstringParm);
        return object.toString();
    }

⑤,WXAdvancedUtil.httpsRequest(sendUrl,"POST",jsonstringParm)

    /**
     * 发送http请求
     * @param requestUrl
     * @param requestMethod
     * @param outputStr
     * @return
     */
    public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
        JSONObject jsonObject = null;
        try {
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 从上述SSLContext对象中得到SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();

            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(ssf);

            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            // 设置请求方式(GET/POST)
            conn.setRequestMethod(requestMethod);

            // 当outputStr不为null时向输出流写数据
            if (null != outputStr) {
                OutputStream outputStream = conn.getOutputStream();
                // 注意编码格式
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }

            // 从输入流读取返回内容
            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            StringBuffer buffer = new StringBuffer();
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }

            // 释放资源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            conn.disconnect();
            jsonObject = JSONObject.fromObject(buffer.toString());
        } catch (ConnectException ce) {

            ce.printStackTrace();
        } catch (Exception e) {

            e.printStackTrace();
        }
        return jsonObject;
    }

效果:                                                                                                                                                                                                             

微信公众号消息推送开发(模板消息):点击推送消息跳转到网页或者小程序(三)

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要喷香水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值