最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用java編寫微信小程序消息提醒推送

 更新時間:2023年11月24日 10:39:34   作者:Pluto652  
最近參與開發(fā)的項目有用到微信模板消息推送,在這離記錄一下,下面這篇文章主要給大家介紹了關于如何用java編寫微信小程序消息提醒推送的相關資料,需要的朋友可以參考下

一.先制定模板,我以已刪除的模板為例

二.java后臺創(chuàng)建小程序 Vo類,用于封裝傳送的參數(shù)。

import lombok.Data;
@Data
public class TemplateDataVo {
    /*微信文檔中要求的格式 "data": { "name01": {"value": "某某"},"thing01": {"value": "廣州至北京"
      } ,"date01": {"value": "2018-01-01"}
  }*/
    private String value;
}
import lombok.Data;
import java.util.Map;
/*
 * 小程序推送所需數(shù)據
 * */
@Data
public class WxMssVo {
    private String touser;//用戶openid
    private String template_id;//模版id
    private String page = "pages/index/index";//默認跳到小程序首頁
//    private String emphasis_keyword = "keyword1.DATA";//放大那個推送字段
    private Map<String, TemplateDataVo> data;//推送文字
}

1.獲取小程序全局后臺接口調用憑據,有效期最長為7200

  /*
     * 獲取access_token
     * appid和appsecret到小程序后臺獲取
     * */
    public String getAccess_token() {
        //獲取access_token
        String appid = "*****";  //appid和appsecret到小程序后臺獲取
        String appsecret = "*****";  //appid和appsecret到小程序后臺獲取
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
                "&appid=" + appid + "&secret=" + appsecret;
        if(restTemplate==null){
            restTemplate = new RestTemplate();
        }
        String json = restTemplate.getForObject(url, String.class);
        JSONObject myJson = JSONObject.parseObject(json);
        return myJson.get("access_token").toString();
    }

2.發(fā)送消息給指定的用戶

  public String pushOneUser(String access_token, String openid, String type, String templateId, String[] keywords) {

        //如果access_token為空則從新獲取
        if(StringUtils.isEmpty(access_token)){
            access_token = getAccess_token();
        }

        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send" +
                "?access_token=" + access_token;

        //拼接推送的模版
        WxMssVo wxMssVo = new WxMssVo();
        wxMssVo.setTouser(openid);//用戶openid
        /*wxMssVo.setForm_id(formId);//formId*/
        wxMssVo.setTemplate_id(templateId);//模版id
        Map<String, TemplateDataVo> m = new HashMap<>();
        if (type.equals("3")) {
            m.put("thing3", new TemplateDataVo(keywords[0]));
            m.put("time1", new TemplateDataVo(keywords[1]));
            m.put("thing4", new TemplateDataVo(keywords[2]));
            wxMssVo.setData(m);
        }

        if(restTemplate==null){
            restTemplate = new RestTemplate();
        }

        ResponseEntity<String> responseEntity =
                restTemplate.postForEntity(url, wxMssVo, String.class);
        log.error("小程序推送結果={}", responseEntity.getBody());
        return responseEntity.getBody();
    }

3.整合

package com.ac.project.task.utils;

import com.ac.project.task.service.impl.applet.WXServiceImpl;
import com.ac.project.task.vo.TemplateDataVo;
import com.ac.project.task.vo.WxMssVo;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: coworking
 * @description: 微信工具類
 * @author: zhaozehui
 * @create: 2023-05-08 10:09
 **/
@Slf4j
public class weChatUtil {

    private static RestTemplate restTemplate;

    final Boolean flag = false;

    /**
     * description 1.獲取用戶的臨時code
     * param [appid, redirectUrl]
     * return java.lang.String
     * author
     **/
    public static String getUserUathUrl(String appid, String redirectUrl) throws UnsupportedEncodingException {
        StringBuffer getcodeUrl = new StringBuffer()
                .append("https://open.weixin.qq.com/connect/oauth2/authorize")
                .append("?appid=" + appid)
                .append("&redirect_uri=" + URLEncoder.encode(redirectUrl, "utf-8"))
                .append("&response_type=code")
                .append("&scope=snsapi_userinfo")
                .append("&state=" + System.currentTimeMillis())
                .append("#wechat_redirect");

        return getcodeUrl.toString();
    }

    /**
     * description  2.獲取用戶的openid和access_token
     * param [appid, appSecret, code]
     * return java.lang.String
     * author
     **/
    public static String getBaseAccessTokenUrl(String appid, String appSecret, String code) throws UnsupportedEncodingException {
        StringBuffer baseAccessTokenUrl = new StringBuffer()
                .append("https://api.weixin.qq.com/sns/oauth2/access_token")
                .append("?appid=" + appid)
                .append("&secret=" + appSecret)
                .append("&code=" + code)
                .append("&grant_type=authorization_code");

        return baseAccessTokenUrl.toString();
    }

