精华内容
下载资源
问答
  • 微信小程序获取用户openId的实现方法 前端: wx.login({ success: function (res) { res.code }) 获取到code后,传到后台, 然后请求微信接口 ...把参数替换为自己的参数,这个接口就直接返回openId了 ...
  • 主要为大家详细介绍了MVC微信网页授权,在模板页中获取用户openid,感兴趣的小伙伴们可以参考一下
  • 主要介绍了微信小程序 springboot后台如何获取用户openid,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 在微信公众号中,获取关注用户OPENID。代码是用C#来进行开发的。
  • 开发微信公众号时通过vue页面获取用户静默授权/非静默授权后的信息,整个一套代码全部嵌套在vue界面中。
  • 本文代码基于微信开发文档-用户管理一节编写 在使用代码之前请确认你已阅读并理解上面提到的 package cn.dbw.luckwheel.config; import cn.dbw.luckwheel.po.LuckUser; import cn.dbw.luckwheel.po.WxPojo; import...

    本文代码基于微信开发文档-用户管理-获取用户列表一节开发

    在使用代码之前请确认你已阅读并理解上面文档提到的相关知识。

    1、工具类的构建

    首先创建如下代码到RestTemplateUtil.java文件中,RestTemplateUtil这个类将帮助我们解析微信服务器发送过来的数据

    import org.springframework.http.MediaType;
    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    import org.springframework.web.client.RestTemplate;
    import java.util.ArrayList;
    import java.util.List;
    
    public class RestTemplateUtil {
        public static RestTemplate getInstance() {
            RestTemplate restTemplate = new RestTemplate();
            restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
            return restTemplate;
        }
    }
    
    class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
        public WxMappingJackson2HttpMessageConverter(){
            List<MediaType> mediaTypes = new ArrayList<>();
            mediaTypes.add(MediaType.TEXT_PLAIN);
            mediaTypes.add(MediaType.TEXT_HTML);
            setSupportedMediaTypes(mediaTypes);
        }
    }
    

    获取微信公众号access_token的函数,需要使用fastjson工具包,LOGGER为日志输出类,注意:如果不是测试公众号的话,请确保请求的IP地址在公众号IP白名单中,否则无法获取access_token,access_token一般7200秒后过期。

    /**
     * @param appid 微信公众号appid
     * @param secret 微信公众号sectet
     * @return 微信公众号access_token
     */
    public String getWxAccessToken(String appid, String secret){
        RestTemplate restTemplate = RestTemplateUtil.getInstance();
        try {
            JSONObject jsonObject = restTemplate.getForObject(String.format("https://api.weixin.qq.com/cgi-bin/token?" +
                    "grant_type=client_credential&appid=%s&secret=%s", appid, secret), JSONObject.class);
            if(jsonObject.get("access_token") == null){
                throw new Exception(jsonObject.get("errcode").toString() + ":" + jsonObject.get("errmsg"));
            }else {
                return jsonObject.get("access_token").toString();
            }
        }catch (Exception e){
            LOGGER.error(e.getMessage());
        }
        return "";
    }
    

    2、数据实体类的构建

    需要准备三个实体类,一个保存openID列表,一个保存用户信息,一个保存用户信息列表,保存openID的实体类看起来如下所示:
    在这里插入图片描述
    相对应的,我们构造出如下实体类:

    public class WxUsersListEntity {
        int total;
        int count;
        openidList data;
        String next_openid;
    
        public class openidList{
            List<String> openid;
    		//get and set method
    		...
        }
    	
    	//get and set method
    	...
    }
    

    同理:
    保存用户信息的实体类看起来像这样:
    在这里插入图片描述

    相对应的,我们构造出如下实体类:

    public class WxUserMsgEntity {
        public int subscribe;
        public String openid;
        public String nickname;
        public String headimgurl;
        public String unionid;
        
        //get and set method
    	...
    }
    

    你可以只挑你感兴趣的内容来保存,这里我只保存以上5条信息。这里提示一下,如果你需要将用户信息保存到数据库,格外注意nickname,他是utf8mb4编码。如果要将nickname保存到数据库,你有两种选择:

    • 将数据库修改到支持utf8mb4来保存,参考这里
    • 过滤掉nickname中的emoji表情来保存,参考这里

    最后是保存用户信息列表的类,他看起来是这样:
    在这里插入图片描述
    所以构造的实体类是这样:

    public class WxUserMsgList{
       public List<WxUserMsgEntity> user_info_list;
    
        //get and set method
    	...
    }
    

    3、批量获取用户openid

    准备好以上的内容后,就可以开始按照微信文档中的逻辑编写代码了。首先我们来获取用户的openid列表,该函数返回的是一个保存所有用户openid的List。

    public List<String> getUsersOpenID(String access_token){
        RestTemplate restTemplate = RestTemplateUtil.getInstance();
        List<String> usersOpenID = new ArrayList<>();
        WxUsersListEntity wxUsersListEntity = new WxUsersListEntity();
    
        //获取所有微信用户的openID
        wxUsersListEntity = restTemplate.getForObject(String.format("https://api.weixin.qq.com/cgi-bin/user/get?" +
                "access_token=%s",access_token), WxUsersListEntity.class);
        usersOpenID.addAll(wxUsersListEntity.getData().getOpenid());
    
        while(wxUsersListEntity.getCount() == 10000){
            wxUsersListEntity = restTemplate.getForObject(String.format("https://api.weixin.qq.com/cgi-bin/user/get?" +
                    "access_token=%s&next_openid=%s", access_token, wxUsersListEntity.getNext_openid()), WxUsersListEntity.class);
    
            if(wxUsersListEntity.getCount() == 0) {
                break;
            }else {
                usersOpenID.addAll(wxUsersListEntity.getData().getOpenid());
            }
        }
        return usersOpenID;
    }
    

    4、批量获取用户信息

    之后根据用户openid的List去获取用户的信息,函数如下:

    /**
     * 根据列表中的openID返回用户信息,最大不超过100(因为微信服务器最多一次只支持拉取100条)
     * @param openIDs
     * @return 微信用户信息列表
     */
    public List<WxUserMsgEntity> getUsersMsg(List<String> openIDs, String access_token) throws Exception {
        if(openIDs.size() > 100) { throw new Exception("openIDs too long, must less or equals 100");}
    
        JSONObject request = new JSONObject();
        JSONArray openidList = new JSONArray();
    
        for(String s:openIDs){
            JSONObject openId = new JSONObject();
            openId.put("lang", "zh_CN");
            openId.put("openid", s);
            openidList.add(openId);
        }
        
        request.put("user_list", openidList);
    
        RestTemplate restTemplate = RestTemplateUtil.getInstance();
    
        WxUserMsgList list = restTemplate.postForObject(String.format("https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=%s", access_token),
        request, WxUserMsgList.class);
    
        return list.getUser_info_list();
    }
    

    在3,4步中使用getForObjectpostForObject函数的时候,我没有考虑获取出错的情况,但是我在获取access_token的函数中给出了处理出错情况的示例,即:先将数据接收到JSONObject中,判断是否有我们需要的字段,没有的话说明出现了错误。如果没有出错,你可以使用JSONObject的public <T> T toJavaObject(Class<T> clazz)函数将JSONObject转为数据实体类处理。

    以上我们就完成了批量获取微信用户openID及用户信息的目标,如果使用过程中出现问题,可以在文章下评论,我会及时回复,让后来者不踩坑。

    展开全文
  • 主要为大家详细介绍了.NET微信公众号获取OpenID和用户信息的方法,用户OpenID对于微信公众平台开发尤为重要,感兴趣的小伙伴们可以参考一下
  • PHP如何获得Openid,微信公众号通过appid和appsecret获取Openid,该类实现了从微信公众平台获取code、通过code获取openid和access_token、
  • 微信网页授权获取当前登录用户信息参照(WeiXinWYSQ.aspx页面),红包支付参照(PayForWeiXin.ashx),获取公众号下面所有用户OpenID用户信息参照(GetRmbByUnionId.ashx),所有内容都已经调通,记得修改密钥地址和...
  • 本篇文章给大家介绍微信公众号支付如何获取用户openid,需要授权回调页面域名等一系列途径实现此功能,需要的朋友可以参考下
  • 主要给大家介绍了关于ASP.NET Core2静默获取微信公众号的用户OpenId的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 微信获取用户openid

    2018-09-07 16:24:03
    微信获取用户openid,微信获取code,直接载入类,跳转后就可获取到用户的openid
  • openId用户在当前公众号下的唯一标识(‘身份证’),就是说通过这个openId,就能区分在这个公众号下具体是哪个用户。 二、openId有什么用? 假如用户A在当前公众号下购买了一件商品,用户的下单信息肯定要存储到...
  • java+Springmvc实现获取微信用户唯一标识openId并返回
  • 微信小程序获取openid用户信息的方法 1. 获取openid 1.1 获取code 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的会话密钥(session_key)。用户数据的加解密...
  • 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)。用户数据的加解密通讯需要依赖会话密钥完成。 2、code 换取 session_key 这是一个 ...
  • 主要介绍了微信公众平台实现获取用户OpenID的方法,需要开发人员经过微信授权后获取高级接口才能使用此功能,用户OpenID对于微信公众平台建设有着非常广泛的用途,需要的朋友可以参考下
  • 主要介绍了微信小程序授权获取用户详细信息openid的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
  • 微信公众号获取用户openid有两种方式 一种需要用户授权获取的用户数据相对较多,如用户名称、头像等,还有一种无需授权获取直接上代码, 获取用户openid首先要获取code,然后将code作为参数调用微信api获取openid...

    微信公众号获取用户openid有两种方式 一种需要用户授权获取的用户数据相对较多,如用户名称、头像等,还有一种无需授权获取直接上代码 ,

    获取用户openid首先要获取code,然后将code作为参数调用微信api获取openid代码如下,

    package com.manage.spring.GetOpendiddemo;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONException;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import com.alibaba.fastjson.JSON;
    import com.wx.consts.WxConfig;
    
    @Controller
    public class GetOpendiddemo {
    	
    	@RequestMapping(value = "getCode")
    	public void getOpenId(HttpServletResponse response, Model model)
    			throws IOException {
    		//先获取code
    		String url = getOpenIdUrl();
    		//得到的code传入获取openid参数
    		response.sendRedirect(url);
    	}
    
    	//获取code
    	public static String getOpenIdUrl() throws ClientProtocolException,
    			UnsupportedEncodingException {
    		String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
    		//appid
    		String appid = WxConfig.APPID;
    		String REDIRECT_URI = "https://XXXX/XXX";// 你的回调页
    		//参数utf-8
    		url = url.replace("APPID", java.net.URLEncoder.encode(appid, "utf-8"));
    		url = url.replace("REDIRECT_URI",java.net.URLEncoder.encode(REDIRECT_URI, "utf-8"));
    		return url;
    	}
    	
    	//获取openid
    	@RequestMapping({ "getOpendid" })
    	@ResponseBody
    	public static String getopendid(String code,Model model) throws ClientProtocolException, IOException, JSONException {
    		CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    		String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=AppId&secret=AppSecret&code=CODE&grant_type=authorization_code";
    		url = url.replace("AppId", WxConfig.APPID).replace("AppSecret", WxConfig.APPSECRET).replace("CODE", code);
    		HttpGet httpGet = new HttpGet(url);
    		HttpResponse response = httpClient.execute(httpGet);
    		String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
    		com.alibaba.fastjson.JSONObject jsonTexts = JSON.parseObject(jsonStr);
    		String openid = "";
    		if (jsonTexts.get("openid") != null) {
    			openid = jsonTexts.get("openid").toString();
    		}
    		return openid;
    	}
    }
    

    需要注意的是回调页面的域名须在微信公众号进行授权 : 

    展开全文
  • 主要介绍了Yii使用EasyWechat实现小程序获取用户openID的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 包含两个东西,1是实现文档,2是实现demo。 这是java版的,实现原理,通过JS请求自定义controller方法来获取微信用户信息的。
  • 背景 尝试一下新鲜事物“微信小程序”,其中有一个业务场景,通过微信登陆小程序,这样需要获取小程序的用户ID(也就是openid)。微信小程序从安全角度考虑,不提供直接在微信服务器获取openid的方法,那么需要借助 ...
  • 微信小程序获取用户openId 前端: [javascript] view plain copy print?在CODE上查看代码片派生到我的代码片 wx.login({   success: function (res) {   res.code   }) 复制代码 获取到code后,传到后台, ...
  • java微信获取OpenId

    2018-03-23 10:04:25
    微信开发获取openId
  • 小程序读取用户openid

    2019-03-15 12:54:12
    微信小程序-获取用户Openid,通过php文件,从服务区读取相关信息

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,509
精华内容 12,603
关键字:

获取所有用户的openid