WeixinUtil.java 4.39 KB
package com.zteits.pay.weixinpublic.util;

import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;

import com.clouds.common.utils.wx.AccessToken;
import com.clouds.common.utils.wx.AccessTokenUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.zteits.pay.util.HttpClientTutorial;

public class WeixinUtil {


    /**
     *   * 主动推送信息接口  
     */
    private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}";
    private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);

    /**
     * 发送模板消息前获取token
     *
     * @param wxTemplate
     * @throws UnsupportedEncodingException
     */
    public static Integer sendMessageBefore(WxTemplate wxTemplate) throws Exception {
        AccessToken accessToken = AccessTokenUtil.getToken(wxTemplate.getAppid(), wxTemplate.getAppsecret());
        log.info("微信 accessToken :" + JSONObject.toJSONString(accessToken));
      /*  log.info("微信公共号推送返回1:"+JSONObject.toJSONString(TokenThread.accessToken));
        if(TokenThread.accessToken==null || TokenThread.accessToken.getToken()==""){
        	log.info("微信公共号获取token开始:"+wxTemplate.getAppid()+"   "+wxTemplate.getAppsecret());
            log.info("微信公共号获取token结束:"+JSONObject.toJSONString(accessToken));
        }else{
            accessToken = TokenThread.accessToken;
        }*/
//        if(template_id_short!=null&&!"".equals(template_id_short)){
//        	WxTemplate  template = WeixinUtil.getTemplate(template_id_short,accessToken.getToken());
//        	log.info("WeixinUtil.getTemplate:"+JSONObject.toJSONString(template));
//        	wxTemplate.setTemplate_id(template.getTemplate_id());
//        }
        int i = -1;
        if (accessToken != null && StringUtils.isNotEmpty(accessToken.getAccessToken())) {
            log.info(accessToken.getAccessToken() + "发起推送:" + JSONObject.toJSONString(wxTemplate));
            i = WeixinUtil.sendMessage(wxTemplate, accessToken.getAccessToken());
        }
        return i;
    }

    /**
     * 获得模板编号获得模板ID
     *
     * @param template_id_short
     * @return
     */
    public final static String template_id_url = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN";

    public static WxTemplate getTemplate(String template_id_short, String accessToken) throws UnsupportedEncodingException, URISyntaxException {
        WxTemplate _template = new WxTemplate();
        String url = template_id_url.replace("ACCESS_TOKEN", accessToken);
        Map<String, Object> map = new HashMap<>();
        map.put("template_id_short", template_id_short);
        String jsonObject = HttpClientTutorial.httpPostRequest(url, JSONObject.toJSONString(map));//   httpRequest(url, "POST", jsonInfo);  
        if (null != jsonObject) {
            JSONObject _jsonObject = JSONObject.parseObject(jsonObject);
            if (0 == _jsonObject.getInteger("errcode")) {
                _template.setTemplate_id(_jsonObject.getString("template_id"));
            } else {
                log.error("获取模板ID失败 errcode:{} errmsg:{}", _jsonObject.getInteger("errcode"), _jsonObject.getString("errmsg"));
            }
        }
        return _template;
    }

    /**
     * 发送模板消息
     *
     * @param t
     * @param accessToken
     * @return
     * @throws UnsupportedEncodingException
     */
    public static int sendMessage(WxTemplate t, String accessToken) throws UnsupportedEncodingException {
        int result = 0;
        // 拼装创建菜单的url
        String url = MessageFormat.format(sendMsgUrl, accessToken);
        // 调用接口创建菜单
        String rs = HttpClientTutorial.httpPostRequest(url, JSONObject.toJSONString(t));
        if (null != rs) {
            JSONObject obj = JSONObject.parseObject(rs);
            log.info("微信公共号推送返回:" + obj);
            if (0 != obj.getInteger("errcode")) {
                result = obj.getInteger("errcode");
                log.error("发送模板消息失败 errcode:{} errmsg:{}", obj.getInteger("errcode"), obj.getString("errmsg"));
            }
        }
        return result;
    }
}