Browse Source

微信公众号模板消息发送

chenyongxing 8 years ago
parent
commit
f5111e9847

+ 15 - 35
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wx/MWxTemplate.java

@ -8,18 +8,16 @@ import java.util.Date;
public class MWxTemplate {
    private Long id;
    private String code;//模板code
    private String name;//模板名称
    private String title;//模板标题
    private String wechatCode;//关联的微信code 关联表 Wx_Wechat
    private String templateCode;//微信的模板code
    private String value;//模板值
    private String templateId;//微信模板id
    private String content;//模板内容
    private String createUser;//创建人
    private String createUserName;//创建人名
    private Date createTime;//创建时间
    private String updateUser;//修改人
    private String updateUserName;//修改人名称
    private Date updateTime;//修改时间
    private String remark;
    private Integer status; //状态 -1 已删除 0可用
    public Long getId() {
        return id;
@ -37,12 +35,12 @@ public class MWxTemplate {
        this.code = code;
    }
    public String getName() {
        return name;
    public String getTitle() {
        return title;
    }
    public void setName(String name) {
        this.name = name;
    public void setTitle(String title) {
        this.title = title;
    }
    public String getWechatCode() {
@ -53,20 +51,20 @@ public class MWxTemplate {
        this.wechatCode = wechatCode;
    }
    public String getTemplateCode() {
        return templateCode;
    public String getTemplateId() {
        return templateId;
    }
    public void setTemplateCode(String templateCode) {
        this.templateCode = templateCode;
    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }
    public String getValue() {
        return value;
    public String getContent() {
        return content;
    }
    public void setValue(String value) {
        this.value = value;
    public void setContent(String content) {
        this.content = content;
    }
    public String getCreateUser() {
@ -116,22 +114,4 @@ public class MWxTemplate {
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
}

+ 3 - 3
svr/svr-base/src/main/java/com/yihu/jw/wx/controller/WxGraphicMessageController.java

@ -126,12 +126,12 @@ public class WxGraphicMessageController extends EnvelopRestController {
        return Envelop.getSuccessList(WxContants.WxGraphicMessage.message_success_find_functions,mWxGraphicMessages);
    }
    @GetMapping(value = "sendGraphicMessages")
    @GetMapping(value = "/sendGraphicMessages")
    @ApiOperation(value = "发送图文消息")
    public Envelop sendGraphicMessages(
            @ApiParam(name = "codes", value = "根据code发送微信图文消息,多个code用,分割")
            @RequestParam(value = "codes", required = true) String codes,HttpServletRequest request) throws Exception {
        wxGraphicMessageService.sendGraphicMessages(codes,request);
        return null;
        String messages = wxGraphicMessageService.sendGraphicMessages(codes, request);
        return Envelop.getSuccess("成功",messages);
    }
}

+ 28 - 1
svr/svr-base/src/main/java/com/yihu/jw/wx/controller/WxTemplateController.java

@ -5,11 +5,14 @@ import com.yihu.jw.restmodel.common.EnvelopRestController;
import com.yihu.jw.restmodel.exception.ApiException;
import com.yihu.jw.restmodel.wx.MWxTemplate;
import com.yihu.jw.restmodel.wx.WxContants;
import com.yihu.jw.wx.model.Miniprogram;
import com.yihu.jw.wx.model.WxTemplate;
import com.yihu.jw.wx.service.WxTemplateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@ -126,5 +129,29 @@ public class WxTemplateController extends EnvelopRestController {
        return Envelop.getSuccessList(WxContants.WxTemplate.message_success_find_functions,mMWxTemplates);
    }
    //微信模版消息测试
    @GetMapping(value = "sendTemplateMessage")
    @ApiOperation(value = "发送微信模板消息")
    public Envelop sendTemplateMessage(
            @ApiParam(name="openid",value="微信用户的openid")
            @RequestParam String openid,
            @ApiParam(name="tempalteCode",value = "模板code")
            @RequestParam String templateCode,
            @ApiParam(name="url",value="模板跳转链接")
            @RequestParam(required = false) String url,
            @ApiParam(name="appid",value="所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系)")
            @RequestParam(required = false) String appid,
            @ApiParam(name="pagepath",value="所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar)")
            @RequestParam(required = false) String pagepath,
            @ApiParam(name="data",value="json字符串")
            @RequestParam String data
    ){
        Miniprogram miniprogram = null;
        if(StringUtils.isNotBlank(appid)&&StringUtils.isNotBlank(pagepath)){
            miniprogram = new Miniprogram();
            miniprogram.setAppid(appid);
            miniprogram.setPagepath(pagepath);
        }
        JSONObject jsonObject = wxTemplateService.sendTemplateMessage(openid, templateCode, url, data, miniprogram);
        return Envelop.getSuccess("成功",jsonObject);
    }
}

+ 30 - 0
svr/svr-base/src/main/java/com/yihu/jw/wx/model/Miniprogram.java

@ -0,0 +1,30 @@
package com.yihu.jw.wx.model;
import java.io.Serializable;
/**
 * Created by Administrator on 2017/5/24 0024.
 */
public class Miniprogram implements Serializable{
    private static final long serialVersionUID = -7963058957081033262L;
    private String appid;
    private String pagepath;
    public String getAppid() {
        return appid;
    }
    public void setAppid(String appid) {
        this.appid = appid;
    }
    public String getPagepath() {
        return pagepath;
    }
    public void setPagepath(String pagepath) {
        this.pagepath = pagepath;
    }
}

+ 69 - 0
svr/svr-base/src/main/java/com/yihu/jw/wx/model/WechatTemplate.java

@ -0,0 +1,69 @@
package com.yihu.jw.wx.model;
import java.io.Serializable;
import java.util.Map;
/**
 * 微信消息模板推送内容
 * @author George
 */
public class WechatTemplate implements Serializable {
	private static final long serialVersionUID = 3877107913397496785L;
    /**
     * 用户openId
     */
    private String touser;
	/**
     * 模板消息id
     */
    private String template_id;
    /**
     * URL置空,则在发送后,点击模板消息会进入一个空白页面(ios),或无法点击(android)
     */
    private String url;
    private Miniprogram miniprogram;
    public Miniprogram getMiniprogram() {
        return miniprogram;
    }
    public void setMiniprogram(Miniprogram miniprogram) {
        this.miniprogram = miniprogram;
    }
    /**
     * 详细内容
     */
    private Map<String,WechatTemplateData> data;
    
    public String getTemplate_id() {
        return template_id;
    }
    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }
    public String getTouser() {
        return touser;
    }
    public void setTouser(String touser) {
        this.touser = touser;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public Map<String, WechatTemplateData> getData() {
        return data;
    }
    public void setData(Map<String, WechatTemplateData> data) {
        this.data = data;
    }
    
}

+ 26 - 0
svr/svr-base/src/main/java/com/yihu/jw/wx/model/WechatTemplateData.java

@ -0,0 +1,26 @@
package com.yihu.jw.wx.model;
import com.yihu.jw.base.model.base.IdEntity;
/**
 * 微信消息模板
 * @author George
 */
public class WechatTemplateData extends IdEntity {
	private static final long serialVersionUID = -7399054549159698617L;
	private String value; 
    private String color;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
}

+ 49 - 47
svr/svr-base/src/main/java/com/yihu/jw/wx/model/WxTemplate.java

@ -13,28 +13,51 @@ import java.util.Date;
public class WxTemplate extends IdEntity implements java.io.Serializable {
    // Fields
    private String code;//模板code
    private String name;//模板名称
    private String title;//模板标题
    private String wechatCode;//关联的微信code 关联表 Wx_Wechat
    private String templateCode;//微信的模板code
    private String value;//模板值
    private String templateId;//微信模板id
    private String content;//模板内容
    private String createUser;//创建人
    private String createUserName;//创建人名
    private Date createTime;//创建时间
    private String updateUser;//修改人
    private String updateUserName;//修改人名称
    private Date updateTime;//修改时间
    private String remark;
    private Integer status;  //状态 -1删除 0 冻结 1可用
    public WxTemplate(Long id, String code, String name, String wechatCode, String templateCode, String value, String createUser, String createUserName, Date createTime, String updateUser, String updateUserName, Date updateTime, String remark, Integer status) {
        this.id = id;
    @Column(name = "title")
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    @Column(name="wechat_code")
    public String getWechatCode() {
        return wechatCode;
    }
    public void setWechatCode(String wechatCode) {
        this.wechatCode = wechatCode;
    }
    @Column(name="template_id")
    public String getTemplateId() {
        return templateId;
    }
    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }
    public WxTemplate(String code, String title, String wechatCode, String templateId, String content, String createUser, String createUserName, Date createTime, String updateUser, String updateUserName, Date updateTime, String remark, Integer status) {
        this.code = code;
        this.name = name;
        this.title = title;
        this.wechatCode = wechatCode;
        this.templateCode = templateCode;
        this.value = value;
        this.templateId = templateId;
        this.content = content;
        this.createUser = createUser;
        this.createUserName = createUserName;
        this.createTime = createTime;
@ -45,6 +68,21 @@ public class WxTemplate extends IdEntity implements java.io.Serializable {
        this.status = status;
    }
    @Column(name="content")
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    private String remark;
    private Integer status;  //状态 -1删除 0 冻结 1可用
    /**
     * default constructor
     */
@ -93,42 +131,6 @@ public class WxTemplate extends IdEntity implements java.io.Serializable {
        this.code = code;
    }
    @Column(name = "name", length = 200)
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "wechat_code", length = 64)
    public String getWechatCode() {
        return this.wechatCode;
    }
    public void setWechatCode(String wechatCode) {
        this.wechatCode = wechatCode;
    }
    @Column(name = "template_code", length = 100)
    public String getTemplateCode() {
        return this.templateCode;
    }
    public void setTemplateCode(String templateCode) {
        this.templateCode = templateCode;
    }
    @Column(name = "value", length = 2000)
    public String getValue() {
        return this.value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Column(name = "create_user", length = 200)
    public String getCreateUser() {
        return this.createUser;

+ 74 - 1
svr/svr-base/src/main/java/com/yihu/jw/wx/service/WxTemplateService.java

@ -1,15 +1,24 @@
package com.yihu.jw.wx.service;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.jw.restmodel.common.CommonContants;
import com.yihu.jw.restmodel.exception.ApiException;
import com.yihu.jw.restmodel.wx.WxContants;
import com.yihu.jw.util.HttpUtil;
import com.yihu.jw.wx.dao.WxTemplateDao;
import com.yihu.jw.wx.model.WxTemplate;
import com.yihu.jw.wx.model.*;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2017/5/19 0019.
 */
@ -19,6 +28,9 @@ public class WxTemplateService extends BaseJpaService<WxTemplate, WxTemplateDao>
    @Autowired
    private WxTemplateDao wxTemplateDao;
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    public WxTemplate createWxTemplate(WxTemplate wxTemplate) {
        if (StringUtils.isEmpty(wxTemplate.getCode())) {
@ -61,4 +73,65 @@ public class WxTemplateService extends BaseJpaService<WxTemplate, WxTemplateDao>
        return wxTemplate;
    }
    public JSONObject sendTemplateMessage(String openid, String templateCode, String url, String data,Miniprogram miniprogram) {
        try {
            //首先根据wechatTemplate获取微信模版
            WxTemplate wxTemplate = findByCode(templateCode);
            String wechatCode =  wxTemplate.getWechatCode();
            String content = wxTemplate.getContent().replaceAll(" ", "");//{{result.DATA}}领奖金额:{{withdrawMoney.DATA}   }领奖  时间:{ {withdrawTime.DATA} }银行信息:{ {cardInfo.DATA} }到账时间:{{arrivedTime.DATA}}{{remark.DATA}}
            String[] contentArray = content.split("\\{\\{");
            //将result,withdrawMoney,withdrawTime,cardInfo,arrivedTime等字符串放入contentList中
            List<String> contentList = new ArrayList<>();
            for(int i=1;i<contentArray.length;i++){
                contentList.add(contentArray[i].substring(0,contentArray[i].indexOf(".")));
            }
            ObjectMapper mapper = new ObjectMapper();
            ////将data转为对象
            Map<String, WechatTemplateData> dataMap = mapper.readValue(data, new TypeReference<HashMap<String, WechatTemplateData>>() {});
            Map<String, WechatTemplateData> newDataMap = new HashMap<String, WechatTemplateData>();
            int j = 0;
            for (Map.Entry<String, WechatTemplateData> entry : dataMap.entrySet()) {//(keyword1,WechatTemplateData)
                String key = entry.getKey();//keyword1   转为result
                newDataMap.put(contentList.get(j),entry.getValue());
                j++;
            }
            //将数据封装在WechatTemplate对象中
            WechatTemplate wechatTemplate = new WechatTemplate();
            wechatTemplate.setTouser(openid);
            wechatTemplate.setUrl(url);
            wechatTemplate.setTemplate_id(wxTemplate.getTemplateId());
            if(miniprogram!=null){
                wechatTemplate.setMiniprogram(miniprogram);
            }
            wechatTemplate.setData(newDataMap);
            String params = mapper.writeValueAsString(wechatTemplate);
            WxAccessToken wxAccessTokenByCode = wxAccessTokenService.getWxAccessTokenByCode(wechatCode);
            String token = wxAccessTokenByCode.getAccessToken();
            String token_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token;
            String result = HttpUtil.sendPost(token_url, params);
            JSONObject jsonResult = new JSONObject(result);
            return jsonResult;
        } catch (Exception e) {
            e.printStackTrace();
            JSONObject jsonResult = new JSONObject(e);
            return jsonResult;
        }
    }
    public static void main(String[] args) {
        String a = "{{result.DATA}}领奖金额:{{withdrawMoney.DATA}   }领奖  时间:{ {withdrawTime.DATA} }银行信息:{ {cardInfo.DATA} }到账时间:{{arrivedTime.DATA}}{{remark.DATA}}".replaceAll(" ", "");
        System.out.println(a);
        String[] strings = a.split("\\{\\{");
        List<String> contentList = new ArrayList<>();
        for(int i=1;i<strings.length;i++){
            System.out.println(strings[i].substring(0,strings[i].indexOf(".")));
            contentList.add(strings[i].substring(0,strings[i].indexOf(".")));
        }
    }
}