发送微信小程序消息
一、需要得到用户的数据:
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
小程序













