huanghongfa
2021-09-02 177249c76aeea0b4bf8d8816d4994e3b445b45ce
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxUtil.java
@@ -1,306 +1,363 @@
package com.panzhihua.common.utlis;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.constants.WxSubscribeConstants;
import com.panzhihua.common.model.dtos.wx.TemplateParam;
import com.panzhihua.common.model.dtos.wx.WxSubscribeDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.http.entity.ContentType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.constants.WxSubscribeConstants;
import com.panzhihua.common.model.dtos.wx.TemplateParam;
import com.panzhihua.common.model.dtos.wx.WxSubscribeDTO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class WxUtil {
    //客服消息推送地址
    // 客服消息推送地址
    public final static String kf_url = "https://api.weixin.qq.com/cgi-bin/message/custom/send";
    public static String sendKfLinkMessage(String openid,String url,String thumbUrl,String access_token)throws Exception{
        Map<String,Object> map_content = new HashMap<>();
        map_content.put("title","社区福利一分购");
        map_content.put("description","点击参与社区一分钱抢购活动");
        map_content.put("url",url);//跳转地址
        map_content.put("thumb_url",thumbUrl);//图片地址
        Map<String,Object> map = new HashMap<>();
        map.put("touser",openid);
        map.put("msgtype","link");
        map.put("link",map_content);
    public static String sendKfLinkMessage(String openid, String url, String thumbUrl, String access_token)
        throws Exception {
        Map<String, Object> map_content = new HashMap<>();
        map_content.put("title", "社区福利一分购");
        map_content.put("description", "点击参与社区一分钱抢购活动");
        map_content.put("url", url);// 跳转地址
        map_content.put("thumb_url", thumbUrl);// 图片地址
        Map<String, Object> map = new HashMap<>();
        map.put("touser", openid);
        map.put("msgtype", "link");
        map.put("link", map_content);
        String content = JSON.toJSONString(map);
        return HttpClientUtil.httpPost(kf_url+"?access_token="+access_token,content);
        return HttpClientUtil.httpPost(kf_url + "?access_token=" + access_token, content);
    }
    public static String sendKfConetntMessage(String openid,String access_token)throws Exception{
        Map<String,Object> map_content = new HashMap<>();
        map_content.put("content","社区福利一分购");
        Map<String,Object> map = new HashMap<>();
        map.put("touser",openid);
        map.put("msgtype","text");
        map.put("text",map_content);
    public static String sendKfConetntMessage(String openid, String access_token) throws Exception {
        Map<String, Object> map_content = new HashMap<>();
        map_content.put("content", "社区福利一分购");
        Map<String, Object> map = new HashMap<>();
        map.put("touser", openid);
        map.put("msgtype", "text");
        map.put("text", map_content);
        String content = JSON.toJSONString(map);
        return HttpClientUtil.httpPost(kf_url+"?access_token="+access_token,content);
        return HttpClientUtil.httpPost(kf_url + "?access_token=" + access_token, content);
    }
    public static String sendKfImagesMessage(String openid,String access_token,String mediaId)throws Exception{
        Map<String,Object> map_content = new HashMap<>();
        map_content.put("media_id",mediaId);
        Map<String,Object> map = new HashMap<>();
        map.put("touser",openid);
        map.put("msgtype","image");
        map.put("image",map_content);
    public static String sendKfImagesMessage(String openid, String access_token, String mediaId) throws Exception {
        Map<String, Object> map_content = new HashMap<>();
        map_content.put("media_id", mediaId);
        Map<String, Object> map = new HashMap<>();
        map.put("touser", openid);
        map.put("msgtype", "image");
        map.put("image", map_content);
        String content = JSON.toJSONString(map);
        return HttpClientUtil.httpPost(kf_url+"?access_token="+access_token,content);
        return HttpClientUtil.httpPost(kf_url + "?access_token=" + access_token, content);
    }
    /**
     * 订阅消息推送
     * @param accessToken   获取会话token
     * @return  消息推送结果
     *
     * @param accessToken
     *            获取会话token
     * @return 消息推送结果
     */
    static void sendSubscribe(String accessToken,WxSubscribeDTO subscribeDTO) throws Exception{
        String resultString =  HttpUtils.wxMessageModeSendUrl(accessToken,subscribeDTO);
    static void sendSubscribe(String accessToken, WxSubscribeDTO subscribeDTO) throws Exception {
        String resultString = HttpUtils.wxMessageModeSendUrl(accessToken, subscribeDTO);
        JSONObject jsonResult = JSON.parseObject(resultString);
        if(jsonResult!=null){
        if (jsonResult != null) {
            log.info("订阅消息推送返回参数" + jsonResult.toJSONString());
            int errorCode = jsonResult.getIntValue("errcode");
            String errorMessage = jsonResult.getString("errmsg");
            if(errorCode==0){
            if (errorCode == 0) {
                log.info("订阅消息推送成功,openId:" + subscribeDTO.getTouser());
            }else{
                log.error("订阅消息发送失败,错误码:"+errorCode+",错误信息:"+errorMessage + "用户openid:" + subscribeDTO.getTouser());
            } else {
                log.error(
                    "订阅消息发送失败,错误码:" + errorCode + ",错误信息:" + errorMessage + "用户openid:" + subscribeDTO.getTouser());
            }
        }
    }
    /**
     * 随手拍奖励到账订阅消息推送
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  随手拍活动标题
     * @param amount    奖励金额
     * @param remark    备注说明
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            随手拍活动标题
     * @param amount
     *            奖励金额
     * @param remark
     *            备注说明
     */
    public static void sendSubscribeJLDZ(String openId, String accessToken, String name, BigDecimal amount,String remark){
    public static void sendSubscribeJLDZ(String openId, String accessToken, String name, BigDecimal amount,
        String remark) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.JLFF_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1",name));//活动名称
        paras.add(new TemplateParam("amount3",amount.toString()));//奖励金额
        paras.add(new TemplateParam("thing7",remark));//备注说明
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1", name));// 活动名称
        paras.add(new TemplateParam("amount3", amount.toString()));// 奖励金额
        paras.add(new TemplateParam("thing7", remark));// 备注说明
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("随手拍奖励到账订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     * 活动报名成功订阅消息推送
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  活动名称
     * @param address   活动地址
     * @param activityTime  活动时间
     * @param signTime  报名时间
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            活动名称
     * @param address
     *            活动地址
     * @param activityTime
     *            活动时间
     * @param signTime
     *            报名时间
     */
    public static void sendSubscribeSQHD(String openId, String accessToken, String name, String address,String activityTime,String signTime){
    public static void sendSubscribeSQHD(String openId, String accessToken, String name, String address,
        String activityTime, String signTime) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.BMCG_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1",name));//活动名称
        paras.add(new TemplateParam("thing2",address));//活动地址
        paras.add(new TemplateParam("date3",activityTime));//活动时间
        paras.add(new TemplateParam("time8",signTime));//报名时间
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1", name));// 活动名称
        paras.add(new TemplateParam("thing2", address));// 活动地址
        paras.add(new TemplateParam("date3", activityTime));// 活动时间
        paras.add(new TemplateParam("time8", signTime));// 报名时间
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("活动报名成功订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     * 新问卷调查订阅消息通知
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  活动名称
     * @param questionnaireName 问卷名称
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            活动名称
     * @param questionnaireName
     *            问卷名称
     */
    public static void sendSubscribeDYWJ(String openId, String accessToken, String name, String questionnaireName){
    public static void sendSubscribeDYWJ(String openId, String accessToken, String name, String questionnaireName) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.DYWJ_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1",name));//活动名称
        paras.add(new TemplateParam("thing2",questionnaireName));//问卷名称
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1", name));// 活动名称
        paras.add(new TemplateParam("thing2", questionnaireName));// 问卷名称
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("新问卷调查订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     * 认证审核订阅消息通知
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  认证内容
     * @param applyTime 申请时间
     * @param result    审核结果
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            认证内容
     * @param applyTime
     *            申请时间
     * @param result
     *            审核结果
     */
    public static void sendSubscribeRZSH(String openId, String accessToken, String name, String applyTime,String result){
    public static void sendSubscribeRZSH(String openId, String accessToken, String name, String applyTime,
        String result) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.EZSH_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing2",name));//认证内容
        paras.add(new TemplateParam("phrase1",result));//审核结果
        paras.add(new TemplateParam("date3",applyTime));//申请时间
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing2", name));// 认证内容
        paras.add(new TemplateParam("phrase1", result));// 审核结果
        paras.add(new TemplateParam("date3", applyTime));// 申请时间
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("认证审核订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     *  随手拍、邻里圈、微心愿、房源审核状态进度通知
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  审核项目
     * @param applyTime 审核状态
     * @param result    审核时间
     * 随手拍、邻里圈、微心愿、房源审核状态进度通知
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            审核项目
     * @param applyTime
     *            审核状态
     * @param result
     *            审核时间
     */
    public static void sendSubscribeSHZT(String openId, String accessToken, String name, String applyTime,String result){
    public static void sendSubscribeSHZT(String openId, String accessToken, String name, String applyTime,
        String result) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.SHZT_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1",name));//审核项目
        paras.add(new TemplateParam("phrase2",result));//审核状态
        paras.add(new TemplateParam("time3",applyTime));//审核时间
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1", name));// 审核项目
        paras.add(new TemplateParam("phrase2", result));// 审核状态
        paras.add(new TemplateParam("time3", applyTime));// 审核时间
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("审核状态订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     * 社区活动取消通知
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  活动名称
     * @param time  活动时间
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            活动名称
     * @param time
     *            活动时间
     */
    public static void sendSubscribeHDQX(String openId, String accessToken, String name, String time){
    public static void sendSubscribeHDQX(String openId, String accessToken, String name, String time) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.HDQX_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1",name));//活动标题
        paras.add(new TemplateParam("date2",time));//活动时间
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1", name));// 活动标题
        paras.add(new TemplateParam("date2", time));// 活动时间
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("活动取消订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     * 留言回复订阅消息通知
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  回复人名称
     * @param time  回复时间
     * @param content   回复内容
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            回复人名称
     * @param time
     *            回复时间
     * @param content
     *            回复内容
     */
    public static void sendSubscribeLYHF(String openId, String accessToken, String name, String time,String content){
    public static void sendSubscribeLYHF(String openId, String accessToken, String name, String time, String content) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.LYHF_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing3",content));//回复内容
        paras.add(new TemplateParam("name1",name));//回复者
        paras.add(new TemplateParam("date2",time));//回复时间
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing3", content));// 回复内容
        paras.add(new TemplateParam("name1", name));// 回复者
        paras.add(new TemplateParam("date2", time));// 回复时间
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("留言回复订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     *  活动变更订阅消息通知
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  活动名称
     * @param changeTime    活动时间变更
     * @param changeAddress 活动地点变更
     * @param time  活动时间
     * @param address   活动地点
     * 活动变更订阅消息通知
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            活动名称
     * @param changeTime
     *            活动时间变更
     * @param changeAddress
     *            活动地点变更
     * @param time
     *            活动时间
     * @param address
     *            活动地点
     */
    public static void sendSubscribeHDBG(String openId, String accessToken, String name, String changeTime,String changeAddress,String time,String address){
    public static void sendSubscribeHDBG(String openId, String accessToken, String name, String changeTime,
        String changeAddress, String time, String address) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.HDBG_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1",name));//活动名称
        paras.add(new TemplateParam("time2",changeTime));//活动时间变更
        paras.add(new TemplateParam("thing3",changeAddress));//地址变更
        paras.add(new TemplateParam("time5",time));//活动时间
        paras.add(new TemplateParam("thing6",address));//活动地点
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1", name));// 活动名称
        paras.add(new TemplateParam("time2", changeTime));// 活动时间变更
        paras.add(new TemplateParam("thing3", changeAddress));// 地址变更
        paras.add(new TemplateParam("time5", time));// 活动时间
        paras.add(new TemplateParam("thing6", address));// 活动地点
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("留言回复订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
    /**
     *  活动即将开始订阅消息通知
     * @param openId    用户openid
     * @param accessToken   token会话标识
     * @param name  活动名称
     * @param time  活动时间
     * @param address   活动地点
     * @param num   活动参加人数
     * 活动即将开始订阅消息通知
     *
     * @param openId
     *            用户openid
     * @param accessToken
     *            token会话标识
     * @param name
     *            活动名称
     * @param time
     *            活动时间
     * @param address
     *            活动地点
     * @param num
     *            活动参加人数
     */
    public static void sendSubscribeHDJJKS(String openId, String accessToken, String name, String time,String address,String num){
    public static void sendSubscribeHDJJKS(String openId, String accessToken, String name, String time, String address,
        String num) {
        WxSubscribeDTO subscribeDTO = new WxSubscribeDTO();
        subscribeDTO.setTouser(openId);
        subscribeDTO.setTemplate_id(WxSubscribeConstants.HDJJKS_ID);
        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1",name));//活动名称
        paras.add(new TemplateParam("date2",time));//活动时间
        paras.add(new TemplateParam("number3",num));//参与人数
        paras.add(new TemplateParam("thing4",address));//活动地点
        List<TemplateParam> paras = new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("thing1", name));// 活动名称
        paras.add(new TemplateParam("date2", time));// 活动时间
        paras.add(new TemplateParam("number3", num));// 参与人数
        paras.add(new TemplateParam("thing4", address));// 活动地点
        subscribeDTO.setTemplateParamList(paras);
        try {
            sendSubscribe(accessToken,subscribeDTO);
        }catch (Exception e){
            sendSubscribe(accessToken, subscribeDTO);
        } catch (Exception e) {
            log.error("活动即将开始订阅消息推送失败,失败原因:" + e.getMessage());
        }
    }
@@ -309,17 +366,17 @@
        WxXCXTempSend util = new WxXCXTempSend();
        try {
//            String openId = "oMIR-5S9rpsWAVUUrNKoVDQbn5Mw";//zj的openid
            String openId = "oMIR-5dWyNyWCCKMl7-kYzvyHOjs";//lyq的openid
            // String openId = "oMIR-5S9rpsWAVUUrNKoVDQbn5Mw";//zj的openid
            String openId = "oMIR-5dWyNyWCCKMl7-kYzvyHOjs";// lyq的openid
            String accessToken = util.getAppAccessToken();
//            sendSubscribeHDJJKS(openId,accessToken,"测试活动即将开始标题","2021-08-04 13:00:00","成都市","50");//活动即将开始
//            sendSubscribeHDQX(openId,accessToken,"取消活动测试标题","2021-08-04 13:00:00");//活动取消
//            sendSubscribeHDBG(openId,accessToken,"活动名称","2021-08-05","活动变更地址","2021-08-06","活动地址");//活动变更
//            sendSubscribeRZSH(openId,accessToken,"用户认证审核通知","2021-08-04","通过");//认证审核
//            sendSubscribeJLDZ(openId,accessToken,"随手拍活动DDD",BigDecimal.TEN,"用户参加随手拍活动奖励");//奖励到账
//            sendSubscribeLYHF(openId,accessToken,"社区管理员","2021-08-04 11:26:20","勇敢牛牛 不怕困难!");//留言回复
//            sendSubscribeSHZT(openId,accessToken,"随手拍审核!!","2021-08-04 11:20:00","通过了");//审核状态
        }catch (Exception e){
            // sendSubscribeHDJJKS(openId,accessToken,"测试活动即将开始标题","2021-08-04 13:00:00","成都市","50");//活动即将开始
            // sendSubscribeHDQX(openId,accessToken,"取消活动测试标题","2021-08-04 13:00:00");//活动取消
            // sendSubscribeHDBG(openId,accessToken,"活动名称","2021-08-05","活动变更地址","2021-08-06","活动地址");//活动变更
            // sendSubscribeRZSH(openId,accessToken,"用户认证审核通知","2021-08-04","通过");//认证审核
            // sendSubscribeJLDZ(openId,accessToken,"随手拍活动DDD",BigDecimal.TEN,"用户参加随手拍活动奖励");//奖励到账
            // sendSubscribeLYHF(openId,accessToken,"社区管理员","2021-08-04 11:26:20","勇敢牛牛 不怕困难!");//留言回复
            // sendSubscribeSHZT(openId,accessToken,"随手拍审核!!","2021-08-04 11:20:00","通过了");//审核状态
        } catch (Exception e) {
            System.out.println("错误错误!!!");
        }
    }