微信主动发送消息功能(微信主动发送消息功能在哪里)
功能展示
主动通知用户的方式
我们看一下具体实现功能
我们需要准备东西
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是否获取正确
发送参数出现错误
原因
参数不符合标准
相关文章
- 图文并茂,带你梳理一下 OAuth2.0 概念和授权流程
- 理解OIDC协议和认证机制(ociq协议)
- Spring Boot OAuth 2.0整合详解(springbootspringsecurity oauth)
- 授权码 + PKCE 模式|OIDC & OAuth2.0 认证协议最佳实践系列【03】
- 微服务下统一认证解决方案 Spring Cloud OAuth2 + JWT
- 无惧面试官,带你全面了解OAuth2.0
- 干货:分享一个自己开发的oauth2单点登录项目
- 掏出手机,扫一扫,即刻登录——SpringBoot实现二维码扫码登录
- Oauth2.0详解及安全使用(oauth2.0原理)
- 5分钟彻底搞懂"OAuth2.0"协议