一、验证票据

1.1 官方说明:

验证票据(component_verify_ticket):在第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL” 每隔 10 分钟以 POST 的方式推送 component_verify_ticket

接收 POST 请求后,只需直接返回字符串 success。为了加强安全性,postdata 中的 xml 将使用服务申请时的加解密 key 来进行加密,具体请见《加密解密技术方案》, 在收到推送后需进行解密(详细请见《消息加解密接入指引》)

作用:获取令牌时,需要使用票据值作为参数(component_verify_ticket)。

1.2 获取流程及示意代码

微信服务器会向其 ”授权事件接收URL” 每隔 10 分钟以 POST 的方式推送( component_verify_ticket)

授权事件接收URL:“在开放平台管理中心”中寻找,如下图。填写完整的URL请求路径。

(比如请求路径填写为:http://登录授权的发起页域名/项目名/api/wx/open/getComponentVerifyTicket)

获取票据(componentVerifyTicket),示意代码:

SpringMVC形式的Controller层:/*** 接收微信服务器发送的component_verify_ticket*/@PostMapping("/getComponentVerifyTicket")public String getComponentVerifyTicket(HttpServletRequest request, HttpServletResponse response) throws Exception {log.info("接收微信服务器发送的component_verify_ticket  begin");try {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");// 微信加密签名String msg_signature = request.getParameter("msg_signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 从请求中读取整个post数据InputStream inputStream;String postData = null;inputStream = request.getInputStream();postData=IOUtils.toString(inputStream, "UTF-8");    //获取接收到消息里的XML密文,存放在postData中log.info("postData:"+postData);WXBizMsgCrypt wxcpt = null;log.info("postData:"+postData);log.info("msg_signature:"+msg_signature);log.info("timestamp:"+timestamp);log.info("nonce:"+nonce);log.info("getServetoken:"+ComponentConfig.TOKEN);        //tokenlog.info("getServeencodingaeskey:"+ComponentConfig.AESKEY);       //aeskeylog.info("getServeappid:"+ComponentConfig.APPID);         //appidlog.info("ip:"+ NetworkUtil.getIpAddress(request));//从XML中获取<Encrypt></Encrypt>标签内的密文文本String encrypt = XMLUtil2.getLabelFromXml(postData,"Encrypt");log.info("Encrypt:"+encrypt);//格式化密文文本,否则没有<ToUserName>标签,会解密失败,参考官方的加解密代码JAVA版本String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%1$s]]></Encrypt></xml>";String fromXML = String.format(format, encrypt);String msg = "";   //解密后的明文if(StringUtil.isEmpty(encrypt)) {msg = fromXML;} else {wxcpt = new WXBizMsgCrypt(ComponentConfig.TOKEN,ComponentConfig.AESKEY,ComponentConfig.APPID);// 解密消息msg = wxcpt.decryptMsg(msg_signature, timestamp, nonce, fromXML);}log.info("msg:"+msg);//将XML格式字符串转为Map类型Map<String, String> msgMap = XMLUtil.xmlToMap(msg);String infotype = msgMap.get("InfoType");  //获取infotype,注:微信开放平台文档中标明固定为:"component_verify_ticket",但参考其他代码,还包含authorized???log.info(infotype);switch (infotype){case "component_verify_ticket":   //验证票据String ComponentVerifyTicket = msgMap.get("ComponentVerifyTicket");  webChatCatchUtil.setWeixinOpenComponentVerifyTicket(ComponentVerifyTicket);   //将票据值写入Redis缓存中log.info("component_verify_ticket:"+ComponentVerifyTicket);break;case "unauthorized"://用户取消授权break;}} catch (Exception e) {log.error("Exception",e);}return "success";}

使用wxcpt.decryptMsg获取到的解密后的result示例:

<xml>
<AppId>some_appid</AppId>
<CreateTime>1413192605</CreateTime>
<InfoType>component_verify_ticket</InfoType>
<ComponentVerifyTicket>some_verify_ticket</ComponentVerifyTicket>
</xml>

注意:

component_verify_ticket 的有效时间较 component_access_token 更长,建议保存最近可用的component_verify_ticket,在 component_access_token 过期之前可以直接使用该 component_verify_ticket 进行更新,避免出现因为 component_verify_ticket 接收失败而无法更新 component_access_token 的情况。

微信开放平台_第三方平台授权流程_验证票据相关推荐

  1. 微信开放平台之第三方平台代公众号发起网页授权

    正式讲解之前我想问一个问题: 微信开放平台第三方平台为什么会出现?或者说微信的开发人员为什么弄出个开放平台的第三方平台出来? 我的理解是:原本公众号开发时只能给一家公司开发,因为配置的网页授权域名只有 ...

  2. 微信开放平台【第三方平台】java开发总结:预授权码(pre_auth_code)(三)

    微信第三方平台预授权码(pre_auth_code)开发说明(全网最详细的微信第三方平台预授权码开发说明) 预授权码 预授权码(pre_auth_code)是第三方平台方实现授权托管的必备信息,每个预 ...

  3. 微信公众号通过第三方平台完成授权

    微信公众号通过第三方平台完成授权前,第三方平台与公众号绑定关系. 为什么要使用第三方平台来完成授权,公众号本身授权也可以,但是微信平台会认为你具有开发能力,免费提供给你的自定义菜单以及其他功能将不能再 ...

  4. 微信开放平台之第三方平台开发,模板小程序如何提交?

    大家好,我是悟空码字 12月25日,天气晴朗,阳光普照,今天是圣诞节.因为疫情影响,小羊人的增多,街上放眼望去,人烟稀少.楼下除了几个十一二岁的小男孩在玩耍,也没有像往日老人悠闲打牌.小孩嬉戏那般热闹 ...

  5. 微信开放平台【第三方平台】java开发总结:验证票据(component_verify_ticket)(-)

    微信第三方平台验证票据(component_verify_ticket)开发说明(全网最详细的微信第三方平台验证票据开发说明) 概述 微信公众平台-第三方平台(简称第三方平台)开放给所有通过开发者资质 ...

  6. java微信公众平台接口封装源码_微信公众号对接第三方平台(全网发布 java)源码 含 jar...

    [实例简介] 微信公众号对接第三方平台(全网发布 java)源码+jar 里面有完成全网发布的源码直接tomcat部署运行和所需的jar 具体对接流程,关注我们的博客 http://blog.csdn ...

  7. 微信公众号接入第三方平台

    第一步 授权事件接收URL http://www.falago.cn/weiweb/wei/wei_inceptmsg 在第三方的授权事件填写自己服务器的url,微信服务器会向其"授权事件接 ...

  8. 微信小程序 申请第三方平台流程

    为什么80%的码农都做不了架构师?>>>    准备 一.https://open.weixin.qq.com 注册开放平台账号 二.申请开发着资质 三.创建第三方平台 1.输入基本 ...

  9. 微信开放平台之第三方平台开发,从哪里入手?

    大家好,我是悟空码字 疫情之下,最近有不少兄弟没有挺进决赛,半途成了小羊人,可谓是出师未捷身先死.话说回来,不管怎么样,尽量保护好自己,能越晚变羊越好. 开始说正事,不管是自己在创业或学习也好,还是公 ...

最新文章

  1. 笔记本上的小键盘计算机怎样用,笔记本小键盘怎么开,详细教您笔记本小键盘怎么开启...
  2. 【Tiny4412】设置Uboot提示符和关闭MMU
  3. TCP 协议如何解决粘包、半包问题
  4. 三重积分平均值_2015考研数学考前必须死磕的知识点
  5. c++中内敛函数_C/C++求职者必备 23 道面试题,一道试题一份信心
  6. 进程和线程的定义、区别与联系
  7. Dymola — 多学科系统仿真平台
  8. C#--反汇编工具ildasm.exe
  9. gimp图片编辑器_GIMP图像编辑器改变我生活的10种方式
  10. 【MVO MTSP】基于matlab灰狼算法求解多旅行商问题(同始终点)【含Matlab源码 1564期】
  11. 微信公众号获取管理素材列表的大坑-{errcode:40004,errmsg:invalid media type hint:}
  12. 关于core_cm3.c和core_cm3.h,Core_cmFunc.h 和 Core_cmInstr.h的理解
  13. 「建议观看」史上超长,前端css晦涩难懂的点都在这啦
  14. CF 868 div2 A—C
  15. css实现图片自动渐变切换、element-plus 的修改el-table的(边框线为虚线、表头样式)
  16. MPP大规模并行处理架构详解(满满干货,需细嚼慢咽)
  17. java后台icon font 图标替换
  18. 前端如何保存图片?并在相册中查看。
  19. 大数据产品研究 - Presto简介
  20. linux-ubuntu常用命令(深圳文鹏)

热门文章

  1. Renoncer tantôt détail guerre blanc.Unde necessitatibus blanditiis.
  2. mysql deadlock found_MySQLTransactionRollbackException: Deadlock found when trying to get lock
  3. Pygame | 7 - 键盘输入
  4. 国民技术N32L40X之IAP升级IAP程序
  5. DIV+CSS浏览器兼容问题
  6. Linux 下安装Docker且配置镜像加速器
  7. python网络游戏服务器
  8. wordpress头像被墙_如何在WordPress中更改用户头像的形状
  9. 部署在IIS上的程序,可以找到文件夹,能看到文件却报404
  10. 【业务安全-01】业务安全概述及其测试流程