如何获取用户的OpenID,对于微信开发模式下的开发来说,那就是一个非常简单的小功能了。简单介绍一下我是怎样去获取OpenID的。

  微信服务器与公众账号服务器交互的信息可以分为3类:请求消息、事件和响应消息。

    (1)请求消息指用户发送给公众账号的信息包含: 文本消息、图片消息、语音消息、视频消息、小视频消息、 地理位置消息、链接消息

    (2)事件指用户对公众账号的做出的某种操作时,会使得微信服务器通过事件推送的形式通知到公众账号服务器,从而开发者可以获取到该信息。包含:关注/取消关注事件、扫描带参数二维码事件、 上报地理位置事件、 自定义菜单事件、 点击菜单拉取消息时的事件推送、 点击菜单跳转链接时的事件推送

  消息触发时无论请求消息还是事件,公众账号服务器都会获得一个XML格式的数据包。

  例如:关注/取消关注事件

  <xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
  </xml>

  参数说明:

 参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 消息类型,event
Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅) 

  FromUserName指用户的openID,对于当前公众号来说是唯一的。我们就可以通过用户openID,在公众账号服务器上创建我们自己的用户数据或者获取用户在我们自己数据库中的数据,进行处理。

  我们当时做就是通过用户关注时,利用openID在自己的数据库中自动创建一个用户。这里我没有提到获取用户的基本信息如用户昵称、头像等。

下面是一些Java代码片段:

    Map<String ,String > requestMap = MessageUtil.parseXml(request);

String fromUserName = requestMap.get("FromUserName");

String toUserName = requestMap.get("ToUserName");

String msgType = requestMap.get("MsgType");

if(msgType.equals(Constant.REQ_MESSAGE_TYPE_EVENT)){//判断消息类型是否是事件消息类型

String eventType = requestMap.get("Event");//获取具体的事件类型

if(eventType.equals(Constant.EVENT_TYPE_SUBSCRIBE)){ //判断事件是否是关注事件

/*  利用openID在自己的数据库中自动创建一个用户   */

}

}

以上就是通过用户关注时,利用openID在自己的数据库中自动创建一个用户,给大家提供一个思路吧,共同进步。

附:

/**

* 解析微信发来的请求

* @param request

* @return

* @throws Exception

*/

@SuppressWarnings("unchecked")

public static Map<String , String> parseXml(HttpServletRequest request) throws Exception{

Map<String,String> map = new HashMap<String , String >();

InputStream inputStream = request.getInputStream();

SAXReader reader = new SAXReader();

Document document = reader.read(inputStream);

Element root = document.getRootElement();

List<Element> elementList = root.elements();

for (Element element : elementList) {

map.put(element.getName(),element.getText());

}

inputStream.close();

inputStream = null;

return map;

}

微信公众平台如何获取用户的OpenID(一)的更多相关文章

  1. 微信公众平台网页获取用户OpenID方法

    下面我们一起来看看关于微信公众平台网页获取用户OpenID方法,有需要了解的朋友可以一起来看看吧.用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接 ...

  2. 微信公众平台实现获取用户OpenID的方法

    这篇文章主要介绍了微信公众平台实现获取用户OpenID的方法,需要开发人员经过微信授权后获取高级接口才能使用此功能,用户OpenID对于微信公众平台建设有着非常广泛的用途,需要的朋友可以参考下 本文实 ...

  3. PHP之路——微信公众号授权获取用户信息

    官方文档链接:http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html /** * 获取code */ public f ...

  4. PHP 微信公众号开发 - 获取用户信息

    项目微信公众号开发,记录获取用户微信号信息,和用户openid 1,登录微信公众平台 点击登录微信公众平台 2,获取公众号开发信息 登陆之后在 开发->基本配置 3,设置IP白名单 在这里添加服 ...

  5. 使用Java语言开发微信公众平台(五)——获取access_token

    在前四期的文章中,我们分别学习了"环境搭建与开发接入"."文本消息的接收与响应"."被关注回复与关键词回复"."图文消息的发送与响 ...

  6. 使用Java语言开发微信公众平台(六)——获取access_token

             在前四期的文章中,我们分别学习了“环境搭建与开发接入”.“文本消息的接收与响应”.“被关注回复与关键词回复”.“图文消息的发送与响应”等环节.那么,从本篇博文开始,我们将进去更高级的 ...

  7. 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。

    在这里给大家分享下我的心得,1.写代码前一定要对整个流程有个了解.我就是因为在先不了解整个过程中去ctrl+c+v他人的博客代码,花费很多无用的时间去处理还不知道能不能跑的起来的代码. 2.本人比较喜 ...

  8. PHP实现微信公众号授权获取用户信息

    class WxAuthModel extends BaseModel { var $appId = APPID; var $appSecret = APPSECRET; /*微信x小程序,获取微信o ...

  9. 微信公众平台接口获取时间戳为10位,java开发需转为13位

    问题1:为什么会生成13位的时间戳,13位的时间戳和10时间戳分别是怎么来的 ? java的date默认精度是毫秒,也就是说生成的时间戳就是13位的,而像c++或者php生成的时间戳默认就是10位的, ...

随机推荐

  1. jquery隐藏table表格的某一列

    jquery隐藏table表格的某一列: $('table tr').find('td:eq(13)').hide(); 隐藏table的第13列

  2. HAL驱动库学习-SPI

    如何使用SPI库1 声明SPI hanlde, 例如: SPI_HandleTypeDef hspi2 通过实现HAL_SPI_MspInit()函数初始化底层资源 以下两个必须进行初始化 a 使能s ...

  3. 跟着8张思维导图学习javascript

    学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又 ...

  4. StructureMap使用方法(转)

    终于到了题目中的MVC使用StructureMap依赖注入的配置与实现了.在ASP.Net三层架构应用中StructureMap的是最老的IOC/DI工具,也就是依赖注入,很多线上的项目都使用了Str ...

  5. cargo failed to finish deploying within the timeout period [120000]

    cargo插件,报错:failed to finish deploying within the timeout period [120000] 解决方法:配置timeout为0 <plugin ...

  6. 【Jersey】IntelliJ IDEA + Maven + Jetty + Jersey搭建RESTful服务

    本文参考以下内容: 使用Jersey实现RESTful风格的webservice(一) Starting out with Jersey & Apache Tomcat using Intel ...

  7. libjingle_peerconnection

    最近在学习libjingle_peeconnection的代码 不知道应该如何写起,就先从类和各种数据结构列起吧 PeerConnectionFactory: 在创建PeerConnectionFac ...

  8. wf(四)

    我们已经在c#和xaml上编写了工作流,或者有的人会觉得在xaml上编写的workflow没什么优点,然而其实xaml其实具有一些很特别的优势. 1. xaml支持工作流设计器,c#不支持: 2. x ...

  9. Smallest Bounding Rectangle - uva10173

    Smallest Bounding Rectangle Given the Cartesian coordinates of n(>0)2-dimensional points, write a ...

  10. len字符串的长度

    #!/usr/bin/env python def fun4(x) : if len(x) > 2 : return print(x[0],x[1]) else: return 0 d = (' ...