⼩程序订阅消息推送--Springboot实现
背景
最近做个排号叫号的⼩程序,想⽤户在⼩程序上进⾏排号,商家在⼩程序上进⾏叫号,叫号的通知发送到⽤户⾥.这⾥就要⽤到订阅消息.
先看效果图
1.创建模板
登录公众平台
创建⼀个⾃⼰需要的模版,具体创建请⾃⾏查阅,今天的重点不在这⾥…
发送订阅消息的三个步骤.
⼀.获取⽤户的openid
⽤户的openid的获取,我是在⽤户使⽤登录时进⾏获取的,具体可以查看我登录的⽂章:
⼆.获取access_token
我们⾸先来看看access_token是什么,官⽅的说明是:
access_token是的全局唯⼀接⼝调⽤凭据,调⽤各接⼝时都需使⽤access_token。开发者需要进⾏妥善保存。
access_token的存储⾄少要保留512个字符空间。access_token的有效期⽬前为2个⼩时,需定时刷新,重复获取将导致上次获取的access_token失效。
简单来说,access_token就是⼩程序官⽅给我们提供的⼀个凭证,如果要调⽤官⽅的接⼝,就必须先获取凭证,所以我们先来谈谈怎么获取access_token.
还是先看官⽅⽂档
从官⽅⽂档我们可以看到,我们需要以下⼏个参数
参数是否必须说明
grant_type是获取access_token填写client_credential appid是第三⽅⽤户唯⼀凭证
secret是第三⽅⽤户唯⼀凭证密钥,即appsecret
grant_type是⼀个固定的值,appid和secret是需要我们填⼊的,这两个值在我们的⼩程序后台就可以拿到,具体可以查看我登录的⽂章:
可以在⼩程序后台去寻appid和secret
Java代码部分
具体思路就是先向提供的这个url发送⼀个get请求.
官⽅给的正常返回值为
新建⼀个pojo来存储返回的参数
import lombok.Data;
/**
* @author zty
* @date 2020/4/23 下午2:26
* @description:
*/
@Data
public class getAccessTokenModel {
private String access_token;
private Integer expires_in;
}
然后利⽤⼀个http⼯具类发送请求,⼀个json转model⼯具类来转换⼀下.这两个⼯具类具体代码后⾯贴出这就是我们获取access_token的代码了,获取之后将他存⼊redis,设置有效时间,超时就重新获取.
/**
* 获取AccessToken
*
* @return
*/
public String getAccessToken(){
("access_token")!= null){
return(String) ("access_token");
}
//GET api.weixin.qq/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET String url ="api.weixin.qq/cgi-bin/token";
Map<String, String> param =new HashMap<>();
param.put("grant_type","client_credential");
param.put("appid","wx7e139fc4dec9fd08");
param.put("secret","d483c36cf9f93500a17aa0cb788a0f48");
String vxResult = HttpClientUtil.doGet(url, param);
log.info(vxResult);
getAccessTokenModel accessTokenModel = JsonUtils.jsonToPojo(vxResult, getAccessTokenModel.class);
redisUtil.set("access_token", Access_token(), Expires_in());
Access_token();
//POST api.weixin.qq/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
}
使⽤这两个⼯具类需要引⼊俩个maven依赖
<!-- mvnrepository/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.7</version>
</dependency>
<!-- mvnrepository/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
package com.vx.utils;
import java.io.IOException;
import java.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.ity.UrlEncodedFormEntity;
import org.apache.hods.CloseableHttpResponse;
import org.apache.hods.HttpGet;
import org.apache.hods.HttpPost;
代码转换import org.apache.http.client.utils.URIBuilder;
import org.ity.ContentType;
import org.ity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.ssage.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
* @author zty
*/
public class HttpClientUtil {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论