java微信开发第二步 获取消息和回复消息

接着上一篇java微信开发API第一步 服务器接入进行学习,下面介绍java微信开发第二步:获取消息和回复消息,具体内容如下

* 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )进行开发演示。
* 编辑平台:myeclipse10.7+win32+jdk1.7+tomcat7.0 
* 服务器:阿里云 windows server 2008 64bits
* 平台要求:servlet使用注解方式,平台要求:j2ee6.0+、jdk6.0+、tomcat7.0+
* 演示更加注重于api解析。
* 为了便于测试说明,每个测试用例为独立,不依赖于其它方法。对于封装,不多加考虑。
* 演示尽可能按照API要求进行,目的:了解文档使用方式,达到举一反三的效果。
* 知识要求:牢固的java基础、了解http网络通信知识、对于javaweb有足够了解、json解析
* 在每篇文章结束会给出该部分演示源码。在分析完API之后,会以源码包的形式给出所有演示源码。
* 当前时间:4/3/2016 5:32:57 PM ,以该时间为准。

一、文档原文-消息管理(摘要)

文档地址:http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html
消息管理
接收消息-接收普通消息
接收消息-接收事件推送
发送消息-被动回复消息
发送消息-被动回复时的加解密
发送消息-客服消息
发送消息-群发接口
发送消息-模板消息接口
发送消息-模板消息运营规范
获取公众号自动回复配置

二、文档理解

1、接收消息

文档这样解释:​当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
理解:微信服务器将用户发送的消息通过Post流的形式返回给req。当我们想要获取用户发送的消息时,可以通过req.getInputStream()获取。当然,我们可以根据文档上关于消息的返回的xml格式,进行必要的解析。
实现:

/*
 * 该部分我们获取用户发送的信息,并且解析成<K,V>的形式进行显示
 */
// 解析用户发送过来的信息
InputStream is = req.getInputStream();// 拿取请求流
// 将解析结果存储在HashMap中
Map<String, String> map = new HashMap<String, String>();
// 解析xml,将获取到的返回结果xml进行解析成我们习惯的文字信息
SAXReader reader = new SAXReader();// 第三方jar:dom4j【百度:saxreader解析xml】
Document document = null;
try {
 document = reader.read(is);
} catch (DocumentException e1) {
 // TODO Auto-generated catch block
 e1.printStackTrace();
}
// 得到xml根元素
Element root = document.getRootElement();
// 得到根元素的所有子节点
List<Element> elementList = root.elements();

// 遍历所有子节点
for (Element e : elementList)
 map.put(e.getName(), e.getText());

// 测试输出
Set<String> keySet = map.keySet();
// 测试输出解析后用户发过来的信息
System.out.println(TAG + ":解析用户发送过来的信息开始");
for (String key : keySet) {
 System.out.println(key + ":" + map.get(key));
}
System.out.println(TAG + ":解析用户发送过来的信息结束");

2、发送消息

文档这样解释:​当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。
理解:用户发送请求,会产生一个POST请求,我们可以通过Respone进行回复消息。但是,回复的内容有严格的格式要求,只有满足格式要求,微信服务器才会进行处理返回给用户。通过查看文档“消息管理”模块,我们可以看到微信中有各种各样的消息,每类消息都有自己特定的格式要求,我们必须按照要求才可以正常的给用户返回特定的信息。我们尝试按照文档的要求格式给用户回复文本信息、图文消息。重点:按照文档要求构造需要的参数。特别注意:参数区分大小写。
1)、实现1-回复普通文本消息:

//实例1:发送普通文本消息,请查看文档关于“回复文本消息”的xml格式

// 第一步:按照回复文本信息构造需要的参数
TextMsg textMsg = new TextMsg();
textMsg.setToUserName(map.get("FromUserName"));// 发送和接收信息“User”刚好相反
textMsg.setFromUserName(map.get("ToUserName"));
textMsg.setCreateTime(new Date().getTime());// 消息创建时间 (整型)
textMsg.setMsgType("text");// 文本类型消息
textMsg.setContent("我是服务器回复给用户的信息");