    /**
     * description  3.根據openid 獲取用戶的信息
     * param [accessToken, openid]
     * return java.lang.String
     * author
     **/
    public static String getBaseUserInfoUrl(String accessToken, String openid) {
        StringBuffer baseUserInfoUrl = new StringBuffer()
                .append("https://api.weixin.qq.com/sns/userinfo")
                .append("?access_token=" + accessToken)
                .append("&openid=" + openid)
                .append("&lang=zh_CN");
        return baseUserInfoUrl.toString();
    }

    /**
     * description 4檢驗授權憑證(access_token)是否有效
     * param [openid, accessToken]
     * return java.lang.String
     **/
    public static String checkAccessToken(String openid, String accessToken) {
        StringBuffer stringBuffer = new StringBuffer().append(" https://api.weixin.qq.com/sns/auth")
                .append("?access_token=" + accessToken)
                .append("&openid=" + openid);
        return stringBuffer.toString();
    }

    /**
     * description 微信小程序登錄,通過code獲取session_key和openid
     * param [appid, secret, code]
     * return java.lang.String
     * author
     **/
    public static String getCode2Session(String appid, String secret, String code) {
        StringBuffer code2Session = new StringBuffer()
                .append("ttps://api.weixin.qq.com/sns/jscode2session")
                .append("?appid=" + appid)
                .append("&secret=" + secret)
                .append("&js_code=" + code)
                .append("&grant_type=authorization_code");
        return code2Session.toString();
    }
    /**
     *    推送消息給指定的用戶
     * @param access_token  app的token
     * @param openid 用戶openid
     * @param type 類型 1派發(fā)模板 2.反饋提醒 3審核模板 4日期截至提醒模板
     * @param templateId 模板ID
     * @param keywords {與模板字段一一對應}
     * @return
     */
    public String pushOneUser(String access_token, String openid, String type, String templateId, String[] keywords) {

        //如果access_token為空則從新獲取
        if(StringUtils.isEmpty(access_token)){
            access_token = getAccess_token();
        }

        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send" +
                "?access_token=" + access_token;

        //拼接推送的模版
        WxMssVo wxMssVo = new WxMssVo();
        wxMssVo.setTouser(openid);//用戶openid
        /*wxMssVo.setForm_id(formId);//formId*/
        wxMssVo.setTemplate_id(templateId);//模版id
        Map<String, TemplateDataVo> m = new HashMap<>();
        if (type.equals("3")) {
            m.put("thing3", new TemplateDataVo(keywords[0]));
            m.put("time1", new TemplateDataVo(keywords[1]));
            m.put("thing4", new TemplateDataVo(keywords[2]));
            wxMssVo.setData(m);
        } else if (type.equals("1")) {
        /* [發(fā)起人,發(fā)布時間,任務名稱,任務描述,結束時間]*/
            m.put("thing12",new TemplateDataVo(keywords[0]));
            m.put("date3",new TemplateDataVo(keywords[1]));
            m.put("thing4",new TemplateDataVo(keywords[2]));
            m.put("thing6",new TemplateDataVo(keywords[3]));
            m.put("time9",new TemplateDataVo(keywords[4]));

        }else if (type.equals("2")){
            
        }

        if(restTemplate==null){
            restTemplate = new RestTemplate();
        }

        ResponseEntity<String> responseEntity =
                restTemplate.postForEntity(url, wxMssVo, String.class);
        log.error("小程序推送結果={}", responseEntity.getBody());
        return responseEntity.getBody();
    }


    /*
     * 獲取access_token
     * appid和appsecret到小程序后臺獲取,當然也可以讓小程序開發(fā)人員給你傳過來
     * */
    public String getAccess_token() {
        //獲取access_token
        String appid = "";
        String appsecret = "";
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
                "&appid=" + appid + "&secret=" + appsecret;
        if(restTemplate==null){
            restTemplate = new RestTemplate();
        }
        String json = restTemplate.getForObject(url, String.class);
        JSONObject myJson = JSONObject.parseObject(json);
        return myJson.get("access_token").toString();
    }

    public static void main(String[] args) {
        System.out.println(new WXServiceImpl().getAccess_token());

        WXServiceImpl wxService = new WXServiceImpl();
        String values[] = {"zzh7878","2023年5月8日 15:01","ceshi"};
        wxService.pushOneUser(wxService.getAccess_token()
                , "oM47R5KO0kFhsScuitgSJSjiN0s", "3", "QhJq4RvU7qGyf7FY_ZFc1sHJCTD8VkFvtHEx8uHwY4"
                , values);
    }

}

