package com.matrix.component.tools; 
 | 
  
 | 
import com.matrix.core.tools.LogUtil; 
 | 
import com.matrix.core.tools.StringUtils; 
 | 
import com.matrix.system.shopXcx.api.WeChatApiTools; 
 | 
import net.sf.json.JSONObject; 
 | 
  
 | 
import java.io.IOException; 
 | 
import java.util.Arrays; 
 | 
import java.util.HashMap; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * 小程序消息模板 
 | 
 * 
 | 
 * @author jiangyouyao 
 | 
 * @email 512061637@qq.com 
 | 
 * @date 2019年2月25日 
 | 
 */ 
 | 
public class WxTempLateMsgUtil { 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 模板内容first 
 | 
     */ 
 | 
    public static String TEMP_FIRST = "first"; 
 | 
    /** 
 | 
     * 模板内容keyword 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD = "keyword"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容keyword1 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD1 = "keyword1"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容keyword2 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD2 = "keyword2"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容keyword3 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD3 = "keyword3"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容keyword4 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD4 = "keyword4"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容keyword5 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD5 = "keyword5"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容keyword6 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD6 = "keyword6"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容keyword7 
 | 
     */ 
 | 
    public static String TEMP_KEYWORD7 = "keyword7"; 
 | 
  
 | 
    /** 
 | 
     * 模板内容remark 
 | 
     */ 
 | 
    public static String TEMP_REMARK = "remark"; 
 | 
  
 | 
    /** 
 | 
     * 模板文字颜色1 
 | 
     */ 
 | 
    public static String TEMP_COLOR1 = "#0044BB"; 
 | 
  
 | 
    /** 
 | 
     * 模板文字颜色2 
 | 
     */ 
 | 
    public static String TEMP_COLOR2 = "#2E2E2E"; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 常量errcode 
 | 
     */ 
 | 
    public static String ERRCODE = "errcode"; 
 | 
    /** 
 | 
     * 40001 
 | 
     **/ 
 | 
    public static final String SEND_ERROR_40001 = "40001"; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 订单发货提醒 
 | 
     */ 
 | 
    public static final String ORDER_DELIVERY = "rLITY0JWVkmU0N9UQKBLf8uj62TheD6TejBJ6OkeptI"; 
 | 
  
 | 
    /** 
 | 
     * 订单支付成功通知 
 | 
     */ 
 | 
    public static final String ORDER_PAY_SUCCESS = "Onmy7iGMlGaV54v4CEXt5kOCR0oumAr9-3cF-Qx57B4"; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 退款成功提醒 
 | 
     */ 
 | 
    public static final String REFUND_SUCCESS = "13EFbbABfkWuqTfRmKiqadP8LMCMgxD7CFwm3JYrVms"; 
 | 
  
 | 
    /** 
 | 
     * 拒绝退款提醒 
 | 
     */ 
 | 
    public static final String REFUND_FAILED = "nRe9Ha3RY3SVUahANxUZS_YJBsFoGskKoIDeqEg3uO4"; 
 | 
  
 | 
    /** 
 | 
     * 填写物流提醒 
 | 
     */ 
 | 
    public static final String WRITE_LOGISTICS = "rLITY0JWVkmU0N9UQKBLf8uj62TheD6TejBJ6OkeptI"; 
 | 
  
 | 
    /** 
 | 
     * 订单发货提醒 
 | 
     * 
 | 
     * @param orderOn     订单编号 
 | 
     * @param goodsName   商品名称 
 | 
     * @param address     收货地址 
 | 
     * @param companyName 物流公司 
 | 
     * @param trackingNo  物流编号 
 | 
     * @return 
 | 
     */ 
 | 
    public static int sendOrderDeliveryNotice(String orderOn, String goodsName, String address, String companyName, String trackingNo, String openId, 
 | 
                                              String page, String formId) { 
 | 
        return sendWxTemplateMsg(Arrays.asList(orderOn, goodsName, address, companyName, trackingNo), openId, page, ORDER_DELIVERY, formId); 
 | 
    } 
 | 
  