// // 第二步,将构造的信息转化为微信识别的xml格式【百度:xstream bean转xml】
XStream xStream = new XStream();
xStream.alias("xml", textMsg.getClass());
String textMsg2Xml = xStream.toXML(textMsg);
System.out.println(textMsg2Xml);

// // 第三步,发送xml的格式信息给微信服务器,服务器转发给用户
PrintWriter printWriter = resp.getWriter();
printWriter.print(textMsg2Xml);

2)、实现2-回复图文消息:

//实例2,发送图文消息。请查看文档关于“回复图文消息”的xml格式

// 第一步:按照回复图文信息构造需要的参数
List<Article> articles = new ArrayList<Article>();
Article a = new Article();
a.setTitle("我是图片标题");
a.setUrl("www.baidu.com");// 该地址是点击图片跳转后
a.setPicUrl("http://b.hiphotos.baidu.com/image/pic/item/08f790529822720ea5d058ba7ccb0a46f21fab50.jpg");// 该地址是一个有效的图片地址
a.setDescription("我是图片的描述");
articles.add(a);
PicAndTextMsg picAndTextMsg = new PicAndTextMsg();
picAndTextMsg.setToUserName(map.get("FromUserName"));// 发送和接收信息“User”刚好相反
picAndTextMsg.setFromUserName(map.get("ToUserName"));
picAndTextMsg.setCreateTime(new Date().getTime());// 消息创建时间 (整型)
picAndTextMsg.setMsgType("news");// 图文类型消息
picAndTextMsg.setArticleCount(1);
picAndTextMsg.setArticles(articles);
// 第二步,将构造的信息转化为微信识别的xml格式【百度:xstream bean转xml】
XStream xStream = new XStream();
xStream.alias("xml", picAndTextMsg.getClass());
xStream.alias("item", a.getClass());
String picAndTextMsg2Xml = xStream.toXML(picAndTextMsg);
System.out.println(picAndTextMsg2Xml);
// 第三步,发送xml的格式信息给微信服务器,服务器转发给用户
PrintWriter printWriter = resp.getWriter();
printWriter.print(picAndTextMsg2Xml);

该部分所有操作源码,可以直接使用

CoreServlet.java(包括服务器接入、接收用户发送消息、回复普通文字消息、回复图文消息。需要第三方jar:dom4j、xstream)

package com.gist.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.gist.bean.Article;
import com.gist.bean.PicAndTextMsg;
import com.thoughtworks.xstream.XStream;

/**
 * @author 高远</n> 邮箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   编写时期 2016-4-3 下午4:34:05
 */
