Java微信公众平台开发(12) 微信用户信息的获取

 更新时间:2017年04月26日 11:11:13   作者:dapengniao  
这篇文章主要为大家详细介绍了Java微信公众平台开发第十二步,微信用户信息的获取,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前面的文章有讲到微信的一系列开发文章,包括token获取、菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关联,所以在这里我们就采用openid去获取用户微信信息,并实现一个简单场景应用:当微信新用户关注我们的微信公众平台的时候我们自动回复一篇图文消息,然后在图文消息中标题为:【尊敬的:XXX,你好!】,而且在图文消息中的图片就是用户的微信头像,如下图:

有关获取微信用户信息的文档我们可以参照:http://mp.weixin.qq.com/wiki/1/8a5ce6257f1d3b2afb20f83e72b72ce9.html

(一)用户微信消息的获取实现

在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。

http请求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

在这里我写了一个方法类GetUseInfo.java,在方法中我们只需要传入openid即可返回(昵称,图像、性别【其他参数可自行获取】),代码实现如下:

package com.cuiyongzhi.wechat.common;
 
import java.util.HashMap;
import com.cuiyongzhi.web.util.GlobalConstants;
import com.cuiyongzhi.wechat.util.HttpUtils;
 
import net.sf.json.JSONObject;
 
/**
 * ClassName: GetUseInfo
 * @Description: 获取微信用户信息
 * @author dapengniao
 * @date 2016年3月18日 下午2:00:52
 */
public class GetUseInfo {
 /**
 * @Description: 通过openid获取用户微信信息
 * @param @param openid
 * @param @return
 * @param @throws Exception 
 * @author dapengniao
 * @date 2016年3月18日 下午2:01:30
 */
 public static HashMap<String, String> Openid_userinfo(String openid)
  throws Exception {
 HashMap<String, String> params = new HashMap<String, String>();
 params.put("access_token",
  GlobalConstants.getInterfaceUrl("access_token")); //定时器中获取到的token
 params.put("openid", openid); //需要获取的用户的openid
 params.put("lang", "zh_CN");
 String subscribers = HttpUtils.sendGet(
  GlobalConstants.getInterfaceUrl("OpenidUserinfoUrl"), params);
 System.out.println(subscribers);
 params.clear();
 //这里返回参数只取了昵称、头像、和性别
 params.put("nickname",
  JSONObject.fromObject(subscribers).getString("nickname")); //昵称
 params.put("headimgurl",
  JSONObject.fromObject(subscribers).getString("headimgurl")); //图像
 params.put("sex", JSONObject.fromObject(subscribers).getString("sex")); //性别
 return params;
 }
 
}

(二)关注回复图文消息实现

在第一部分中有说道【在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID】,在我们的场景中获取关注者openid的事件就是用户的关注事件,同时我们也是在关注事件中给关注者被动回复图文消息(图文消息的回复实现可参照:Java微信公众平台开发(5) 文本及图文消息回复的实现 ),其实现过程:

通过关注事件获取到openid,调用获取用户信息接口获取关注者相关接口;
在关注事件被动回复中设置图文消息的title以及图片,回复给关注者;
简单代码实现如下:

//对图文消息
 NewsMessage newmsg=new NewsMessage();
 newmsg.setToUserName(openid);
 newmsg.setFromUserName(mpid);
 newmsg.setCreateTime(new Date().getTime());
 newmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
 if (map.get("Event").equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { // 关注事件
 System.out.println("==============这是关注事件!");
 try {
  HashMap<String, String> userinfo=GetUseInfo.Openid_userinfo(openid);
  Article article=new Article();
  article.setDescription("欢迎来到崔用志的个人博客:菜鸟程序员成长之路!"); //图文消息的描述
  article.setPicUrl(userinfo.get("headimgurl")); //图文消息图片地址
  article.setTitle("尊敬的:"+userinfo.get("nickname")+",你好!"); //图文消息标题
  article.setUrl("http://www.cuiyongzhi.com"); //图文url链接
  List<Article> list=new ArrayList<Article>();
  list.add(article); //这里发送的是单图文,如果需要发送多图文则在这里list中加入多个Article即可!
  newmsg.setArticleCount(list.size());
  newmsg.setArticles(list);
  return MessageUtil.newsMessageToXml(newmsg);
 } catch (Exception e) {
  // TODO Auto-generated catch block
  System.out.println("====代码有问题额☺!");
  logger.error(e,e);
 }
 
 }

最终我们可以来看看我们的成果,这里为了看到效果很直观我先取消关注然后再次关注的,如下图:

到这里通过openid过去关注者信息的实现就基本结束了,下一篇将讲述【微信web中JSSDK的开发配置】,感谢你的翻阅,如有疑问可以留言讨论!

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

相关文章

  • 基于binarywang封装的微信工具包生成二维码

    基于binarywang封装的微信工具包生成二维码

    这篇文章主要介绍了基于binarywang封装的微信工具包生成二维码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java面向对象之继承性的实例代码详解

    Java面向对象之继承性的实例代码详解

    这篇文章主要介绍了Java面向对象之继承性,文中代码简单易懂,可以更好的帮助大家学习,有兴趣的小伙伴快来了解下
    2020-05-05
  • Java方法签名的获取实例代码

    Java方法签名的获取实例代码

    这篇文章主要介绍了Java方法签名的获取实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 微服务eureka和nacos案例详解

    微服务eureka和nacos案例详解

    这篇文章主要介绍了微服务eureka和nacos,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Java基础之FileInputStream和FileOutputStream流详解

    Java基础之FileInputStream和FileOutputStream流详解

    这篇文章主要介绍了Java基础之FileInputStream和FileOutputStream流详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • SpringBoot中使用Quartz设置定时任务的实例详解

    SpringBoot中使用Quartz设置定时任务的实例详解

    Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于 Java 实现,本文小编给大家介绍了SpringBoot中如何使用Quartz设置定时任务,文中通过代码示例给大家讲解的非常详细,需要的朋友可以参考下
    2023-12-12
  • java并发之synchronized

    java并发之synchronized

    这篇文章主要介绍了java并发关键字synchronized,包括内容synchronized的使用、synchronized背后的Monitor、synchronized保证可见性和防重排序、使用synchronized注意嵌套锁定,具体内容请看下面文章吧
    2021-10-10
  • Java 实现限流器处理Rest接口请求详解流程

    Java 实现限流器处理Rest接口请求详解流程

    在工作中是否会碰到这样的场景,高并发的请求但是无法全部执行,需要一定的限流。如果你是使用的微服务框架,比如SpringCloud,可以使用Gateway增加限流策略来解决。本篇文章是在没有框架的情况实现限流器
    2021-11-11
  • SpringBoot 2.x整合Log4j2日志的详细步骤

    SpringBoot 2.x整合Log4j2日志的详细步骤

    log4j2优越的性能其原因在于log4j2使用了LMAX,一个无锁的线程间通信库代替了,logback和log4j之前的队列,并发性能大大提升,下面这篇文章主要给大家介绍了关于SpringBoot 2.x整合Log4j2日志的相关资料,需要的朋友可以参考下
    2022-10-10
  • Java AtomicInteger类的使用方法详解

    Java AtomicInteger类的使用方法详解

    这篇文章主要介绍了Java AtomicInteger类的使用方法详解,文中有具体实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10

最新评论