全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java微信公众平台开发(8) 多媒体消息回复

之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复【普通消息类型消息】,这里将讲述多媒体消息的回复方法,【多媒体消息】包含回复图片消息/回复语音消息/回复视频消息/回复音乐消息,这里以图片消息的回复为例进行讲解!

还记得之前将消息分类的标准就是一种是不需要上传多媒体资源到腾讯服务器的而另外一种是需要的,所以在这里我们所需要做的第一步就是上传资源到腾讯服务器,这里我们调用【素材管理】接口(后面将会有专门的章节讲述)进行图片的上传,同样的这个接口可以提供我们对语音、视频、音乐等消息的管理,这里以图片为例(文档地址:http://mp.weixin.qq.com/wiki/10/10ea5a44870f53d79449290dfd43d006.html  )。在文档中我们可以发现这里上传的方式是模拟表单的方式上传,然后返回给我们我们需要在回复消息中需要用到的参数:media_id!

(一)素材接口图片上传

按照之前我们的约定将接口请求的url写入到配置文件interface_url.properties中:

#获取token的url
tokenUrl=https://api.weixin.qq.com/cgi-bin/token
#永久多媒体文件上传url
mediaUrl=http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=

然后我在这里写了一个模拟表单上传的工具类HttpPostUploadUtil.java,如下:

package com.cuiyongzhi.wechat.util;
 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.Iterator; 
import java.util.Map; 
 
import javax.activation.MimetypesFileTypeMap;
import com.cuiyongzhi.web.util.GlobalConstants;
 
/**
 * ClassName: HttpPostUploadUtil
 * @Description: 多媒体上传
 * @author dapengniao
 * @date 2016年3月14日 上午11:56:55
 */
public class HttpPostUploadUtil { 
   
  public String urlStr; 
   
  public HttpPostUploadUtil(){
    urlStr = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token="+GlobalConstants.getInterfaceUrl("access_token")+"&type=image"; 
  }
    
    
  
  /** 
   * 上传图片 
   * 
   * @param urlStr 
   * @param textMap 
   * @param fileMap 
   * @return 
   */ 
  @SuppressWarnings("rawtypes")
  public String formUpload(Map<String, String> textMap, 
      Map<String, String> fileMap) { 
    String res = ""; 
    HttpURLConnection conn = null; 
    String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符 
    try { 
      URL url = new URL(urlStr); 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setConnectTimeout(5000); 
      conn.setReadTimeout(30000); 
      conn.setDoOutput(true); 
      conn.setDoInput(true); 
      conn.setUseCaches(false); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn 
          .setRequestProperty("User-Agent", 
              "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"); 
      conn.setRequestProperty("Content-Type", 
          "multipart/form-data; boundary=" + BOUNDARY); 
  
      OutputStream out = new DataOutputStream(conn.getOutputStream()); 
      // text 
      if (textMap != null) { 
        StringBuffer strBuf = new StringBuffer(); 
        Iterator<?> iter = textMap.entrySet().iterator(); 
        while (iter.hasNext()) { 
          Map.Entry entry = (Map.Entry) iter.next(); 
          String inputName = (String) entry.getKey(); 
          String inputValue = (String) entry.getValue(); 
          if (inputValue == null) { 
            continue; 
          } 
          strBuf.append("\r\n").append("--").append(BOUNDARY).append( 
              "\r\n"); 
          strBuf.append("Content-Disposition: form-data; name=\"" 
              + inputName + "\"\r\n\r\n"); 
          strBuf.append(inputValue); 
        } 
        out.write(strBuf.toString().getBytes()); 
      } 
  
      // file 
      if (fileMap != null) { 
        Iterator<?> iter = fileMap.entrySet().iterator(); 
        while (iter.hasNext()) { 
          Map.Entry entry = (Map.Entry) iter.next(); 
          String inputName = (String) entry.getKey(); 
          String inputValue = (String) entry.getValue(); 
          if (inputValue == null) { 
            continue; 
          } 
          File file = new File(inputValue); 
          String filename = file.getName(); 
          String contentType = new MimetypesFileTypeMap() 
              .getContentType(file); 
          if (filename.endsWith(".jpg")) { 
            contentType = "image/jpg"; 
          } 
          if (contentType == null || contentType.equals("")) { 
            contentType = "application/octet-stream"; 
          } 
  
          StringBuffer strBuf = new StringBuffer(); 
          strBuf.append("\r\n").append("--").append(BOUNDARY).append( 
              "\r\n"); 
          strBuf.append("Content-Disposition: form-data; name=\"" 
              + inputName + "\"; filename=\"" + filename 
              + "\"\r\n"); 
          strBuf.append("Content-Type:" + contentType + "\r\n\r\n"); 
  
          out.write(strBuf.toString().getBytes()); 
  
          DataInputStream in = new DataInputStream( 
              new FileInputStream(file)); 
          int bytes = 0; 
          byte[] bufferOut = new byte[1024]; 
          while ((bytes = in.read(bufferOut)) != -1) { 
            out.write(bufferOut, 0, bytes); 
          } 
          in.close(); 
        } 
      } 
  
      byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(); 
      out.write(endData); 
      out.flush(); 
      out.close(); 
  
      // 读取返回数据 
      StringBuffer strBuf = new StringBuffer(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader( 
          conn.getInputStream())); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
        strBuf.append(line).append("\n"); 
      } 
      res = strBuf.toString(); 
      reader.close(); 
      reader = null; 
    } catch (Exception e) { 
      System.out.println("发送POST请求出错。" + urlStr); 
      e.printStackTrace(); 
    } finally { 
      if (conn != null) { 
        conn.disconnect(); 
        conn = null; 
      } 
    } 
    return res; 
  } 
  
}