@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 String TAG = "CoreServlet";

 /*
  * 第二步:验证服务器地址的有效性 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,
  * GET请求携带四个参数:signature、timestamp、nonce、echostr
  * 开发者通过检验signature对请求进行校验(下面有校验方式)。 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,
  * 则接入生效, 成为开发者成功,否则接入失败。
  *
  * 加密/校验流程如下: 1. 将token、timestamp、nonce三个参数进行字典序排序 2.
  * 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
  */
 /*
  * 字典排序(lexicographical
  * order)是一种对于随机变量形成序列的排序方法。其方法是,按照字母顺序,或者数字小大顺序,由小到大的形成序列。
  */
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {

  // 设置编码
  req.setCharacterEncoding("utf-8");
  resp.setContentType("html/text;charset=utf-8");
  resp.setCharacterEncoding("utf-8");
  // 获取输出流
  PrintWriter printWriter = resp.getWriter();

  // 设置一个全局的token,开发者自己设置。api这样解释:Token可由开发者可以任意填写,
  // 用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)
  String token = "wgyscsf";
  // 根据api说明,获取上述四个参数
  String signature = req.getParameter("signature");
  String timestamp = req.getParameter("timestamp");
  String nonce = req.getParameter("nonce");
  String echostr = req.getParameter("echostr");
  // // temp:临时打印,观看返回参数情况
  // System.out.println(TAG + ":signature:" + signature + ",timestamp:"
  // + timestamp + ",nonce:" + nonce + ",echostr:" + echostr);
  // 根据api所说的“加密/校验流程”进行接入。共计三步

  // 第一步:将token、timestamp、nonce三个参数进行字典序排序
  String[] parms = new String[] { token, timestamp, nonce };// 将需要字典序排列的字符串放到数组中
  Arrays.sort(parms);// 按照api要求进行字典序排序
  // 第二步:将三个参数字符串拼接成一个字符串进行sha1加密
  // 拼接字符串
  String parmsString = "";// 注意,此处不能=null。
  for (int i = 0; i < parms.length; i++) {
   parmsString += parms[i];
  }
  // sha1加密
  String mParms = null;// 加密后的结果
  MessageDigest digest = null;
  try {
   digest = java.security.MessageDigest.getInstance("SHA");
  } catch (NoSuchAlgorithmException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  digest.update(parmsString.getBytes());
  byte messageDigest[] = digest.digest();
  // Create Hex String
  StringBuffer hexString = new StringBuffer();
  // 字节数组转换为 十六进制 数
  for (int i = 0; i < messageDigest.length; i++) {
   String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
   if (shaHex.length() < 2) {
    hexString.append(0);
   }
   hexString.append(shaHex);
  }
  mParms = hexString.toString();// 加密结果

  /*
   * api要求: 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容, 则接入生效, 成为开发者成功,否则接入失败。
   */
  // 第三步: 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信接入成功。
  // System.out.println(TAG + ":" + mParms + "---->" + signature);
  if (mParms.equals(signature)) {
   // System.out.println(TAG + ":" + mParms + "---->" + signature);
   printWriter.write(echostr);
  } else {
   // 接入失败,不用回写
   // System.out.println(TAG + "接入失败");
  }
 }

 /*
  * 查看api文档关于收发消息推送的消息格式基本一致。 如以下格式: <xml>
  * <ToUserName><![CDATA[toUser]]></ToUserName>
  * <FromUserName><![CDATA[fromUser]]></FromUserName>
  * <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType>
  * <Content><![CDATA[this is a test]]></Content>
  * <MsgId>1234567890123456</MsgId> </xml> 那么,我们就可以进行统一处理。
  */
 /*
  * 我们先获取输入流,看输入流里面的信息。通过测试打印输出流,我们可以看到每次用户请求,都会收到req请求,请求格式是xml格式,该信息在文档中有说明。
  */
 /*
  * 特别注意,req.getInputStream()只能获取一次,并且只能读取一次。如果想要多次读取,需要另外想办法。为了简单起见,
  * 我们只获取一次req.getInputStream(),不再打印输出流信息。直接打印解析后的信息。
  */
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  // 设置编码
  req.setCharacterEncoding("utf-8");
  resp.setContentType("html/text;charset=utf-8");
  resp.setCharacterEncoding("utf-8");

  /*
   * 该部分我们获取用户发送的信息,并且解析成<K,V>的形式进行显示
   */
  // 解析用户发送过来的信息
  InputStream is = req.getInputStream();// 拿取请求流
  // 将解析结果存储在HashMap中
  Map<String, String> map = new HashMap<String, String>();
  // 解析xml,将获取到的返回结果xml进行解析成我们习惯的文字信息
  SAXReader reader = new SAXReader();// 第三方jar:dom4j【百度:saxreader解析xml】
  Document document = null;
  try {
   document = reader.read(is);
  } catch (DocumentException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  // 得到xml根元素
  Element root = document.getRootElement();
  // 得到根元素的所有子节点
  List<Element> elementList = root.elements();

  // 遍历所有子节点
  for (Element e : elementList)
   map.put(e.getName(), e.getText());

  // 测试输出
  Set<String> keySet = map.keySet();
  // 测试输出解析后用户发过来的信息
  System.out.println(TAG + ":解析用户发送过来的信息开始");
  for (String key : keySet) {
   System.out.println(key + ":" + map.get(key));
  }
  System.out.println(TAG + ":解析用户发送过来的信息结束");

  /*
   * 该部分我们尝试按照文档的要求格式给用户回复文本信息、图文消息。重点:按照文档要求构造需要的参数。特别注意:参数区分大小写。
   */

  // //实例1:发送普通文本消息,请查看文档关于“回复文本消息”的xml格式
  //
  // // 第一步:按照回复文本信息构造需要的参数
  // TextMsg textMsg = new TextMsg();
  // textMsg.setToUserName(map.get("FromUserName"));// 发送和接收信息“User”刚好相反
  // textMsg.setFromUserName(map.get("ToUserName"));
  // textMsg.setCreateTime(new Date().getTime());// 消息创建时间 (整型)
  // textMsg.setMsgType("text");// 文本类型消息
  // textMsg.setContent("我是服务器回复给用户的信息");
  //
  // // // 第二步,将构造的信息转化为微信识别的xml格式【百度:xstream bean转xml】
  // XStream xStream = new XStream();
  // xStream.alias("xml", textMsg.getClass());
  // String textMsg2Xml = xStream.toXML(textMsg);
  // System.out.println(textMsg2Xml);
  //
  // // // 第三步,发送xml的格式信息给微信服务器,服务器转发给用户
  // PrintWriter printWriter = resp.getWriter();
  // printWriter.print(textMsg2Xml);

  // //实例2,发送图文消息。请查看文档关于“回复图文消息”的xml格式

  // 第一步:按照回复图文信息构造需要的参数
  List<Article> articles = new ArrayList<Article>();
  Article a = new Article();
  a.setTitle("我是图片标题");
  a.setUrl("www.baidu.com");// 该地址是点击图片跳转后
  a.setPicUrl("http://b.hiphotos.baidu.com/image/pic/item/08f790529822720ea5d058ba7ccb0a46f21fab50.jpg");// 该地址是一个有效的图片地址
  a.setDescription("我是图片的描述");
  articles.add(a);
  PicAndTextMsg picAndTextMsg = new PicAndTextMsg();
  picAndTextMsg.setToUserName(map.get("FromUserName"));// 发送和接收信息“User”刚好相反
  picAndTextMsg.setFromUserName(map.get("ToUserName"));
  picAndTextMsg.setCreateTime(new Date().getTime());// 消息创建时间 (整型)
  picAndTextMsg.setMsgType("news");// 图文类型消息
  picAndTextMsg.setArticleCount(1);
  picAndTextMsg.setArticles(articles);
  // 第二步,将构造的信息转化为微信识别的xml格式【百度:xstream bean转xml】
  XStream xStream = new XStream();
  xStream.alias("xml", picAndTextMsg.getClass());
  xStream.alias("item", a.getClass());
  String picAndTextMsg2Xml = xStream.toXML(picAndTextMsg);
  System.out.println(picAndTextMsg2Xml);
  // 第三步,发送xml的格式信息给微信服务器,服务器转发给用户
  PrintWriter printWriter = resp.getWriter();
  printWriter.print(picAndTextMsg2Xml);
 }
}

