赞
踩
首先
首先,本人第一次接触公众号,对公众号后台不熟悉,有几个注意点:
1.公众号的服务找半天,一般在公众号后台,点击新的功能,就能看到已开通和未开通的,首先,需要确保微信认证,并且开通公众号,不然她不会显示订阅通知这些服务,一般是在这(我的已经开通了):
2. 然后我们需要根据订阅通知文档操作,开通,选用模版等
根据文档,我们查看订阅通知的详情 > 公共模版 > 选择模版 > 选择关键字并提交
这几个步骤有几个注意的点
(1)在选用公共模版之前,我们需要通过设置服务类目查看我们的服务类目是否通过并状态不是已失效,如果失效,我们可以通过公众号管理员身份进行添加,以下是服务类目的链接能查看分类及其资质要求:
(2)在选择公共模板的时候需选择我们服务类目未失效且已通过的,比如我这里,我的软件服务提供商就已经失效了,而信息查询是新添加的状态为已通过。
3.我们根据订阅通知的接口来写代码:
(1)
- <dependency>
- <groupId>com.github.binarywang</groupId>
- <artifactId>weixin-java-mp</artifactId>
- <version>3.2.0</version>
- </dependency>
-
- public static void main(String[] args) {
- // 配置公众号信息
- WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
- wxStorage.setAppId("appId");
- wxStorage.setSecret("secret");
- wxStorage.setTemplateId("一次性授权模板ID");
- // 服务
- WxMpService wxMpService = new WxMpServiceImpl();
- wxMpService.setWxMpConfigStorage(wxStorage);
- WxMpSubscribeMsgService subscribeMsgService = new WxMpSubscribeMsgServiceImpl(wxMpService);
- // 切记这里跳转路径和reserved微信这个类已经帮我们UrlEecode过了不需要二次,本人就在这栽过跟头
- String res = subscribeMsgService.subscribeMsgAuthorizationUrl("跳转的路径", scene, "reserved");
- System.out.println(res);
- }
开发者id
一次性订阅消息的id是这个
还有域名的话也是需要根据文档上的要求设置业务域名
这里我们会得到一个链接,
让用户在手机微信端打开如下链接信息,替换下方内容即可。
https://mp.weixin.qq.com/mp/subscribemsg?action=get_confirm&appid=公众号的APPID&scene=1000&template_id=订阅通知的模板ID&redirect_url=重定向的地址&reserved=test#wechat_redirect
我们可以引导客户在微信打开,在微信打开后是这样的:
(2)我们可以通过我们传的域名这个跳转拿到我们想要的数据
用户授权完成,即可调接口发送订阅通知一次。
http请求方式: post
https://api.weixin.qq.com/cgi-bin/message/template/subscribe?access_token=ACCESS_TOKEN
- // 请求的API地址
- String url = "https://api.weixin.qq.com/cgi-bin/message/template/subscribe";
- // API token
- String accessToken = "accessToken 微信也有接口可以拿到";
-
- // 准备内容数据 --消息主体内容
- Map<String, Object> data = Maps.newHashMap();
- data.put("content", Maps.immutableEntry("value", "test\123\123"));
-
- // 准备请求数据
- Map<String, Object> req = Maps.newHashMap();
- req.put("touser", "发送用户的open_id"); //必须
- req.put("template_id", "第一步里授权模板ID"); //必须
- req.put("title", "我是标题"); //必须
- req.put("scene", "1000"); //必须 不传的话 也会出现43101 user refuse to accept the msg
- req.put("miniprogram", Maps.immutableEntry("appid", "自己的小程序APPID")); //非必须
- req.put("data", data); //必须
-
- // 发送请求
- String sendRes = HttpUtil
- .createPost(url + "?access_token=" + accessToken)
- .body(JSONObject.toJSONString(req)).execute().body();
- System.out.println(sendRes);
-
- // 正常返回结果{ "errcode":0, "errmsg":"ok" }
以下是我拿access_token的代码,详情见官网文档:开始开发 / 获取 Access token (qq.com)
- String accessTokenRequestUrl = WxUrlConstant.ACCESS_TOKEN_URL + "?grant_type=client_credential&appid="+ "你的 APP_ID "+"&secret=" + "你的 APP_SECRET";
-
- String tokenResponse = HttpUtil.get(accessTokenRequestUrl);
-
- JSONObject jsonObj = JSONObject.parseObject(tokenResponse);
- if (Objects.nonNull(jsonObj.get("access_token"))){
- String access_token = jsonObj.get("access_token").toString();
- }
-
- System.out.println("tokenResponse = " + tokenResponse);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。