zoukankan      html  css  js  c++  java
  • 微信公众平台如何获取用户的OpenID(一)

      如何获取用户的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;

       }

  • 相关阅读:
    springboot之mybatis别名的设置
    webstorm
    万字长文把 VSCode 打造成 C++ 开发利器
    残差residual VS 误差 error
    参数与非参数的机器学习算法
    阿里云产品梳理
    aws产品整理
    Azure产品整理
    OpenStack产品摘要
    头条、美团、滴滴、阿里、腾讯、百度、华为、京东职级体系及对应薪酬
  • 原文地址:https://www.cnblogs.com/benefitworld/p/5292065.html
Copyright © 2011-2022 走看看