TestMsg.java(普通文字消息bean)

package com.gist.bean;

/**
 * @author 高远</n> 邮箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   编写时期 2016-4-4 下午2:09:27
 */
public class TextMsg {
 private String ToUserName;
 private String FromUserName;
 private long CreateTime;
 private String MsgType;

 @Override
 public String toString() {
  return "TextMsg [ToUserName=" + ToUserName + ", FromUserName="
    + FromUserName + ", CreateTime=" + CreateTime + ", MsgType="
    + MsgType + ", Content=" + Content + "]";
 }

 private String Content;

 public TextMsg(String toUserName, String fromUserName, long createTime,
   String msgType, String content) {
  super();
  ToUserName = toUserName;
  FromUserName = fromUserName;
  CreateTime = createTime;
  MsgType = msgType;
  Content = content;
 }

 public TextMsg() {
  super();
 }

 public String getToUserName() {
  return ToUserName;
 }

 public void setToUserName(String toUserName) {
  ToUserName = toUserName;
 }

 public String getFromUserName() {
  return FromUserName;
 }

 public void setFromUserName(String fromUserName) {
  FromUserName = fromUserName;
 }

 public long getCreateTime() {
  return CreateTime;
 }

 public void setCreateTime(long createTime) {
  CreateTime = createTime;
 }

