**

企业微信第三方应用开发–回调配置

**
前言:经过一段时间的研究,终于把相关配置成功实现。在这个过程中遇到各种坑,也查阅了不少的博客都未能解决问题,最后研究官方的java事例demo加已实现。下面会将流程和踩过的坑周一阐述,感谢浏览。

1.下载官方样例demo

1.1入口

1.2选择连接下载

1.3解压后的demo结构

会发现,我们无法直接验证;要对其进行改造

2对demo进行改造

2.1新建一个spring-boot项目,并将刚刚下载的demo移植过来,项目结构如下:
当然,根据个人需要对原有的官方demo方法有一定的改造,这个就不详细说了。主要是针对WXBizMsgCrypt,去对比下就发现了。

2.2项目启动端口8080,你需要通过Nginx代理下,回调地址需要域名的形式

2.3Sample类demo


```java
package com.example.demo.controller;import com.example.demo.controller.aes.MessageUtil;
import com.example.demo.controller.aes.QywechatCallback;
import com.example.demo.controller.aes.QywechatUserBean;
import com.example.demo.controller.aes.WXBizMsgCrypt;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.io.IOUtils;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Map;@Slf4j
@Controller
@RequestMapping("/api/qywechat")
public class Sample {/*** get 请求  验签.** @param msgSignature 加密* @param timestamp    时间戳* @param nonce        随机* @param echostr      .* @param response     .* @throws Exception .*/@GetMapping(value = "/callback")public void reveiceMsg(@RequestParam(name = "msg_signature") final String msgSignature,@RequestParam(name = "timestamp") final String timestamp,@RequestParam(name = "nonce") final String nonce,@RequestParam(name = "echostr") final String echostr,final HttpServletResponse response) throws Exception {//企业回调的url-----该url不做任何的业务逻辑,仅仅微信查看是否可以调通.QywechatCallback qywechatCallback = QywechatCallback.TEST;log.info(" msg_signature {}, timestamp {}, nonce {} , echostr {}", msgSignature, timestamp, nonce, echostr);WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(qywechatCallback, qywechatCallback.getCorpid());// 随机字符串String sEchoStr = wxcpt.VerifyURL(msgSignature, timestamp, nonce, echostr);PrintWriter out = response.getWriter();try {//必须要返回解密之后的明文if (StringUtils.isBlank(sEchoStr)) {log.info("URL验证失败");} else {log.info("验证成功!");}} catch (Exception e) {e.printStackTrace();}out.write(sEchoStr);out.flush();}/*** post 请求  验签.** @param request* @throws Exception .*/@RequestMapping(value = "/callback", method = RequestMethod.POST)public void reveiceMsg(HttpServletRequest request, HttpServletResponse response) throws Exception {QywechatCallback qywechatCallback = QywechatCallback.TEST;String sMsgSignature = request.getParameter("msg_signature");String sTimestamp = request.getParameter("timestamp");String sNonce = request.getParameter("nonce");InputStream inputStream = request.getInputStream();String sPostData = IOUtils.toString(inputStream, "UTF-8");PrintWriter out = response.getWriter();try {QywechatUserBean qywechatUserBean = new QywechatUserBean();qywechatUserBean.setMsgSignature(sMsgSignature);qywechatUserBean.setNonce(sNonce);qywechatUserBean.setQywechatCallback(qywechatCallback);qywechatUserBean.setTimestamp(sTimestamp);qywechatUserBean.setSPostData(sPostData);//下面这些操作都可以异步  如果处理请求比较慢,企业微信会重复推送 这里需要去重保证执行唯一WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(qywechatUserBean.getQywechatCallback(), qywechatCallback.getSuiteid());//解密String sMsg = wxcpt.DecryptMsg(qywechatUserBean);//将post数据转换为mapMap<String, String> dataMap = MessageUtil.parseXml(sMsg);//处理逻辑log.info("===========>dataMap: " + dataMap);out.write("success");} catch (Exception e) {e.printStackTrace();out.write("fail");}out.flush();}}

2.4将官方jar包作为本地jar包使用的原因
不应用情况下:
1)报错现象

Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value. Expected the discarded bits to be zero. 异常

通过查阅博客会发现将:

aesKey = Base64.decodeBase64(encodingAesKey + "=");

改为:

aesKey = Base64.decodeBase64(UUID.randomUUID().toString().replaceAll("-","").getBytes());

可解决该错误
修改位置:

2)报错现象
在1)的情况下

Java heap space

查阅相关博客,说堆栈太小,通过一些列操作你发现修改无效。那是idea修改堆栈大小在帮助里


改了一通,重启idea,堆栈内存修改成功。但没用,心里一阵mmp啊。还是老老实实研究demo吧。

2.5研究发现,虽然都是import org.apache.commons.codec.binary.Base64;,但不是同一个包。那就吧官方的包作为本地包使用吧。

注意:如果项目只有一个模块,到这里就解决问题了。但若是多个模块,你得把包添加到对应的模块中,才引用的到。
具体方法:点击模块,F4打开模块设置,添加


终于完事了。
看看有那写回调配置可以使用:




感谢浏览

企业微信第三方应用开发--回调配置相关推荐

  1. 企业微信第三方应用开发授权设置(PHP版)

    开发之前一定要搞明白,企业微信不是企业微信号,虽然有相似之处,但不尽相同!!! 企业微信第三方应用与企业微信自建应用也不相同,一定要区分! !! 本地测试完成,没问题了,直接提交上线,就OK啦!!! ...

  2. 企业微信---第三方应用开发 笔记

    跳坑记录 要成为第三方供应商,先按开发文档步骤操作.服务商注册应用.也可以申请个企业微信帐号,然后成为服务商(可以做测试,但应用不能上线) 1,注册成功后,配置开发信息:通用开发参数 这里的CorpI ...

  3. 微信第三方平台开发错误码集合,各种 code

    微信第三方平台开发错误码集合 PHP static $codes = array("-1" => "系统繁忙","0" => & ...

  4. 微信第三方平台开发流程和总结

    微信第三方平台开发流程和总结 创建第三方平台 1).在微信开放平台-管理中心-第三方平台中创建第三方平台账号.创建第三方平台 2).选择"平台型服务商类型"创建第三方平台.填写第三 ...

  5. Java企业微信会话存档开发(从跳坑到爬坑)

    Java企业微信会话存档开发(从跳坑到爬坑) 本文仅作为方便首次开发企业微信使用 文章目录 Java企业微信会话存档开发(从跳坑到爬坑) 前言 一.开发准备 1.企业微信后台配置 2.sdk下载 3. ...

  6. 企业微信小程序开发(行事历)

    企业微信小程序开发(行事历) 背景:最近公司外出办公的同事很多,公司需要一个小程序来记录员工的出行记录,借此来统计出行成效 主要平台 PC端,安卓端 设计思想 1.普通员工,在小程序端可以发起一次出行 ...

  7. 微信第三方平台开发接入

    微信第三方平台开发接入 授权流程接入步骤如下:( 微信https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=res ...

  8. python项目开发计划_开源项目 | 企业微信第三方Python SDK项目启动计划

    各位知友大家好!我是量潮科技创始人 @iGuo ,这篇文章和大家分享我们公司目前的一些技术进展和一些开源项目的规划. 在技术方面,我们目前还处在搭建平台的早期阶段:在架构完善以后,我会专门写一篇文章介 ...

  9. 【前端企微开发流程】-企业微信-创建应用-开发-调试-发布

    创建应用 概述 在企业微信中,企业应用分为基础应用.第三方应用及自建应用 基础应用:企业微信本身自带的应用 第三方应用:由第三方服务商提供的办公应用套件,管理员可根据企业办公需要选择安装 自建应用:根 ...

最新文章

  1. MySQL基础篇:数据类型
  2. 让IIS建立的站点默认是.net 2.0的,而不是.net 1.1的代码
  3. 360 自动打开word_Word文档高手的组合键用法,你知道几个?
  4. 在Java 9中使用sun.misc.Unsafe
  5. apicloud,aliyunlive,测试成功
  6. non-rigid shape registration using similarity-invariant differential coordinates
  7. 功能丰富的 Perl: 一行程序
  8. 吴彦祖计算机系统班 百度网盘,哪位吴彦祖(来自伸手党的夸赞) 有老詹的那场g6的百度云盘录像啊?我很需要...
  9. modscan36--my milestone
  10. idea导出文件支持目录结构
  11. 电子名片+在线商城=?现在居然可以用名片卖货了
  12. 高一计算机教学,高一信息技术教学计划参考
  13. 产品开发流程的几个主要阶段
  14. HW-RTOS 概述
  15. 【157天】尚学堂高琪Java300集视频精华笔记(126)
  16. 安卓和ios的ui设计区别_UI设计中IOS和安卓的设计差异
  17. python模拟app发送请求失败_如何使用Tensorflow解决Python Chatbot App的运行会话失败问题...
  18. IDM(Internet Download Manager)—下载各类安装包(github代码、python包)、软件、视频、文档的神器,居家必备良药...
  19. 媲美微信的二维码识别库
  20. 截取某个字符串之前的字符

热门文章

  1. 如何获取自己的公网地址
  2. css3 打车软件等车动画,简单一个渐变放大消失水波加载动画
  3. 计算机组成原理多级先行进位,计算机组成原理—最系统的算机基础知识.ppt
  4. Markdown学习之(2)-绘制表格和流程图
  5. 【JS】js判断等号、等同(===、==)
  6. CSS3之position:sticky使用
  7. 网络协议之TCP和UDP
  8. 【C/C++学习】之STL详解
  9. RFID正为零售防损带来新变化
  10. vertica MySQL_vertica 数据库常用命令