我们将工具类写好之后就需要在我们消息回复中加入对应的响应代码,这里为了测试我将响应代码加在【关注事件】中!

(二)图片回复

这里我们需要修改的是我们的【事件消息业务分发器】的代码,这里我们将我们的回复加在【关注事件】中,简单代码如下:

String openid = map.get("FromUserName"); // 用户openid
String mpid = map.get("ToUserName"); // 公众号原始ID
ImageMessage imgmsg = new ImageMessage();
imgmsg.setToUserName(openid);
imgmsg.setFromUserName(mpid);
imgmsg.setCreateTime(new Date().getTime());
imgmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_Image);
if (map.get("Event").equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { // 关注事件
  System.out.println("==============这是关注事件!");
  Image img = new Image();
  HttpPostUploadUtil util=new HttpPostUploadUtil();
  String filepath="H:\\1.jpg"; 
  Map<String, String> textMap = new HashMap<String, String>(); 
  textMap.put("name", "testname"); 
  Map<String, String> fileMap = new HashMap<String, String>(); 
  fileMap.put("userfile", filepath); 
  String mediaidrs = util.formUpload(textMap, fileMap);
  System.out.println(mediaidrs);
  String mediaid=JSONObject.fromObject(mediaidrs).getString("media_id");
  img.setMediaId(mediaid);
  imgmsg.setImage(img);
  return MessageUtil.imageMessageToXml(imgmsg);
}


到这里代码基本就已经完成整个的图片消息回复的内容,同样的不论是语音回复、视频回复等流程都是一样的,所以其他的就不在做过多的讲述了,最后的大致效果如下:

正常的消息回复的内容我们就讲述的差不多了,下一篇我们讲述基于消息回复的一些应用【关键字回复及超链接回复】的实现,感谢你的翻阅,如有疑问可以留言讨论!

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


# java微信多媒体消息回复  # java微信图片回复  # java微信素材接口图片上传  # Java微信公众平台开发(15) 微信JSSDK的使用  # Java微信公众平台开发(14) 微信web开发者工具使用  # Java微信公众平台开发(12) 微信用户信息的获取  # Java微信公众平台开发(10) 微信自定义菜单的创建实现  # Java微信公众平台开发(9) 关键字回复以及客服接口实现  # Java微信公众平台开发(7) 公众平台测试帐号的申请  # Java微信公众平台开发(5) 文本及图文消息回复的实现  # Java微信公众平台之素材管理  # Java微信公众平台之获取地理位置  # Java微信公众平台之群发接口(高级群发)  # 上传  # 腾讯  # 为例  # 表单  # 加在  # 的是  # 这是  # 文档  # 在这里  # 也有  # 会有  # 不需要  # 如有  # 其他的  # 给我们  # 所需  # 我们可以  # 要做  # 写了  # 我将 


相关文章: 学校为何禁止电信移动建设网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何通过PHP快速构建高效问答网站功能?  如何用好域名打造高点击率的自主建站?  如何用西部建站助手快速创建专业网站?  如何通过.red域名打造高辨识度品牌网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  建站之星免费模板:自助建站系统与智能响应式一键生成  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  北京制作网站的公司,北京铁路集团官方网站?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  创业网站制作流程,创业网站可靠吗?  网站制作需要会哪些技术,建立一个网站要花费多少?  建站主机选哪种环境更利于SEO优化?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站之星安装路径如何正确选择及配置?  建站之星如何通过成品分离优化网站效率?  如何用AWS免费套餐快速搭建高效网站?  如何基于云服务器快速搭建个人网站?  简历在线制作网站免费版,如何创建个人简历?  如何零基础开发自助建站系统?完整教程解析  红河网站制作公司,红河事业单位身份证如何上传?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  Swift中swift中的switch 语句  高端网站建设与定制开发一站式解决方案 中企动力  ,怎么用自己头像做动态表情包?  制作企业网站建设方案,怎样建设一个公司网站?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  高防服务器:AI智能防御DDoS攻击与数据安全保障  魔毅自助建站系统:模板定制与SEO优化一键生成指南  ,柠檬视频怎样兑换vip?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在阿里云购买域名并搭建网站?  如何快速生成高效建站系统源代码?  建站DNS解析失败?如何正确配置域名服务器?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何用虚拟主机快速搭建网站?详细步骤解析  网站制作公司排行榜,抖音怎样做个人官方网站  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何打造高效商业网站?建站目的决定转化率  招商网站制作流程,网站招商广告语?  存储型VPS适合搭建中小型网站吗?  黑客入侵网站服务器的常见手法有哪些?  ,南京靠谱的征婚网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  建站之星如何取消后台验证码生成?  家具网站制作软件,家具厂怎么跑业务? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。