 public String getMsgType() {
  return MsgType;
 }

 public void setMsgType(String msgType) {
  MsgType = msgType;
 }

 public String getContent() {
  return Content;
 }

 public void setContent(String content) {
  Content = content;
 }
}

Article.java(图文消息内部Article bean)

package com.gist.bean;

/**
 * @author 高远</n> 邮箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   编写时期 2016-4-4 下午2:47:08
 */
public class Article {
 private String Title;

 @Override
 public String toString() {
  return "item [Title=" + Title + ", Description=" + Description
    + ", PicUrl=" + PicUrl + ", Url=" + Url + "]";
 }

 public String getTitle() {
  return Title;
 }

 public void setTitle(String title) {
  Title = title;
 }

 public String getDescription() {
  return Description;
 }

 public void setDescription(String description) {
  Description = description;
 }

 public String getPicUrl() {
  return PicUrl;
 }

 public void setPicUrl(String picUrl) {
  PicUrl = picUrl;
 }

 public String getUrl() {
  return Url;
 }

 public void setUrl(String url) {
  Url = url;
 }

 private String Description;
 private String PicUrl;
 private String Url;

}

PicAndTextMsg.java(图文消息 bean)

package com.gist.bean;

import java.util.List;

/**
 * @author 高远</n> 邮箱:wgyscsf@163.com</n> 博客 http://blog.csdn.net/wgyscsf</n>
 *   编写时期 2016-4-4 下午2:47:08
 */
public class PicAndTextMsg {
 private String ToUserName;
 private String FromUserName;
 private long CreateTime;
 private String MsgType;
 private int ArticleCount;
 private List<Article> Articles;

 @Override
 public String toString() {
  return "PicAndTextMsg [ToUserName=" + ToUserName + ", FromUserName="
    + FromUserName + ", CreateTime=" + CreateTime + ", MsgType="
    + MsgType + ", ArticleCount=" + ArticleCount + ", Articles="
    + Articles + "]";
 }

 public String getToUserName() {
  return ToUserName;
 }

 public void setToUserName(String toUserName) {
  ToUserName = toUserName;
 }

 public String getFromUserName() {
  return FromUserName;
 }

 public void setFromUserName(String fromUserName) {
  FromUserName = fromUserName;
 }

 public long getCreateTime() {
  return CreateTime;
 }

 public void setCreateTime(long createTime) {
  CreateTime = createTime;
 }

 public String getMsgType() {
  return MsgType;
 }

 public void setMsgType(String msgType) {
  MsgType = msgType;
 }

 public int getArticleCount() {
  return ArticleCount;
 }

 public void setArticleCount(int articleCount) {
  ArticleCount = articleCount;
 }

 public List<Article> getArticles() {
  return Articles;
 }

 public void setArticles(List<Article> articles) {
  Articles = articles;
 }

}

更多精彩内容请点击《Android微信开发教程汇总》,《java微信开发教程汇总》欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家学习开java微信API有所帮助,也希望大家继续关注新内容的更新,不要错过哦!

(0)