4.測試

注意:在前端調用方法時,只有發(fā)生點擊行為或者支付行為才會出現(xiàn)訂閱欄

微信小程序文檔:wx.requestSubscribeMessage(Object object) | 微信開放文檔

會出現(xiàn)以下彈窗

 未允許的話,會出現(xiàn)以下日志

 點擊允許后,再次測試收到通知

總結

到此這篇關于如何用java編寫微信小程序消息提醒推送的文章就介紹到這了,更多相關java微信小程序消息提醒推送內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java結合redistemplate使用分布式鎖案例講解

    Java結合redistemplate使用分布式鎖案例講解

    在Java中使用RedisTemplate結合Redis來實現(xiàn)分布式鎖是一種常見的做法,特別適用于微服務架構或多實例部署的應用程序中,以確保數(shù)據的一致性和避免競態(tài)條件,下面給大家分享使用Spring Boot和RedisTemplate實現(xiàn)分布式鎖的案例,感興趣的朋友一起看看吧
    2024-08-08
  • 通過實例解析Spring argNames屬性

    通過實例解析Spring argNames屬性

    這篇文章主要介紹了通過實例解析Spring argNames屬性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Java截取字符串的幾種常用方法

    Java截取字符串的幾種常用方法

    這篇文章主要給大家介紹了關于Java截取字符串的幾種常用方法,在Java編程語言中,String類提供了用于操作字符串的豐富方法,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • IDEA2023常用配置指南(JDK/系統(tǒng)設置等常用配置)

    IDEA2023常用配置指南(JDK/系統(tǒng)設置等常用配置)

    idea很強大,但是初次安裝默認的有很多設置并不是滿足我們開發(fā)的需要,下面這篇文章主要給大家介紹了關于IDEA2023常用配置(JDK/系統(tǒng)設置等常用配置)的相關資料,需要的朋友可以參考下
    2023-12-12
  • java 字符串分割的三種方法(總結)

    java 字符串分割的三種方法(總結)

    下面小編就為大家?guī)硪黄猨ava 字符串分割的三種方法(總結)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • SpringBoot定時任務多線程實現(xiàn)示例

    SpringBoot定時任務多線程實現(xiàn)示例

    在真實的Java開發(fā)環(huán)境中,我們經常會需要用到定時任務來幫助我們完成一些特殊的任務,本文主要介紹了SpringBoot定時任務多線程實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • java實現(xiàn)上傳網絡圖片到微信臨時素材

    java實現(xiàn)上傳網絡圖片到微信臨時素材

    這篇文章主要為大家詳細介紹了java實現(xiàn)上傳網絡圖片到微信臨時素材,網絡圖片上傳到微信服務器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • java中實現(xiàn)excel合并單元格詳細代碼實例

    java中實現(xiàn)excel合并單元格詳細代碼實例

    最近的工作中,遇到一個需求在生成的Excel表格后需要在尾部添加一個合并的單元格數(shù)據,這篇文章主要給大家介紹了關于java中實現(xiàn)excel合并單元格的相關資料,需要的朋友可以參考下
    2024-06-06
  • Java面試題沖刺第十九天--數(shù)據庫(4)

    Java面試題沖刺第十九天--數(shù)據庫(4)

    這篇文章主要為大家分享了最有價值的三道關于數(shù)據庫的面試題,涵蓋內容全面,包括數(shù)據結構和算法相關的題目、經典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Spring中的@Qualifier注解和@Resource注解區(qū)別解析

    Spring中的@Qualifier注解和@Resource注解區(qū)別解析

    這篇文章主要介紹了Spring中的@Qualifier注解和@Resource注解區(qū)別解析,@Qualifier注解的用處是當一個接口有多個實現(xiàn)的時候,為了指名具體調用哪個類的實現(xiàn),@Resource注解可以通過 byName命名和byType類型的方式注入,需要的朋友可以參考下
    2023-11-11

最新評論

许昌市| 沙湾县| 内江市| 怀集县| 志丹县| 武川县| 舞阳县| 南澳县| 临高县| 定安县| 扶沟县| 鄂托克前旗| 芦溪县| 常熟市| 巨鹿县| 峨眉山市| 武威市| 泉州市| 通辽市| 六枝特区| 彭州市| 彰武县| 错那县| 蒙城县| 棋牌| 绥滨县| 达日县| 呈贡县| 如皋市| 兴宁市| 洛浦县| 武陟县| 堆龙德庆县| 同心县| 岗巴县| 涿州市| 奉化市| 仁怀市| 阜平县| 博野县| 永济市|