关于java对接微信模板消息推送

 

最近项目中有个功能,用户在下单支付成功后需要对微信提供服务通知。在网上找了资料结合自己实际应用,故写一篇博客记录一下操作。

微信官方API文档:https://developers.weixin.qq.com/miniprogram/dev/api/notice.html

注:需登录微信公众平台。

1,绑定消息推送

   登录微信公众平台。

41561c75c4671dcbcac9b69f63206439983.jpg

启动消息推送。

188035b3abcb33cb16fd8758c67b6f48033.jpg

URL:用url访问文件名地址(这个我们指某个接口即可)

token:自己随便起个名字就行英文数字3-32个字符

EncodingAESKey(消息加密密匙):直接用服务器生成即可

消息加密方式:这里我选择的是兼容模式

2,设置消息模板

325c66ece0fbee4734df5809b95a7784563.jpg

这里我设置的是“订单支付成功通知”,选用的是模板库中ID为AT0002的模板。添加三个关键字,下面是模板详细信息。

6893b656b7cce4b85ed6da8acd611a55eca.jpg

以上,关于微信公众平台设置完成。

3,获取接口调用凭证(access_token)

接口地址(GET方式请求):

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

 入参:

grant_type(必传):获取access_token填写 client_credential

appid(必传):第三方用户唯一凭证

secret(必传):第三方用户唯一凭证密钥,即appsecret

{
    "access_token": "12_1QmRzOe6at4sYB-UwRDxC2XI6zoOFQikcohs4U9HLE7fYQyFh1MjYDiTiRVRAl9e_ZlfbjrPqrrCUjQFMpn2UFZoTD8ykkHgKmmoco8yj2FALk2puNr9tQB57hIESCgAEAWKU",
    "expires_in": 7200
}

注:目前access_token有效时长默认2个小时,访问接口一次access_token重置。

4,获取模板ID

这里获取模板ID有两种方式:

第一种:在微信公众平台中-模板消息中即可获得模板id

第二种:接口访问,以下是接口地址

4d395f34dd8b6f872ff517615e984435e4a.jpg

 

https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=12_1QmRzOe6at4sYB-UwRDxC2XI6zoOFQikcohs4U9HLE7fYQyFh1MjYDiTiRVRAl9e_ZlfbjrPqrrCUjQFMpn2UFZoTD8ykkHgKmmoco8yj2FALk2puNr9tQB57hIESCgAEAWKU

 

返回信息:

{
    "errcode": 0,
    "errmsg": "ok",
    "list": [
        {
            "template_id": "86FE7106Gfce1HLf7T45LCSkxlWdFcttSsqDALaeCxo",
            "title": "订单发货提醒",
            "content": "快递公司{{keyword1.DATA}}\n发货时间{{keyword2.DATA}}\n购买时间{{keyword3.DATA}}\n物品名称{{keyword4.DATA}}\n",
            "example": "快递公司:TIT造舰快递\n发货时间:2016年8月9日\n购买时间:2016年8月8日\n物品名称:电风扇\n"
        },
        {
            "template_id": "5JddhfNLDT0DYcKaroXC9drFPfNfiuo4nZKrkZFtFS0",
            "title": "订单支付成功通知",
            "content": "订单号码{{keyword1.DATA}}\n订单金额{{keyword2.DATA}}\n支付时间{{keyword3.DATA}}\n",
            "example": "订单号码:123456789\n订单金额:200元\n支付时间:2104-12-09 16:00\n"
        }
    ]
}

 

5,发送模板消息

接口地址:

 050fd1bfd4a0cacc9d1b4d2ac68cba3276f.jpg

 

6,后台代码实现

(1获取access_token

   根据微信API文档返回信息,写一个对象来接收返回值

/*
* AccessToken 对象
*/
public class AccessToken {

	// 获取到的凭证
	private String access_token;

	// 凭证有效时间,单位:秒
	private Integer expires_in;

	public String getAccess_token() {
		return access_token;
	}

	public void setAccess_token(String access_token) {
		this.access_token = access_token;
	}

	public Integer getExpires_in() {
		return expires_in;
	}

	public void setExpires_in(Integer expires_in) {
		this.expires_in = expires_in;
	}

}

 

具体获取access_token代码实现:

/**
	 * 根据微信id,secret获取access_token
	 * 
	 */
	public String getAccessToken() {
		String tmpUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId
				+ "&secret=" + appSecret + "";
		CloseableHttpClient httpCilent = HttpClients.createDefault();
		HttpGet httpGet = new HttpGet(tmpUrl);
		try {
			HttpResponse httpResponse = httpCilent.execute(httpGet);
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				String entity = EntityUtils.toString(httpResponse.getEntity());
				AccessToken accessToken = JSONObject.parseObject(entity, AccessToken.class);
				return accessToken.getAccess_token();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// 释放资源
				httpCilent.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return "";
	}

 

2)发送消息模板

   根据微信API文档返回模板信息,写一个对象来接收返回值

/**
 * 模板返回消息
 *
 */
public class ResultTemplateDate {

	private String errcode;

	private String errmsg;

	public String getErrcode() {
		return errcode;
	}

	public void setErrcode(String errcode) {
		this.errcode = errcode;
	}

	public String getErrmsg() {
		return errmsg;
	}

	public void setErrmsg(String errmsg) {
		this.errmsg = errmsg;
	}

}

 

具体业务代码实现

/**
	 * 发送微信消息模板
	 * 
	 */
	public String sendTemplate(String touser, String formId, String templateId, String clickurl, String[] fillData) {
		String tepUrl = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token="
				+ getAccessToken();
		CloseableHttpClient httpClient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(tepUrl);
		// 装配post请求参数
		JSONObject json = new JSONObject();
		json.put("touser", touser);
		json.put("template_id", templateId);
		json.put("form_id", formId);
		json.put("emphasis_keyword", "keyword1.DATA");
		JSONObject dataJson = new JSONObject();
		for (int i = 0; i < fillData.length; i++) {
			JSONObject sonDateJson = new JSONObject();
			sonDateJson.put("value", fillData[i]);
			dataJson.put("keyword" + (i + 1), sonDateJson);
		}
		json.put("data", dataJson);
		String resultStr = "发送失败";
		try {
			StringEntity myEntity = new StringEntity(json.toJSONString(), ContentType.APPLICATION_JSON);

			// 设置post求情参数
			httpPost.setEntity(myEntity);
			HttpResponse httpResponse = httpClient.execute(httpPost);
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				// 发送成功
				String resutlEntity = EntityUtils.toString(httpResponse.getEntity());
				ResultTemplateDate resultTemplateDate = JSONObject.parseObject(resutlEntity, ResultTemplateDate.class);
				if (resultTemplateDate.getErrcode().equals("40037")) {
					resultStr = "template_id不正确";
				}
				if (resultTemplateDate.getErrcode().equals("41028")) {
					resultStr = "form_id不正确,或者过期";
				}
				if (resultTemplateDate.getErrcode().equals("41029")) {
					resultStr = "form_id已被使用";
				}
				if (resultTemplateDate.getErrcode().equals("41030")) {
					resultStr = "page不正确";
				}
				if (resultTemplateDate.getErrcode().equals("45009")) {
					resultStr = "接口调用超过限额(目前默认每个帐号日调用限额为100万)";
				}
				resultStr = "ok";
				return resultStr;
			} else {
				// 发送失败
				return resultStr;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (httpClient != null) {
					// 释放资源
					httpClient.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultStr;
	}

以上,关于对微信模板消息推送完成。

转载于:https://my.oschina.net/dzsgwz/blog/1865128

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值