微信主动发送消息功能(微信主动发送消息功能在哪里)

微信主动发送消息功能(微信主动发送消息功能在哪里)

解决方案goocz2025-07-09 14:36:112A+A-

功能展示


主动通知用户的方式

我们看一下具体实现功能


我们需要准备东西

appid

secret

在那里查看

开发管理-查看appid和secret

获取openid每个用户的标识

获取方式

wx.request({
            url: 'https://api.weixin.qq.com/sns/jscode2session',
            method: 'GET',
            data: {
              appid: "xxx",
              secret: "xxx",
              js_code: res.code,
              grant_type: "authorization_code"
            },
            success: (res) => {
              console.log("成功信息", res.data.openid);
              //发起网络请求
              wx.request({
                url: 'http://localhost/wx/getToken',
                //获取了openid信息的方式
                data: {
                  openid: res.data.openid
                },
                success:(res)=> {
                  console.log('运行成功',res);
                },
                fail:(res)=>{}
              })
            },
            fail: (res) => { },
            complete: () => { }
          },
          )

获取openid的方式

链接

url: 'https://api.weixin.qq.com/sns/jscode2session',

get方式请求

请求参数信息

appid:

secret:

js_code:

grant_type: "authorization_code"

返回的参数在res.data.openid

我们的前端代码已经完成了

出现这个信息

代表我们已经成功了

写java后端代码

导入依赖信息

这个是封装好的小程序依赖

我们直接使用就可以

  <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>4.4.0</version>
        </dependency>


配置config中wxMaService

@Configuration
public class WxConfig {
    @Bean
    public WxMaService wxMaService(){
        return new WxMaServiceImpl();
    }
}

配置基本信息

appid和secret

WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
        wxMaDefaultConfig.setAppid("appid");
        wxMaDefaultConfig.setSecret("secret");
        wxMaService.setWxMaConfig(wxMaDefaultConfig);

获取token信息

//获取token信息
        String accessToken = wxMaService.getAccessToken();
        if (accessToken != null) {
            System.out.println("输出token信息"+accessToken);
        }else {
            System.out.println("没有token信息");
        }

准备发送的数据

我们需要申请微信模板

订阅消息

在小程序订阅消息中选用一个模板

我们模板详情

重点

这个就是我们发送kev-value

必须按照name和value发送数据信息


必须按照这个方式写

必须添加三个

  WxMaSubscribeMessage.MsgData msgData1 = new WxMaSubscribeMessage.MsgData();
        msgData1.setName("character_string1");
        msgData1.setValue("04-01-0001");


        WxMaSubscribeMessage.MsgData msgData2 = new WxMaSubscribeMessage.MsgData();
        msgData2.setName("time2");
        msgData2.setValue("2019-12-31 12:21");

        WxMaSubscribeMessage.MsgData msgData3 = new WxMaSubscribeMessage.MsgData();

        msgData3.setName("thing3");
        msgData3.setValue("天天");

        list.add(msgData1);
        list.add(msgData2);
        list.add(msgData3);


        WxMaSubscribeMessage wxMaSubscribeMessage = new WxMaSubscribeMessage();
        wxMaSubscribeMessage.setData(list);

设置其他属性

 //设置中文字体
        wxMaSubscribeMessage.setLang(WxMaConstants.MiniProgramLang.ZH_CN);

        //点击调整的页面
        wxMaSubscribeMessage.setPage("pages/inflate/inflate");
        //订阅模板
        wxMaSubscribeMessage.setTemplateId("q6doJbwQmUvUahR0AV22PY-suTE5ra17PH7NaaHjqtI");
        //用户id
        wxMaSubscribeMessage.setToUser(openid);

发送消息配置

 //设置wxMaService对象的属性
        WxMaDefaultConfigImpl wx = new WxMaDefaultConfigImpl();
        wx.setAppid("appid");
        wx.setSecret("se");
        wx.setToken(accessToken);
        wxMaService.addConfig("appid",wx);
        //发送订阅消息
        wxMaService.getMsgService().sendSubscribeMsg(wxMaSubscribeMessage);


整体controller代码

  @Bean
    public WxMaService wxMaService(){
        return new WxMaServiceImpl();
    }
 
 
 @Autowired
    private WxMaService wxMaService;

    @GetMapping("/getToken")
    public String getToken(@RequestParam("openid") String openid) throws WxErrorException {
        WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
        wxMaDefaultConfig.setAppid("appid");
        wxMaDefaultConfig.setSecret("secret");
        wxMaService.setWxMaConfig(wxMaDefaultConfig);

        //获取token信息
        String accessToken = wxMaService.getAccessToken();

        if (accessToken != null) {
            System.out.println("输出token信息"+accessToken);
        }else {
            System.out.println("没有token信息");
        }

        //设置key-value信息

        List<WxMaSubscribeMessage.MsgData> list = new ArrayList<>();

        WxMaSubscribeMessage.MsgData msgData1 = new WxMaSubscribeMessage.MsgData();
        msgData1.setName("character_string1");
        msgData1.setValue("04-01-0001");


        WxMaSubscribeMessage.MsgData msgData2 = new WxMaSubscribeMessage.MsgData();
        msgData2.setName("time2");
        msgData2.setValue("2019-12-31 12:21");

        WxMaSubscribeMessage.MsgData msgData3 = new WxMaSubscribeMessage.MsgData();

        msgData3.setName("thing3");
        msgData3.setValue("天天");

        list.add(msgData1);
        list.add(msgData2);
        list.add(msgData3);


        WxMaSubscribeMessage wxMaSubscribeMessage = new WxMaSubscribeMessage();
        wxMaSubscribeMessage.setData(list);

        //设置中文字体
        wxMaSubscribeMessage.setLang(WxMaConstants.MiniProgramLang.ZH_CN);

        //点击调整的页面
        wxMaSubscribeMessage.setPage("pages/inflate/inflate");
        //订阅模板
        wxMaSubscribeMessage.setTemplateId("模板id");
        //用户id
        wxMaSubscribeMessage.setToUser(openid);


        //设置wxMaService对象的属性
        WxMaDefaultConfigImpl wx = new WxMaDefaultConfigImpl();
        wx.setAppid("appid");
        wx.setSecret("secret");
        wx.setToken(accessToken);
        wxMaService.addConfig("appid",wx);
        //发送订阅消息
        wxMaService.getMsgService().sendSubscribeMsg(wxMaSubscribeMessage);

        return "成功";
    }


测试一下我们就可以收到具体信息


可能出现的问题

openid错误

检查openid是否获取正确


发送参数出现错误


原因

参数不符合标准

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5