当前位置:   article > 正文

微信小程序订阅消息推送(附带后台java代码)_微信推送消息java版

微信推送消息java版

官方文档:
小程序前端:点击进入
小程序服务端:点击进入

一,代码实现(后端)

①定义实体类

  1. package com.saic.fin.system.sendInfo;
  2. import lombok.Data;
  3. import java.util.Map;
  4. @Data
  5. public class WxMsgVo {
  6. private String touser;//用户openId
  7. private String template_id;//模版id
  8. private Map<String , TemplateData> data;//推送文字
  9. private String page="pages/index/index";//跳转路径 ,默认跳转到小程序首页
  10. }
  1. package com.saic.fin.system.sendInfo;
  2. public class TemplateData {
  3. private String value;
  4. public TemplateData(String value) {
  5. this.value = value;
  6. }
  7. public String getValue() {
  8. return value;
  9. }
  10. public void setValue(String value) {
  11. this.value = value;
  12. }
  13. }

②定义HttpUtil类(Get请求)

  1. package com.saic.fin.system.util;
  2. import com.alibaba.fastjson.JSONObject;
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.net.HttpURLConnection;
  8. import java.net.MalformedURLException;
  9. import java.net.URL;
  10. public class HttpUtil {
  11. public static final String APPID = "";//小程序APPID(小程序ID)
  12. public static final String APPSECRET = "";//小程序APPSECRET(小程序秘钥)
  13. public static JSONObject doGetJson(String URL) throws IOException {
  14. JSONObject jsonObject = null;
  15. HttpURLConnection conn = null;
  16. InputStream is = null;
  17. BufferedReader br = null;
  18. StringBuilder result = new StringBuilder();
  19. try {
  20. //创建远程url连接对象
  21. URL url = new URL(URL);
  22. //通过远程url连接对象打开一个连接,强转成HTTPURLConnection类
  23. conn = (HttpURLConnection) url.openConnection();
  24. conn.setRequestMethod("GET");
  25. //设置连接超时时间和读取超时时间
  26. conn.setConnectTimeout(15000);
  27. conn.setReadTimeout(60000);
  28. conn.setRequestProperty("Accept", "application/json");
  29. //发送请求
  30. conn.connect();
  31. //通过conn取得输入流,并使用Reader读取
  32. if (200 == conn.getResponseCode()) {
  33. is = conn.getInputStream();
  34. br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
  35. String line;
  36. while ((line = br.readLine()) != null) {
  37. result.append(line);
  38. System.out.println(line);
  39. }
  40. } else {
  41. System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
  42. }
  43. } catch (MalformedURLException e) {
  44. e.printStackTrace();
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. } finally {
  50. try {
  51. if (br != null) {
  52. br.close();
  53. }
  54. if (is != null) {
  55. is.close();
  56. }
  57. } catch (IOException ioe) {
  58. ioe.printStackTrace();
  59. }
  60. conn.disconnect();
  61. }
  62. jsonObject = JSONObject.parseObject(result.toString());
  63. return jsonObject;
  64. }
  65. }

③验证token过期时间

  1. package com.saic.fin.system.OfficialAccounts;
  2. import lombok.Data;
  3. @Data
  4. public class AccessToken {
  5. private String accessToken;
  6. //过期时间 当前系统时间+微信传来的过期时间
  7. private Long expiresTime;
  8. public AccessToken(String accessToken, String expiresIn) {
  9. this.accessToken = accessToken;
  10. this.expiresTime = System.currentTimeMillis()+Integer.parseInt(expiresIn)*1000;
  11. }
  12. /**
  13. * 判断token是否过期
  14. * @return
  15. */
  16. public boolean isExpired(){
  17. return System.currentTimeMillis()>expiresTime;
  18. }
  19. }

