java微信企业号开发之发送消息(文本、图片、语音)_java

上篇文章介绍了开启回调模式,开始回调模式后我们就要实现聊天功能了。平时使用微信聊天可以发送文本消息、语音、图片、视频等,这里只实现了其中的一些功能和大家分享。 

一、与微信企业号建立连接
1、企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源、或给成员发送消息等,以下称主动调用模式。
2、企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式。
3、用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式。
这是微信企业号的开发文档中写的,但是我们一般使用前两种方式。 
其实主动调用和回调都是相对的,这是站在微信服务器的角度,微信服务器通过企业号给微信客户端发送消息是主动调用,微信客户端主动发送消息去调用微信服务器相对服务器来说就是被动调用(回调)。

二、主被动调用微信服务器处理的数据格式

1.主调:服务器向微信客户端发送json格式的数据,数据不需要加密 

2.回调:微信客户端发送的消息需要AES加密,服务器接受的消息是xml格式

这两条用一张图表示如下:

三、聊天原理图

首先微信客户端发送消息到服务器处理,数据以xml格式传输到第三方服务器后,第三方服务器再将数据转为json格式,传送给微信服务器,发送给客户端。 

四、代码实现
有了上面的原理基础,下面是代码部分

1.servlet

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 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"); 

    InputStream inputStream = request.getInputStream();
    String postData = IOUtils.toString(inputStream, "UTF-8");
    System.out.println(postData); 

    String msg = "";
    WXBizMsgCrypt wxcpt = null;
    try {
      wxcpt = new WXBizMsgCrypt(sToken , sEncodingAESKey , sCorpID );
      msg = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, postData);
    } catch (AesException e) {
      e.printStackTrace();
    }
    System.out.println("msg=" + msg); 

    //获取接口访问凭证
    String accessToken = CommonUtil.getToken("wxe510946434680dab", "eWTaho766INvp4e1MCsz1mHYuT2DAleb62REQ3vsFizhY4vtmwZpKweuxUVh33G0").getAccessToken();
    try {
 @SuppressWarnings("unused")
 boolean flag = ChatService1.sendMessage(accessToken,msg);
 } catch (Exception e) {
 e.printStackTrace();
 }
}

 2.service

public class ChatService1 {

 public static boolean sendMessage(String accessToken,String msg) throws Exception{
 boolean flag = false;
 Map<String, String> requestMap = MessageUtil.parseXml(msg);
 // 发送者
 String fromUserName = requestMap.get("FromUserName");
 // 消息类型
 String msgType = requestMap.get("MsgType");

 if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){//如果是文本客服消息
  String Content = requestMap.get("Content");//文本消息的消息内容
  //组装文本客服消息,参数1:用户id;参数2:发送的内容
  jsonMsg = AdvancedUtil.makeTextCustomMessage("lishehe|zhisheng|zhangwenyuan|lixinjiang", Content);
 }else if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){//发送的是图片
  String mediaId = requestMap.get("MediaId");
  jsonMsg = AdvancedUtil.makeImageCustomMessage("lishehe|zhisheng|zhangwenyuan|lixinjiang", mediaId);
 }else if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){
  String mediaId = requestMap.get("MediaId");
  jsonMsg= AdvancedUtil.makeVoiceCustomMessage("lishehe|zhisheng|zhangwenyuan|lixinjiang", mediaId);
 }
 flag = AdvancedUtil.sendCustomMessage(accessToken, jsonMsg);
 return flag;
 }
}

3.工具类

public class AdvancedUtil {
 private static Logger log = LoggerFactory.getLogger(AdvancedUtil.class);

 /**
 * 组装发送文本消息
 * @return
 */
 public static String makeTextCustomMessage(String openId, String content) {
 content = content.replace("\"", "\\\"");
 String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"text\",\"agentid\":\"%s\",\"text\":{\"content\":\"%s\"}}";
 return String.format(jsonMsg, openId, 14,content);
 }

 /**
 * 组装发送图片消息
 *
 * @return
 */
 public static String makeImageCustomMessage(String openId, String mediaId) {
 String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"image\",\"agentid\":\"%s\",\"image\":{\"media_id\":\"%s\"}}";
 return String.format(jsonMsg, openId,14, mediaId);
 }