 | 
    ; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 通用模板消息接口 
 | 
     */ 
 | 
    public static int sendWxTemplateMsg(List<String> valueList, String openId, 
 | 
                                        String page, String tempId, String formId) { 
 | 
  
 | 
        if (StringUtils.isBlank(openId)) { 
 | 
            return 0; 
 | 
        } 
 | 
  
 | 
        String access_token = ""; 
 | 
        try { 
 | 
            access_token = WeChatApiTools.getAccessToken(); 
 | 
        } catch (IOException e1) { 
 | 
            LogUtil.error("获取accesstoken失败", e1.getMessage()); 
 | 
        } 
 | 
        // 发送模板URL 
 | 
        String url = WxApiConstants.XCX_TEMPLATEMSG_SEN.replace("ACCESS_TOKEN", access_token); 
 | 
        WxTemplate temp = new WxTemplate(); 
 | 
        // 跳转地址 
 | 
        if (StringUtils.isNotBlank(page)) { 
 | 
            temp.setPage(page); 
 | 
        } 
 | 
        temp.setTouser(openId); 
 | 
        // 消息模版ID 
 | 
        temp.setTemplateId(tempId); 
 | 
  
 | 
        Map<String, Object> tempLateMsgMap = new HashMap<String, Object>(); 
 | 
        // 设置模板消息的值 
 | 
        for (int i = 0; i < valueList.size(); i++) { 
 | 
            TemplateData keyword = new TemplateData(); 
 | 
            keyword.setValue(valueList.get(i)); 
 | 
            tempLateMsgMap.put(TEMP_KEYWORD + (i + 1), keyword); 
 | 
        } 
 | 
        temp.setData(tempLateMsgMap); 
 | 
        String jsonString = JSONObject.fromObject(temp).toString(); 
 | 
  
 | 
        LogUtil.info("组装模板消息={}", jsonString); 
 | 
        HttpRequest reqObj = new HttpRequest(); 
 | 
        HttpResponse result = null; 
 | 
        try { 
 | 
            result = reqObj.sendHttpsPost(url, null, jsonString); 
 | 
        } catch (IOException e) { 
 | 
            LogUtil.error("发送模板通知出错了", e); 
 | 
        } 
 | 
        JSONObject json = JSONObject.fromObject(result.getDataString()); 
 | 
        LogUtil.info("发送模板消息结果={}", json); 
 | 
        int res = 0; 
 | 
        if (json == null) { 
 | 
            return res; 
 | 
        } else { 
 | 
            res = json.getInt(ERRCODE); 
 | 
            if (res == Integer.parseInt(SEND_ERROR_40001)) { 
 | 
                String new_access_token = ""; 
 | 
                try { 
 | 
                    new_access_token = WeChatApiTools.getAccessToken(); 
 | 
                } catch (IOException e1) { 
 | 
                    LogUtil.error("获取new_access_token失败", e1.getMessage()); 
 | 
                } 
 | 
                url = WxApiConstants.XCX_TEMPLATEMSG_SEN.replace("ACCESS_TOKEN", new_access_token); 
 | 
                try { 
 | 
                    result = reqObj.sendHttpsPost(url, null, jsonString); 
 | 
                } catch (IOException e) { 
 | 
                    LogUtil.error("发送new_access_token模板通知出错了", e); 
 | 
                } 
 | 
                json = JSONObject.fromObject(result.getDataString()); 
 | 
                if (json == null) { 
 | 
                    return res; 
 | 
                } else { 
 | 
                    res = json.getInt(ERRCODE); 
 | 
                    if (res != 0) { 
 | 
                        // 添加发送失败 信息 
 | 
                        LogUtil.info("发送new_access_token模板消息错误错误 errcode:{} errmsg:{}" + "," + json.getInt("errcode") 
 | 
                                + "," + json.getString("errmsg")); 
 | 
                    } else { 
 | 
                        return 1; 
 | 
                    } 
 | 
                } 
 | 
            } else if (res != 0) { 
 | 
                // 添加发送失败 信息 
 | 
                LogUtil.info("发送模板消息错误错误 errcode:{} errmsg:{}" + "," + json.getInt("errcode") + "," 
 | 
                        + json.getString("errmsg")); 
 | 
            } else { 
 | 
                return 1; 
 | 
            } 
 | 
        } 
 | 
        LogUtil.info("模板消息发送结果:" + res); 
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 发送订阅消息 
 | 
     * @param temp {temp} 
 | 
     */ 
 | 
    public static void  sendSubscribeMsg(WxSubscribeDto temp) { 
 | 
        String access_token = ""; 
 | 
        try { 
 | 
            access_token = WeChatApiTools.getAccessToken(); 
 | 
        } catch (IOException e1) { 
 | 
            LogUtil.error("获取accesstoken失败", e1.getMessage()); 
 | 
        } 
 | 
        // 发送模板URL 
 | 
        String url = WxApiConstants.XCX_TEMPLATEMSG_SEN.replace("ACCESS_TOKEN", access_token); 
 | 
        String jsonString = JSONObject.fromObject(temp).toString(); 
 | 
        LogUtil.info("组装模板消息={}", jsonString); 
 | 
        HttpRequest reqObj = new HttpRequest(); 
 | 
        HttpResponse result = null; 
 | 
        try { 
 | 
            result = reqObj.sendHttpsPost(url, null, jsonString); 
 | 
        } catch (IOException e) { 
 | 
            LogUtil.error("发送模板通知出错了", e); 
 | 
        } 
 | 
        JSONObject json = JSONObject.fromObject(result.getDataString()); 
 | 
        LogUtil.info("发送模板消息结果={}", json); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |