记录 小程序发送模板消息

package com.mj.frame.entity.resp;


import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * 模板消息实体类
 * @author whf
 *
 */
public class TemplateMessage implements Serializable {


private static final long serialVersionUID = 1L;

// 接收者的openid
private String touser;
// 所需下发的template_id
private String template_id;
// 点击后跳转的小程序页面
private String page;
// 表单提交的form_id或者支付的prepay_id
private String form_id;
// 模板内容
private List<Map<String,TemplateData>> data;
// 模板内容字体的颜色,不填默认黑色 【废弃】
private String color;
// 模板需要放大的关键词,不填则默认无放大
private String emphasis_keyword;
public String getTouser() {
return touser;
}
public void setTouser(String touser) {
this.touser = touser;
}
public String getTemplate_id() {
return template_id;
}
public void setTemplate_id(String template_id) {
this.template_id = template_id;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public String getForm_id() {
return form_id;
}
public void setForm_id(String form_id) {
this.form_id = form_id;
}
public List<Map<String, TemplateData>> getData() {
return data;
}
public void setData(List<Map<String, TemplateData>> data) {
this.data = data;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getEmphasis_keyword() {
return emphasis_keyword;
}
public void setEmphasis_keyword(String emphasis_keyword) {
this.emphasis_keyword = emphasis_keyword;
}
public TemplateMessage(String touser, String template_id, String page,
String form_id, List<Map<String, TemplateData>> data) {
super();
this.touser = touser;
this.template_id = template_id;
this.page = page;
this.form_id = form_id;
this.data = data;
}
public TemplateMessage() { 
super();
}

}


package com.mj.frame.entity.resp;


public class TemplateData {


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;


}


}

                // 创建消息实体
TemplateMessage message = new TemplateMessage();
message.setTouser(openid);
message.setForm_id(formid);
message.setPage(page);
message.setTemplate_id(templateid);

List<Map<String, TemplateData>> list = new ArrayList<Map<String, TemplateData>>();
Map<String, TemplateData> data = new HashMap<String, TemplateData>();
TemplateData tempdata = new TemplateData();

tempdata.setValue(String);
data.put("keyword1", tempdata);
list.add(data);

tempdata.setValue(String);
data = new HashMap<String, TemplateData>();
data.put("keyword2", tempdata);
list.add(data);

tempdata.setValue(String);
data = new HashMap<String, TemplateData>();
data.put("keyword3", tempdata);
list.add(data);

tempdata.setValue(params.get("gs").toString());
data = new HashMap<String, TemplateData>();
data.put("keyword4", tempdata);
xlist.add(data);

tempdata.setValue(String);
data = new HashMap<String, TemplateData>();
xdata.put("keyword5", tempdata);
list.add(data);

message.setData(list);

String sendMessage = TemplateMsgPushUtil.sendMessage(message);




package com.mj.frame.util;


import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mj.frame.constants.PayCons;
import com.mj.frame.entity.resp.TemplateData;
import com.mj.frame.entity.resp.TemplateMessage;


/**
 * 小程序消息推送
 * @author whf
 *
 */
public class TemplateMsgPushUtil {


public static String sendMessage(TemplateMessage message) {
String token = null;
String jsonStr = HttpClientUtils.sendHttpRequestGET(
PayCons.getToken_url, "utf-8");
JSONObject jo = JSON.parseObject(jsonStr);
token = jo.getString("access_token");


// 发送模板消息
// 拼接Json字符串(因为我并没有找到简单的字符转换为JSON的方法,JSONObject.toJSONString()转换出来的好像有点问题)
StringBuilder data = new StringBuilder();
data.append("{\"touser\":\"").append(message.getTouser())
.append("\",\"template_id\":\"");
data.append(message.getTemplate_id()).append("\",\"page\":\"")
.append(message.getPage());
data.append("\",\"form_id\":\"").append(message.getForm_id())
.append("\",\"data\":{");
for (Map<String, TemplateData> d : message.getData()) {
String str = JSON.toJSONString(d);
data.append(str.substring(1, str.length() - 1) + ",");
}
String param = data.substring(0, data.lastIndexOf(",")) + "}";

if (message.getEmphasis_keyword() != null && !("").equals(message.getEmphasis_keyword())) {
param = param + "\"emphasis_keyword\":\"" + message.getEmphasis_keyword();
}
param = param + "}";
String res = HttpClientUtils.post(PayCons.sendMessage_url + token, param);
JSONObject result = JSONObject.parseObject(res);
return result.getString("errcode");
}


}

    

/**
     * 向指定url发送post请求
     * @param strURL 指定url
     * @param params JSON格式的参数
     * @return
     */
    public static String post(String strURL, String params) {  
    params = StringEscapeUtils.unescapeJava(params);
    System.out.println(params);
        try {  
            URL url = new URL(strURL);// 创建连接  
            HttpURLConnection connection = (HttpURLConnection) url  
                    .openConnection();  
            connection.setDoOutput(true);  
            connection.setDoInput(true);  
            connection.setUseCaches(false);  
            connection.setInstanceFollowRedirects(true);  
            connection.setRequestMethod("POST"); // 设置请求方式  
            connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式  
            connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式  
            connection.connect();  
            OutputStreamWriter out = new OutputStreamWriter(  
                    connection.getOutputStream(), "UTF-8"); // utf-8编码  
            out.append(params);  
            out.flush();  
            out.close();  
            // 读取响应  
            int length = (int) connection.getContentLength();// 获取长度  
            InputStream is = connection.getInputStream();  
            if (length != -1) {  
                byte[] data = new byte[length];  
                byte[] temp = new byte[512];  
                int readLen = 0;  
                int destPos = 0;  
                while ((readLen = is.read(temp)) > 0) {  
                    System.arraycopy(temp, 0, data, destPos, readLen);  
                    destPos += readLen;  
                }  
                String result = new String(data, "UTF-8"); // utf-8编码  
                System.out.println(result);  
                return result;  
            }  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return "error"; // 自定义错误信息  
    } 

   

小程序表单提交

< form report-submit= 'true' bindsubmit= 'xxx'>
    < button form-type= 'submit' > </ button >
</ form >


获取formid

xxx: function(e){

    var formid = e.detail.formId;

}

小程序推送模板消息只能通过支付和表单提交获取凭证。一次支付可以推送三条,凭证是支付成功返回的prepay_id ;一次表单提交只能推送一次,凭证为formId。

重点!!!当前用户的formId只能推送给当前用户,就是谁提交了表单,就只能推送给谁,无法完成类似于买家支付推送消息给卖家的行为。


因为刚接触小程序,可能有很多不懂的,希望dalao多多指教。

猜你喜欢

转载自blog.csdn.net/weixin_42612454/article/details/80950299