发送微信小程序消息
一、需要得到用户的数据:
1. 用户微信的唯一标识: oppenId
2. 判断用户使用的是哪种类型的手机,苹果和安卓使用的formId是不一样的,不能混用
3. 记录用户在小程序点击按钮的formId,formId七天后会过期,如使用过期的formId发送消息,会提示:formId不可用
二、 获取Token
调用微信小程序开发文档中的接口,获取access_token,有效期为2个小时,使用的时候需要注意调用的次数每日是有限制的
调用access_token次数:
体验版: 每日限制次数为200次
正式环境:每日限制次数为2000次
三、发送消息
注意:小程序需要配置消息模板,体验版与正式环境的模板id一致
接口地址:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=调用获取access_token接口
参数详解:
access_token :接口调用凭证,需要调用接口获取
touser : 接收者(用户)的 openid --- 需要用户在登录小程序的时候授权获得
template_id : 发送的消息模板id --- 不区分体验版还是正式环境
page : 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)不填则模板无跳转。
form_id :表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id --- 需要收集多个formId
data : 模板内容 --- 里面的字段是自己配置的 格式: json串
emphasis_keyword :模板需要放大的关键词,不填则默认无放大
请求参数示例:
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"form_id": "FORMID",
"data": {
"keyword1": {
"value": "339208499"
},
"keyword2": {
"value": "2015年01月05日 12:30"
},
"keyword3": {
"value": "腾讯微信总部"
},
"keyword4": {
"value": "广州市海珠区新港中路397号"
}
},
"emphasis_keyword": "keyword1.DATA"
}
代码:
/**
* 获取access_token
*/
private String getAccess_Token() {
String APPID = "小程序唯一凭证,即APPID";
String SECRET = "小程序唯一凭证密钥,即AppSecret";
String access_token = "";
String post = HttpUtil.doGet("https://api.weixin.qq.com/cgi-bin/token?appid=" + APPID + "&secret=" + SECRET + "&grant_type=client_credential");
JSONObject jsonObject = (JSONObject) JSON.parse(post);
access_token = (String) jsonObject.get("access_token");
System.out.println("access_token==" + access_token);
return access_token;
}
/**
* 推送微信小程序消息
*/
private String sendWXTemplateMsg(JSONObject data, String formId, String openId, String templateId, String page, String token) {
JSONObject param = new JSONObject();
param.put("touser", openId);
param.put("template_id", templateId);
param.put("page", page);
param.put("form_id", formId);
// 模板信息
if (data != null) {
param.put("data", data);
}
String doPost = HttpUtil.doPost("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + token, param.toJSONString());
// String post = HttpKit.post(, json);
System.out.println("doPost==" + doPost);
return doPost;
}
返回示例:
{
"errcode": 0,
"errmsg": "ok"
}
返回的错误码:
0 : 推送成功
40037 :template_id不正确
41028 :form_id不正确,或者过期 --- 遇到的次数最多
41029 :form_id已被使用 --- 用过后要即时删除,避免发生此错误
41030 :page不正确 --- 点击消息跳转的页面地址
45009 :接口调用超过限额(目前默认每个帐号日调用限额为100万)
官方地址:
获取token: https://developers.weixin.qq.com/miniprogram/dev/api-backend/getAccessToken.html
发送消息:https://developers.weixin.qq.com/miniprogram/dev/api-backend/sendTemplateMessage.html