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"; // 自定义错误信息
}
小程序表单提交
获取formid
xxx: function(e){
var formid = e.detail.formId;
}
小程序推送模板消息只能通过支付和表单提交获取凭证。一次支付可以推送三条,凭证是支付成功返回的prepay_id ;一次表单提交只能推送一次,凭证为formId。
重点!!!当前用户的formId只能推送给当前用户,就是谁提交了表单,就只能推送给谁,无法完成类似于买家支付推送消息给卖家的行为。
因为刚接触小程序,可能有很多不懂的,希望dalao多多指教。