相关推荐

  • java微信扫描公众号二维码实现登陆功能

    本文实例为大家分享了java微信扫描公众号二维码实现登陆的具体代码,供大家参考,具体内容如下 前提条件: 1.微信公众平台为服务号, 2.服务号实现了账号绑定功能,即将open_id 与业务系统中的用户名有对应关系 具体实现原理: 1.用户访问业务系统登陆页时,调用二维码接口,获得二维码的ticketid,同时将sessionid,ticketid和二维码的seceneid保存 2.返回登陆页时,根据ticketid获得微信二维码 3.页面通过ajax发送请求,判断是否已经扫描成功. 4.公众平

  • Java编程调用微信接口实现图文信息推送功能

    本文实例讲述了Java编程调用微信接口实现图文信息等推送功能.分享给大家供大家参考,具体如下: Java调用微信接口工具类,包含素材上传.获取素材列表.上传图文消息内的图片获取URL.图文信息推送. 微信图文信息推送因注意html代码字符串中将双引号(")替换成单引号('),不然信息页面中包含图片将无法显示且图片后面的内容也不会显示 官方文档:http://mp.weixin.qq.com/wiki/home/ StringBuilder sb=new StringBuilder(); sb.a

  • Java编程调用微信支付功能的方法详解

    本文实例讲述了Java编程调用微信支付功能的方法.分享给大家供大家参考,具体如下: 微信开发文档地址:https://mp.weixin.qq.com/wiki/home/ 从调用处开始 我的流程: 1.点击"支付"按钮,去后台 --> 2.后台生成支付所需数据返回页面 --> 3.页面点击"确认支付"调用微信支付js.完成支付功能. 支付按钮 <div class="button" id="pay" onc

  • 微信java开发之实现微信主动推送消息

    1.拉取access_token2.拉取用户信息3.主动推送消息4.接口貌似要申请权限5.依赖httpclient4.2.3 和jackson 2.2.1 复制代码 代码如下: public class WeixinAPIHelper { /**  * 获取token接口  */ private String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=

  • JAVA实现 springMVC方式的微信接入、实现消息自动回复实例

    前段时间小忙了一阵,微信公众号的开发,从零开始看文档,踩了不少坑,也算是熬过来了,最近考虑做一些总结,方便以后再开发的时候回顾,也给正在做相关项目的同学做个参考. 1.思路 微信接入:用户消息和开发者需要的事件推送都会通过微信方服务器发起一个请求,转发到你在公众平台配置的服务器url地址,微信方将带上signature,timestamp,nonce,echostr四个参数,我们自己服务器通过拼接公众平台配置的token,以及传上来的timestamp,nonce进行SHA1加密后匹配signa

  • Java微信公众号开发之通过微信公众号获取用户信息

    最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了. 1.首先需要到微信网站去设置一下,我是直接用的微信测试号. 接口配置信息必须要填写的,所以说必须能将自己的服务发布出去 到此微信配置完毕,接下来就是直接上代码了 2.获取用户信息的方式一共是两种,前提都是用户关注微信公众号,一种是静默获取(snsapi_base,这种方式只能获取openid),另一种是授权获取(snsapi_userinfo,可以获取用户的详细信息

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

    上篇文章介绍了开启回调模式,开始回调模式后我们就要实现聊天功能了.平时使用微信聊天可以发送文本消息.语音.图片.视频等,这里只实现了其中的一些功能和大家分享. 一.与微信企业号建立连接 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JS

  • Java编程调用微信分享功能示例

    本文实例讲述了Java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的页面内首先使用AJAX.下面我具体举例. 首先是在页面内写入请求后台的AJAX /** * 调用微信分享接口 * */ public void WXConfig(){ String url = getPara("href"); WXConfigController scan = new W

  • Java开发微信公众号接收和被动回复普通消息

    上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本消息 2.图片消息 3.语音消息 4.视频消息 5.小视频消息 6.地理位置消息 7.链接消息(被动回复的消息) 被动回复的普通消息包括: 1.回复文本消息 2.回复图片消息 3.回复语音消息 4.回复视频消息 5.回复音乐消息 6.回复图文消息 其实接收消息和被动回复消息这两个动作是不分家的,这本

  • java 实现微信服务器下载图片到自己服务器

     java 实现微信服务器下载图片到自己服务器 此功能的实现需要注意java 中IO流的操作及网路开发, 实现代码: /** * @author why * */ public class PicDownload { /** * * 根据文件id下载文件 * * * * @param mediaId * * 媒体id * * @throws Exception */ public static InputStream getInputStream(String accessToken, Stri

  • 微信支付java版本之JSAPI支付+发送模板消息

    本文为大家分享了java版本之JSAPI支付+发送模板消息的相关资料,供大家参考,具体内容如下 1.工具类 工具类见:微信支付JAVA版本之Native付款 2.公众账号设置 3.代码实现 openId:openId为用户与该公众账号之间代表用户的唯一标示  以下类中涉及到生成token,关闭订单接口调用,获取配置文件信息,和工具类,在其他文章中有具体代码实现 package com.zhrd.bussinss.platform.controller.rest; import java.io.F

随机推荐