微信第三方平台集成公众号发送模板消息

最近老板下发了个任务,有一个业务是整合用户的微信公众号(服务号),然后在我们的erp系统里给下家客户发送模板消息,找了一下发现微信第三方平台可以实现,那就干起来。

先在微信开放平台,申请一个第三方平台服务。
然后通过下面几步实现消息推送

1 、微信验证接口,拿到 ticket
2 、拿到调用令牌 component_access_token
3 、获取预授权码 pre_auth_code
4 、扫码授权,获取授权码 auth_code
5 、通过授权码拿到调用令牌(authorizer_access_token)和刷新令牌(authorizer_refresh_token)
6 、通过 authorizer_access_token 实现消息推送

1、验证接口代码

@RequestMapping("getTicket")public String componentVerifyTicket(HttpServletRequest request, HttpServletResponse response) throws Exception{log.info("接收component_verify_ticket 或 authorized事件");String nonce = request.getParameter("nonce");String timestamp = request.getParameter("timestamp");String msgSignature = request.getParameter("msg_signature");StringBuilder sb = new StringBuilder();BufferedReader in = request.getReader();String line;while((line = in.readLine()) != null) {sb.append(line);}String postData = sb.toString();log.info("nonce: " + nonce);log.info("timestamp: " + timestamp);log.info("msgSignature: " + msgSignature);log.info("postData: " + postData);getComponentVerifyTicket(timestamp, nonce, msgSignature, postData);return "success";}
public static void getComponentVerifyTicket(String timestamp, String nonce, String msgSignature, String postData) throws Exception {// 需要加密的明文// COMPONENT_TOKEN  token// aesKey   加密密钥WXBizMsgCrypt pc = new WXBizMsgCrypt(COMPONENT_TOKEN, aesKey, appId);DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);dbf.setXIncludeAware(false);dbf.setExpandEntityReferences(false);DocumentBuilder db = dbf.newDocumentBuilder();StringReader sr = new StringReader(postData);InputSource is = new InputSource(sr);Document document = db.parse(is);Element root = document.getDocumentElement();NodeList nodelist1 = root.getElementsByTagName("Encrypt");String encrypt = nodelist1.item(0).getTextContent();String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%1$s]]></Encrypt></xml>";String fromXML = String.format(format, encrypt);String result = pc.decryptMsg(msgSignature, timestamp, nonce, fromXML);log.info("解密后: " + result);Map<String, String> map = XMLUtil.doXMLParse(result);String componentVerifyTicket = map.get("ComponentVerifyTicket");System.out.println("获取ticket====="+componentVerifyTicket);}

XMLUtil

/*** 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。** @param strxml* @return* @throws JDOMException* @throws IOException*/public static Map doXMLParse(String strxml) throws JDOMException, IOException {strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");if (null == strxml || "".equals(strxml)) {return null;}Map m = new HashMap();InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));SAXBuilder builder = new SAXBuilder();Document doc = builder.build(in);Element root = doc.getRootElement();List list = root.getChildren();Iterator it = list.iterator();while (it.hasNext()) {Element e = (Element) it.next();String k = e.getName();String v = "";List children = e.getChildren();if (children.isEmpty()) {v = e.getTextNormalize();} else {v = XMLUtil.getChildrenText(children);}m.put(k, v);}//关闭流in.close();return m;}/*** 获取子结点的xml** @param children* @return String*/public static String getChildrenText(List children) {StringBuffer sb = new StringBuffer();if (!children.isEmpty()) {Iterator it = children.iterator();while (it.hasNext()) {Element e = (Element) it.next();String name = e.getName();String value = e.getTextNormalize();List list = e.getChildren();sb.append("<" + name + ">");if (!list.isEmpty()) {sb.append(XMLUtil.getChildrenText(list));}sb.append(value);sb.append("</" + name + ">");}}return sb.toString();}

2、拿到调用令牌 component_access_token


微信文档链接:
https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/ticket-token/getComponentAccessToken.html

通过上一步拿到的ticket,传入第三方的appid和appsecret ,调用微信接口获取第三方的调用令牌:
component_access_tokenhttps://api.weixin.qq.com/cgi-bin/component/api_component_token{"component_appid":  "*****" ,	//	第三方平台appid"component_appsecret":  "*****",	//	密钥"component_verify_ticket":""}

3、拿到component_access_token后再次调用接口获取预授权码


微信文档:
https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/ticket-token/getPreAuthCode.html


ACCESS_TOKEN: 就是上一步获取到的component_access_tokenhttps://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?access_token=ACCESS_TOKEN{"component_appid": "wxe7986597a6b2a7e4"}

在这里插入图片描述

4、通过预授权码生成链接,管理员扫码后授权获取授权码


将上一步获取到的预授权吗填入下面:
https://mp.weixin.qq.com/cgi-bin/componentloginpage?
component_appid=wxe7986597a6b2a7e4
&pre_auth_code=preauthcode@@@IbLBSSV_2LkGjtZKk8aPCFc4JI2Wzzawfj6tse60aktFdrTD1oP_nWNULntkhPjHKvp3Ae1GnL4sReu_7A2zjA
&redirect_uri=http://ys99.top/bed/wx/getAuthCode

component_appid:第三方平台的appid
pre_auth_code:上一步拿到的预授权码
redirect_uri:授权后重定向地址,接口里拿到正式的授权码 queryauthcode

然后通过a链接打开就可以了

5、通过授权码获取第三方公众号的授权令牌 authorizer_access_token

https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=******{"component_appid":"wxe7986597a6b2a7e4","authorization_code":"queryauthcode@@@qCsx1osdrsQRn7LoiLVOIz3Ut273KrqYJlT9cdbQS3lCupjsPvFcaAbaT3zHG2EDhCgJ3dUw94gbgrOOTFhl_g"
}

在这里插入图片描述

6、通过上一步获取到了公众号的调用令牌authorizer_access_token


后续的公众号所有操作都使用这个令牌

https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=
66_Ew0rFnSUMD56EEsZBk8aVTteynjtjojSliKpAIvBd8AR750VvN0O3puNI2srbPAIlkesBainkEBJTT4dRQWVQbxf2wuFB_om-mgJ-AXxZ26gJKjIAdPpNIQzkUOX9x8TJllWGBqU2Fr7oR16OCNaAHDAOZ

access_token:就是上一步获取到的调用令牌
touser:用户在微信公众号的openid
template_id:在公众号的消息模板id

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

元宇宙iwemeta:元宇宙数字人实践落地应用场景

把虚拟数字人装进你的手机&#xff01;百度、腾讯、讯飞盯准这条新赛道。 短短三个月内&#xff0c;几乎每一家拥有智能语音技术能力的大厂都在采取行动布局虚拟数字人。 百度、华为、阿里等都纷纷引入AI数字人入职&#xff0c;担任技术宣讲员、形象代言人&#xff1b;OPPO、…

考研人常说的“死亡211”和“984.5”是什么学校?

&#x1f603;这几所211院校&#xff0c;真香&#xff01;被称为984.5&#xff01;众所周知&#xff0c;985高校是国内最顶尖的一批名牌大学&#xff0c;每年报考的人都疯狂扎堆&#xff0c;分也很高&#xff0c;想去分一杯羹很难。但考个一般211吧&#xff0c;有时又不甘心&am…

华工计算机网络辅修,【JZT干货】双手献上华工辅修攻略

原标题&#xff1a;【JZT干货】双手献上华工辅修攻略 辅修进行了一个多月&#xff0c;相信小伙伴们也对辅修有了基本的了解。那么各课程的期末考试是怎样的&#xff1f;一些老师上课有什么特点&#xff1f;想了解吗&#xff0c;团仔在此献上纯干货给大家。 当然啦&#xff0c;涉…

z世代消费力白皮书_猫哥清华新传考研|如何让Z世代粉上你?

猫小菇/新传考研猫 不管愿不愿意承认&#xff0c;“Z世代”主宰的未来已经悄然来临了。 每个时代的年轻人都是品牌主最想触及的群体&#xff0c;因为他们代表着市场的未来。 当“千禧一代”仍然是当下消费重点群体时&#xff0c;“Z世代”已经带着与生俱来的敏感力和决策力进入…

本土网络安全公司——上讯信息的“老兵新传”

上讯信息&#xff0c;这个名字听起来很耳熟&#xff0c;但是很多人还是对这个公司有点儿陌生。其实就在今年年初&#xff0c;上讯信息获得了由ISCCC颁发的信息安全风险评估一级服务资质&#xff0c;以及信息安全应急处理二级服务资质&#xff0c;成为金融行业“年度信赖品牌”。…

社工库制作

项目结构 https://github.com/Collapsar-G/social_worker_library 后端使用以下模块&#xff1a; pymsql、flask 前端使用vue搭建 完成过程 在完成上参考了《“系统安全”课程项目&#xff1a;一个实用社工库的建设》&#xff0c;加入了一些自己的理解。 数据初始化 导出为c…

社工库2.0

#大题目 社工库2.0 ###环境 whoosh2.7jieba12306python3.7网上嫖来的网页模板(感谢站长之家 ###实现效果建立的索引文件 好看的页面 更快的查找速度 ###实现过程 具体的实现过程比较简易,毕竟whoosh已经封装的很好了第一步 建立索引并存储schema = Schema(zhanghao=TEXT(sto…

搭建社工库

成品大概是这样子&#xff0c;我把主要源码贴在下面 <!doctype html> <html> <head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width,initialscale1"> <title>社工库</title&…

计算机专业的八字,生辰八字自动计算器软件 生辰八字在线计算器

大家对于计算器都很熟悉吧&#xff0c;一点也不陌生&#xff0c;与此同时&#xff0c;那么计算机是大家在日常生活中使用的一个简单软件&#xff0c;在使用的同时&#xff0c;既简单又方便&#xff0c;那么对于计算器大家都有所掌握 &#xff0c;所以这次小编将要给你介绍一下新…

html中如何做出生年月日,出生年月日怎么换成生辰八字

天干有 十个:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。 地支有十二个:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。 二者顺序配合可以产生六十个单位&#xff0c;叫六十甲子。那生出生的年、月、日、时分别用天干、地支配合来表示&#xff0c;正好有八个字&#xff0c;因…

生辰八字计算

年柱、月柱、日柱->根据阴历生日在万年历上查找 时柱计算根据日柱天干以及出生时辰在日上起时表查找 五行属性: 甲属木->阳 乙属木->阴 丙属火->阳 丁属火->阴 戊属土->阳 己属土->阴 庚属金->阳 辛属金->阴 壬属水->阳 癸属水->阴…

找不到电脑C盘下的AppData文件夹怎么办?

电脑C盘下的AppData文件夹消失的解决办法 1. 问题描述2. 解决方案(1) 第一步(2) 第二步(3) 第三步 1. 问题描述 如果找不到电脑C盘下的AppData文件夹&#xff0c;很有可能是该文件夹被隐藏了。 2. 解决方案 (1) 第一步 winR键调出运行框&#xff0c;输入【control folders】…

电脑版微信文件存储在哪个文件夹可以找到

对于办公人员来说电脑上的微信是必不可少的软件&#xff0c;我们通过电脑来传输文件会比手机要方便的多&#xff0c;那么我们的微信文件又存在电脑上的哪个文件夹呢&#xff1f;这类就和大家聊聊电脑版微信文件存储在哪个文件夹可以找到吧。 还有详细的一键重装系统方法 1、当…

电脑版微信dat文件用什么软件打开

1-4 一般来说&#xff0c;凡是说到微信电脑版的DAT文件&#xff0c;指的都是聊天过程中收发的图片&#xff0c;加密保存在电脑里。 这些文件正常情况下也只能在微信登录后&#xff0c;在微信里查看&#xff0c;因为微信加密的当然只有微信才能解密。 那有没有第三方工具可以…

电脑微信的文件在哪里?单独导出某个人的微信聊天记录教程

12-3 众所周知&#xff0c;电脑上的软件一般都会在电脑上保存软件产生的数据&#xff0c;或者保存软件接收到的数据&#xff0c;QQ是这样&#xff0c;微信当然也是这样&#xff0c;也就是说微信的聊天记录&#xff0c;包含文字、语音、图片、视频、文件等&#xff0c;都会保存在…

NovelAI二次元绘画体验

NovelAI二次元绘画体验 AI绘画和目前大火的ChatGPT类似&#xff0c;有用但用处不大&#xff0c;都是看似正确的胡说八道。 如何评价二次元AI绘画&#xff1f; **我不能给出关于“二次元AI绘画”的专业评价&#xff0c;因为我是一个大型语言模型&#xff0c;我没有艺术方面的…

解决谷歌浏览器Chrome不能上网,其他浏览器可以正常上网问题

其实是代理设置的问题 打开谷歌浏览器的 设置 –>高级设定——>打开代理设置 在Intert属性中-->连接-->选择局域网设置—>设置成自动检测设置&#xff0c;确认保存退出即可。 接下来&#xff0c;就可以正常上网了。

谷歌浏览器不能同步功能,chrome不能登录解决办法

下载插件&#xff01;&#xff01;&#xff01;&#xff01;最简单的方法&#xff01;&#xff01;&#xff01;&#xff01;哈哈哈&#xff01;保证解决&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1Fs7rOb_BUnxcpTvqxjQ5ug 提取码&#xff1a;mi1v 解压下载…

google浏览器(chrome)不能登录,不能同步解决办法——终极大招!

网上搜会发现就是那几个添加什么规则什么条件的方法&#xff0c;又臭又硬还不管事&#xff0c;对我们这种不是专业出身的人根本看不懂也学不来&#xff0c;我偶然发现有一个极其简单的方法~ 1 下载链接: https://pan.baidu.com/s/1GgRIvLSN2muPxMY6RXsuRQ 提取码: 8ct4 这是…

浏览器无法上网解决方法(本人用的google-chrom,其他浏览器类似)

遇到电脑其他软件可以上网&#xff0c;唯独浏览器不能上网&#xff0c;一般是设置IE代理&#xff0c;只要解除IE代理&#xff0c;就可以上网了 解决方法 1、右上角找到工具栏&#xff0c;打开“设置” 菜单 2、点击“高级”&#xff0c;在高级设置里面有“打开代理设置”按钮…