简单了解

openid 就是公众号的关注者,获取后可以批量向用户发消息或向指定的用户发消息。
获取 用户openid有两种方式:
1.通过微信开放的 获取用户列表的接口,获取所有的用户openid。
2.通过网页授权获取openid(当前授权的用户)。

一、通过微信开放的 获取用户列表的接口,获取所有的用户openid

微信官方文档地址:https://developers.weixin.qq.com/doc/offiaccount/User_Management/Getting_a_User_List.html
微信公众平台在线接口调试工具:https://mp.weixin.qq.com/debug/

微信官方接口使用说明:

http请求方式: GET(请使用https协议)
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

传递参数说明

参数 是否必须 说明
access_token 接口调用凭证
next_openid 第一个拉取的OPENID,不填默认从头开始拉取

测试代码

 @Testpublic void testOpenid() {RestTemplate restTemplate = new RestTemplate();// 获取 access_tokenString access_token = testAccessToken();String url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN";url = url.replace("ACCESS_TOKEN",access_token);ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);String body = responseEntity.getBody();// 解析成JSONObject 并获取(叫data的JSON对象)JSONObjectJSONObject object = JSON.parseObject(body).getJSONObject("data");// 获取 JSONObject 中的 JSONArrayJSONArray array = object.getJSONArray("openid");System.out.println("array:"+array);// JSONArray 转成 List<Strig> 集合 (注意 alibaba 的fastjson 1.2.23以下的版本 和 1.2.3 的版本不包含 toJavaList()方法 )List<String> lists = array.toJavaList(String.class);System.out.println(lists.get(0));}

返回说明

正确时返回JSON数据包:

{"total":2,"count":2,"data":{"openid":["OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"
}

参数说明

参数 说明
total 关注该公众账号的总用户数
count 拉取的OPENID个数,最大值为10000
data 列表数据,OPENID的列表
next_openid 拉取列表的最后一个用户的OPENID

错误时返回JSON数据包(示例为无效AppID错误):

{"errcode":40013,"errmsg":"invalid appid"}

附: 关注者数量超过10000时

当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求。

具体而言,就是在调用接口时,将上一次调用得到的返回中的next_openid值,作为下一次调用中的next_openid值。

二、网页授权获取用户 openid(和获取access_token一样,前提是获得授权code)

微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

具体而言,网页授权流程大体分为四步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token 和 openid(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

首先配置回调域名,回调域名是用来获取 code 的返回值,下图是在微信测试号配置回调域名,类似于设置一个白名单
如果没有配置 或 配置错误会出现:scope参数错误或没有scope权限 的错误,需要配置正确的回调域名。

配置JS接口安全域名 可在该域名下调用微信开放的JS相关接口

接口调用请求说明 (1.用户同意授权,获取code【需要在微信中访问】)

请求方式: GET 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 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

测试代码

 @Testpublic void testCode() throws UnsupportedEncodingException {// 获取你拿到的 appid 和 secretString appid = "你的APPID";String secret = "你的secrect";// 使用 urlEncode 对链接进行处理 [授权回调域名(xxx.com)]String encodeurl = URLEncoder.encode("http://你配置的授权回调页面域名/getCode","UTF-8");//定义请求地址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";url = url.replace("APPID",appid).replace("REDIRECT_URI",encodeurl);// 获得拼接后的访问链接 复制到微信访问; 访问后的地址会含有code和state(例如:http://xxx.com/getCode?code=053NvJ0w3DU3DV2rkZZv3AbSVk1NvJ0R&state=STATE)System.out.println(url);}

这样会输出一个 URL 链接,复制 到微信里进行访问;然后再复制访问成功的链接 粘贴到其他地方进行查看 或 用默认浏览器打开进行查看链接:

接口调用请求说明 (2.根据 code 获取网页授权access_token、openid 信息)

请求方式: GET https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

传递参数说明

参数 是否必须 说明
appid 公众号的唯一标识
secret 公众号的appsecret
code 填写第一步获取的code参数 (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
grant_type 填写为authorization_code

测试代码

@Test
public void testWebpageAccessToken() {RestTemplate restTemplate = new RestTemplate();// 获取你拿到的 appid 和 secretString appid = "你的APPID";String secret = "你的secrect";String code = "你获取到的code";//定义请求地址String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";url = url.replace("APPID",appid).replace("SECRET",secret).replace("CODE",code);//发送请求 得到返回结果JSONObject obj = JSON.parseObject(restTemplate.getForObject(url,String.class));String access_token = obj.getString("access_token");String refresh_token = obj.getString("refresh_token");String openid = obj.getString("openid");String scope = obj.getString("scope");String expires_in = obj.getString("expires_in");System.out.println(obj);System.out.println("openid"+openid);}

正确返回说明

正确时返回的JSON数据包如下:

{"access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"SCOPE"
}

返回参数说明

参数 说明
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

错误返回说明
错误时微信会返回JSON数据包如下(示例为Code无效错误):

{"errcode":40029,"errmsg":"invalid code"}

其他或更详细的查看上面的微信官方文档!!!

说明

获取网页授权 openid 和 access_token ,只要获取到了授权的code就能一块获取到 openid和access_token !!

微信公众号推送模板消息(三):获取关注者列表 openid相关推荐

  1. 微信公众号推送模板消息

    前言 因为微信接口的改版 无法获得用户的信息 只能通过用户注册拿到openid进行模板消息推送 首先查看文档 模板消息接口文档 如文档所示,我们需要的参数有access_tocken,template ...

  2. 微信公众号推送模板消息工具类

    微信公众平台: 开通 模板消息功能 : 添加消息模板: 将模板id复制作为后台参数: 后台(java): 使用时直接调用WechatModelMessage.sendWechatmsgToUser() ...

  3. 记录使用.netcore 完成微信公众号推送模板消息

    /// <summary>/// 微信公众号发送消息/// </summary>/// <param name="data"></para ...

  4. 公众号推送模板消息(JAVA版)

    公众号推送模板消息(JAVA版) 先贴上官方文档 步骤不多:组装请求体,调用接口 接口:(POST)https://api.weixin.qq.com/cgi-bin/message/template ...

  5. nginx日志报警|微信公众号推送预警消息|PHP+shell脚本实现nginx错误日志报警恶意访问报警,实时通知到微信公众号 | 小型网站nginx日志报警轻量级方案

    1.shell脚本 命名:run.sh #!/bin/bash #!/usr/bin/python # -*- coding:utf-8 -*- #日志文件路径 accesslog=/www/wwwl ...

  6. 微信公众号推送图文消息

    需求 准备工作 代码编写 最终效果 目录 需求 用户在做完某个操作后,发送图文消息到用户微信公众号显示提醒 准备工作 公众号为服务号 获取公众号token 代码编写 public static voi ...

  7. 小程序给绑定的公众号推送模板消息

    //该小程序用户的openid 前提时该用户已关注公众号public AjaxResult sendWXMessage(String openId) {String token = getToken( ...

  8. 公众号推送模板消息,跳转小程序报错INVALID WEAPP PAGEPATH

    invalid weapp pagepath rid: 62d930f0-50070964-005e3fc6 这是微信示例: 在检查自己代码发现路径写错了.pagepath  要写对,前面可以不加斜线

  9. TP5之微信小程序推送模板消息

    TP5之微信小程序推送模板消息 1.获取formId并且存储起来,获取formId方法见: https://blog.csdn.net/u010481239/article/details/78239 ...

  10. 【设计模式】之观察者模式——简单的“微信公众号推送消息给相关用户”

    目录 一.简单介绍 二.观察者模式涉及的4个角色 三.观察者模式demo:简单的"微信公众号推送消息给相关用户" 一.简单介绍 定义对象间"一对多"的依赖关系. ...

最新文章

  1. 解决redhat安装centos yum源的问题
  2. C#调用dll中的函数
  3. Win2000域控制器+Exchange2000迁移至Win2003域控制器+Exchange2003
  4. [蓝桥] 算法提高 队列操作
  5. .net 默认时间格式不正确
  6. [POI2002][HAOI2007]反素数
  7. hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
  8. 你应该学习的 20 个 Python 代码段
  9. 《转》ReentrantLock实现原理深入探究
  10. 曲线积分和曲面积分及其几何应用、物理应用
  11. geany怎么创建文件夹_在visual studio中创建win32应用程序
  12. 海康威视摄像头rtsp地址
  13. 金蝶中间件中标国家金质工程
  14. 实现一个数据流中,随时可以取得中位数
  15. 微软MPP2.0 Microsoft Pen Protocol V2.0 officialEEAP.pdf
  16. php union用法,C++_C语言、C++中的union用法总结,开始的话 已经好长时间没有 - phpStudy...
  17. [机器学习]Logistic回归
  18. 大数据学习笔记(四)_MapReduce分布式处理框架
  19. 自动化测试python 成长路线_自动化测试工程师成长路线规划
  20. 工程职业伦理_Mooc_2019_期末考试参考答案

热门文章

  1. cad插件加载bplot成功用不了_CAD批量打印,加载Batchplot.vlx那个。 为什么我电脑输入BPLOT命令后没反应啊??急急急,求大神们解救!...
  2. linux match函数,关于VLOOUP函数与index match函数
  3. OA办公系统源码下载_PHPOA源码
  4. CVPR 2021 Visual Transformer 论文合集(附20篇推荐必读ViT论文)
  5. 微信小程序豆瓣电影实例源码下载
  6. Unity3D Odin Inspector 简单介绍与入门
  7. 【历史上的今天】5 月 10 日:淘宝网上线;机器感知之父出生;英国首批计算机投入运行
  8. 超级好用的网站整站下载工具
  9. 计算机网络——网络与互联网
  10. 如何新浪微博html5,新浪微博接入Html5游戏 注重轻量碎片化