 /**
 * 组装发送语音消息
 *
 * @return
 */
 public static String makeVoiceCustomMessage(String openId, String mediaId) {
 String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"voice\",\"agentid\":\"%s\",\"voice\":{\"media_id\":\"%s\"}}";
 return String.format(jsonMsg, openId,14, mediaId);
 }

四、总结

这样就实现了消息的接收和推送,第三方服务器将接受的xml数据先解密解析,从中获取消息类型,然后将要发送的消息封装后转为json格式,并传送给微信服务器在发送到客户端。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 微信
发送消息
微信企业号发送消息、企业号发送消息限制、企业号发送消息、企业号发送图文消息、企业号发送消息 php,以便于您获取更多的相关知识。

时间: 2024-10-03 02:28:14

java微信企业号开发之发送消息(文本、图片、语音)_java的相关文章

java微信企业号开发之开发模式的开启_java

首先说微信企业号的开发模式分为:编辑模式(普通模式)和开发模式(回调模式) ,在编辑模式下,只能做简单的自定义菜单和自动回复消息,要想实现其他功能还得开启开发者模式. 一.编辑模式和开发模式对消息的处理流程  1.编辑模式下,所有的业务流程都配置在微信服务器上,由它处理   2.开发模式,消息通过第三方服务器处理,最后经过微信服务器把消息发送给用户   开发模式能处理的消息比编辑模式多,所以要先开启开发模式才能开发更多功能. 二.开发模式的开启      在回调模式下,企业不仅可以主动调用企业号

java微信企业号开发之通讯录_java

上篇文章中介绍了聊天功能,这里介绍通讯录是如何实现的.首先要加载公司的所有部门,树形结构,然后点击进入部门的人员列表,点击人员能查看详细信息.  一.界面 公司部门的树形结构: 部门成员列表:  个人详细信息:  二.代码实现1.controller  /** * 加载部门列表 */ @RequestMapping("/addressListDepartmentjsp.do") public void addressListDepartment(HttpServletRequest r

net-使用微信客服接口发送消息部分用户接收不到是什么原因

问题描述 使用微信客服接口发送消息部分用户接收不到是什么原因 使用微信客服接口发送消息部分用户接收不到是什么原因(在一定的时间段内出现部分用户接收不到信息,现象就是刚上线那会晚上转播还很多人都能收到,变成偶尔一两个人收不到,再变成大面积收不到,最后基本都收不到) 解决方案 微信服务号和订阅号发送客服信息,需要在你发送消息之前48小时内,客户发送了一个消息给公众号,可以是关注事件消息等.企业号好像没有限制,说是企业号发送消息没有限制. 解决方案二: 返回码是什么?自己对应微信开发者文档,找错误 解

微信企业号开发 回调模式

问题描述 微信企业号开发 回调模式 微信企业开发 回调模式 加密的随机字符串(echostr)为空,求解决办法??????然而其它参数有值???不知道是哪里的原因-求解 解决方案 php 微信企业号回调模式开发微信企业号开发:启用回调模式微信企业号开发之开启回调模式 解决方案二: 检查下加密代码正确,请求路径正确否?

微信企业号开发之微信考勤百度地图定位_javascript技巧

之前在微信企业号开发:微信考勤中使用了百度地图的定位组件,但发现在部分手机上会出现定位失败的提示,于是有研究了一下百度地图.原来使用的Web组件百度不打算更新了,也是重新查了一下百度地图的其他API,还有一个JavaScript API大众版,于是试了试,没想到竟然解决了. 核心代码很简单: <div id="allmap"></div> <script type="text/javascript" src="http://a

集成代码生成器 java 微信 自定义菜单 java微信接口开发 公众平台 SSM redis shiro 多数据源

获取[下载地址]  QQ: 313596790A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势D 集成安全权限框架shiro  Shir

微信公众开发:使用消息接口

之前写了一篇搭建sae的python平台,通过微信公众平台验证的博文.现在就是要承上启下,开始开发的第一步.也许你会说开发的第一步就是写代码.那我会对你表示鄙视,尽管南苑随笔是个很简单的应用,但是多少也还需要设计一下.确定一下需求,为了将来能够吸引到粉丝来关注我的公众号,我必须要定位好我的app,然后提供优秀的内容,并确定它的运营模式,才能进一步地提升我们的应用水准. 需求分析 首先,这个app是要用python写的,那么就一定要优雅一点,pythonic一点.对于我自己来说,我要使得这个app

微信公众号开发系列-微信企业号开发相关参数

微信企业号出来之后,本人也抱着前面开发订阅号和服务号的经验来探究了一番,这里整理了下再开发企业号时候碰到的一些接口参数.企业号开发文档详见http://qydev.weixin.qq.com/wiki/index.php?title=首页 1.创建自定义菜单参数解释: 菜单管理的创建操作,官方定义如下所示. 请求说明 Https请求方式: POST https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN&

java发送内嵌图片邮件_java

整体效果: 发送端:网易邮箱:接收端:qq邮箱. 1.web前端 2.在网易邮箱"已发送"中可以看见通过java代码发送的邮件 3.同样在qq邮箱中也可以看到这样的效果 实现过程: 1.web前端(bootstrap布局) <form action="mailAction!sendMail" method="post" name="mailForm" id="mailFormId"> <u