页面的 组件,属性
report-submit
为true
时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId
,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id
用于发送模板消息。
此处的一个formId在7天内可以推送一次模板消息。 但有时我们需要用户一次点击之后,可以多次给用户发送推送消息(提醒)。就需要在用户点击一次后,获取多个formId,然后保存到后台。
直接上代码
亲测可用
单次点击获取单个formid
单次点击获取多个formid,下面代码是单次点击获取5个formid。要获取多少个formid,则复制多少次,内嵌在里面。
点击按钮,则可获得5次formid。
2.wxss代码
.btn {
width: 0rpx;
height: 0rpx;
margin: 0;
padding: 0;
border-radius: 0;
position:absolute;
background: rgba(0, 155, 0, 0.5);
top: 0;
}
.vv {
width: 200rpx;
height: 200rpx;
background: rgba(0, 155, 0, 0.5);
position: fixed;
top: 0;
}
3.js代码,在这里可以加上后台保存formId的方法,在有效期(7天)内用这些formId给用户发送模板消息(提醒)。
formSubmit:function(e){
console.log(e.detail.formId);
}
4.java后端代码
public static void main(String[] args) {
Map params = new HashMap<>();
//发送模版消息
String accessToken = "accessToken";
params.put("touser", "需要发送的openid或unionid");
params.put("template_id", "模板id");
params.put("page", "pages/index/index");
params.put("form_id", "获取的formid");
params.put("data", buildTemplateInfo());
params.put("color", "");
params.put("emphasis_keyword", "keyword1.DATA");
String res = SendHttpReqUtil.sendPost("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token="+accessToken, params);
System.out.println(res);
}
private static Map buildTemplateInfo(){
Map templateInfo =new HashMap<>();
Map info =new HashMap<>();
info.put("value", "大吉大利,今晚吃鸡");
templateInfo.put("keyword1", info);
info =new HashMap<>();
info.put("value", "你的好友已完成评价");
templateInfo.put("keyword2", info);
info =new HashMap<>();
info.put("value", "orderId0000001");
templateInfo.put("keyword3", info);
info =new HashMap<>();
info.put("value", "这是评价评估");
templateInfo.put("keyword4", info);
return templateInfo;
}
/**
* 发送HttpPost请求
*
* @param strURL
* 服务地址
* @param params
*
* @return 成功:返回json字符串
*/
public static String sendPost(String strURL, Map 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(JsonUtil.getJsonStr(params));
out.flush();
out.close();
int code = connection.getResponseCode();
InputStream is = null;
if (code == 200) {
is = connection.getInputStream();
} else {
is = connection.getErrorStream();
}
// 读取响应
int length = (int) connection.getContentLength();// 获取长度
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编码
return result;
}
} catch (IOException e) {
logger.error("Exception occur when send http post request!", e);
}
return "error"; // 自定义错误信息
}
获取formid 借鉴了 http://www.51xuediannao.com/xiaochengxu/0cba78ba.html