④小程序发送消息

  1. package com.saic.fin.system.sendInfo;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.saic.fin.system.OfficialAccounts.AccessToken;
  4. import com.saic.fin.system.util.AuthUtil;
  5. import org.springframework.http.ResponseEntity;
  6. import org.springframework.web.client.RestTemplate;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. /**
  10. * 发送小程序订阅消息
  11. */
  12. public class SendWxMessage {
  13. public static final String APP_ACCESS_TOKEN_URL= "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+HttpUtil.APPID+"&secret="+HttpUtil.APPSECRET;
  14. private static AccessToken at;
  15. public static String push(String openid) {
  16. RestTemplate restTemplate = new RestTemplate();
  17. String accessToken = getToken();
  18. //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取)
  19. String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
  20. //拼接推送的模版
  21. WxMsgVo wxMsgVo = new WxMsgVo();
  22. wxMsgVo.setTouser(openid);//用户的openid(要发送给那个用户)
  23. wxMsgVo.setTemplate_id("CFeSWarQLMPyPjwmiy6AV4eB-IZcipu48V8bFLkBzTU");//订阅消息模板id
  24. wxMsgVo.setPage("pages/index/index");
  25. Map<String, TemplateData> m = new HashMap<>(3);
  26. m.put("thing1", new TemplateData("课程"));
  27. m.put("thing6", new TemplateData("大学"));
  28. m.put("thing7", new TemplateData("一节"));
  29. wxMsgVo.setData(m);
  30. ResponseEntity<String> responseEntity =
  31. restTemplate.postForEntity(url, wxMsgVo, String.class);
  32. return responseEntity.getBody();
  33. }
  34. public static String getToken(){
  35. if (at == null || at.isExpired()){
  36. getAccessToken();
  37. }
  38. return at.getAccessToken();
  39. }
  40. /**
  41. * 获取token
  42. */
  43. private static void getAccessToken() {
  44. //发送请求获取token
  45. JSONObject token = null;
  46. try {
  47. token = AuthUtil.doGetJson(APP_ACCESS_TOKEN_URL);
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. }
  51. JSONObject jsonObject = token;
  52. String accessToken = (String) jsonObject.get("access_token");
  53. Integer expiresIn = (Integer) jsonObject.get("expires_in");
  54. //创建token对象,并存储
  55. at = new AccessToken(accessToken,String.valueOf(expiresIn));
  56. }
  57. }

AuthUtil工具类

  1. package com.saic.fin.system.util;
  2. import com.alibaba.fastjson.JSONObject;
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.net.HttpURLConnection;
  8. import java.net.MalformedURLException;
  9. import java.net.URL;
  10. /**
  11. * 微信授权登录调用Util
  12. */
  13. public class AuthUtil {
  14. public static final String APPID = "xxxxxx";//小程序APPID(小程序ID)
  15. public static final String APPSECRET = "xxxxxxxxxxx";//小程序APPSECRET(小程序秘钥)
  16. public static JSONObject doGetJson(String URL) throws IOException {
  17. JSONObject jsonObject = null;
  18. HttpURLConnection conn = null;
  19. InputStream is = null;
  20. BufferedReader br = null;
  21. StringBuilder result = new StringBuilder();
  22. try {
  23. //创建远程url连接对象
  24. URL url = new URL(URL);
  25. //通过远程url连接对象打开一个连接,强转成HTTPURLConnection类
  26. conn = (HttpURLConnection) url.openConnection();
  27. conn.setRequestMethod("GET");
  28. //设置连接超时时间和读取超时时间
  29. conn.setConnectTimeout(15000);
  30. conn.setReadTimeout(60000);
  31. conn.setRequestProperty("Accept", "application/json");
  32. //发送请求
  33. conn.connect();
  34. //通过conn取得输入流,并使用Reader读取
  35. if (200 == conn.getResponseCode()) {
  36. is = conn.getInputStream();
  37. br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
  38. String line;
  39. while ((line = br.readLine()) != null) {
  40. result.append(line);
  41. System.out.println(line);
  42. }
  43. } else {
  44. System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
  45. }
  46. } catch (MalformedURLException e) {
  47. e.printStackTrace();
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. } finally {
  53. try {
  54. if (br != null) {
  55. br.close();
  56. }
  57. if (is != null) {
  58. is.close();
  59. }
  60. } catch (IOException ioe) {
  61. ioe.printStackTrace();
  62. }
  63. conn.disconnect();
  64. }
  65. jsonObject = JSONObject.parseObject(result.toString());
  66. return jsonObject;
  67. }
  68. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/706704
推荐阅读
相关标签
  

闽ICP备14008679号