最近在搞微信公众平台开发,需求是发送模板消息,相关的接口在开发者文档中有很详细的说明,https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277。
下面我们来看看具体怎么实现自己的需求:
一、点击以上链接,我们看到有7个接口,我们要用的就是第六个,发送模板消息,其他接口可根据自己业务需求来实现。
二、发送模板消息接口:
http请求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
post数据示例如下:
{
"touser":"OPENID",
"template_id":"TEMPLATEID",
"data":{
"first": {
"value":"恭喜你购买成功!",
"color":"#173177"
},
"product":{
"value":"巧克力",
"color":"#173177"
},
"amount": {
"value":"39.8元",
"color":"#173177"
},
"time": {
"value":"2014年9月22日",
"color":"#173177"
},
"remark":{
"value":"欢迎再次购买!",
"color":"#173177"
}
}
}
但是template_id和openid怎么获取呢
三、微信公众平台提供了公众平台测试账号,有权限限制的接口都可以在这里测试
1、接口测试号申请:
URL是启动你自己的项目后某个接口的请求地址,但要是外网的地址;Token是自己随意写的。
URL如果没有自己的地址,没关系,可以使用nettools,做内网穿透,映射到本地80端口即可:
2、扫描关注二维码,模拟用户,微信号为用户openid:
3、添加模板
模板内容有填写规则:
填写后如下示例:
好了,到现在openid和templateid都有了,我们开始测试。
返回成功!
测试环境跑通,我们只要将需要传的参数带上,请求腾讯的接口,就可以完成一次模板消息的发送。
java后端代码,我们需要封装实体:
@Data
public class WxTemplateDomain implements Serializable {
private String toUser;
private String templateId;
private String url;
private Map<String, TemplateParam> data;
}
@Data
public class TemplateParam {
private String value;
private String color;
}
然后在逻辑处理service层调用腾讯接口:
public static final String TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
/**
* 发送模板消息
* @param wxTemplateDomain
* @return
*/
public JSONObject getTemplate(WxTemplateDomain wxTemplateDomain,String token){
//发送模板消息
String domain = JSONSerializer.toJSON(wxTemplateDomain).toString();
String result = HttpUtils.postJson(TEMPLATE_URL+token,domain);
JSONObject object = JSONObject.parseObject(result);
if (object != null) {
int errcode = object.getIntValue("errcode");
if (errcode != 0) {
throw new ApiException(1, object.getString("errmsg"));
}
}
return object;
}
在发post请求调用腾讯接口的时候,原来我用的是post(String url,Map<String,?>requestParam),但每次到这里都报错47001,JSON/xml解析错误,网上查了多种解答,试过后无效,所以干脆用了postjson这种方式。