-
不关注公众号可以获取openid吗_微信公众号h5页面网页授权流程
2020-12-09 17:53:42一、前置条件1、获取公众号的appid(公众号唯一标识) 页面导向:开发 --> 基本配置 2、授权后重定向的回调链接地址(页面设置:开发 --> 接口权限 --> 网页服务 --> 网页帐号-->网页授权获取用户基本...一、前置条件
1、获取公众号的appid(公众号唯一标识)
页面导向: 开发 --> 基本配置
2、授权后重定向的回调链接地址(页面设置:开发 --> 接口权限 --> 网页服务 --> 网页帐号 --> 网页授权获取用户基本信息)。开发的项目需要放到已经解析好服务器域名的服务器下,同时把Mp***.text文件放到服务器根目录下,此时你的服务器必须能联通外网也就是有公网IP,并且80端口是打开的,可以使用阿里云等服务器,默认配置就可以了。
注:该链接地址是域名,不需要协议头。若无域名可注册测试账号进行测试(用测试账号测试时,地址一定是 ip:port 才可以测试成功)。
二、网页授权的两种方式
根据需要确定静默授权还是非静默授权。
1、静默授权:以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面,只能获取openid)
2、非静默授权:以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。(可获取openid、用户头像等)
三、前端获取流程
1、用户同意授权获取code(并附前端代码)
// code说明 :code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。const appId = ''; // 公众号的appidconst authCode = getUrlParam('code') // 截取路径中的codeif (authCode == null || authCode === '') { const local = window.location.href; // 获取当前的页面路径,也是回调地址 window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo#wechat_redirect`;}// 获取到路径中的code后,将code传给后台获取用户信息// 截取code的方法export function getUrlParam(name: string) { const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)') const url = window.location.href.split('#')[0] const search = url.split('?')[1] if (search) { const r = search.substr(0).match(reg) if (r !== null) return unescape(r[2]) return null } else return null}
2.通过code换取网页授权access_token(获取access_token由后端发起)。为什么,前端不能一起把获取code和获取openId的操作都做了,还要请求后台,让后台获取openId?
后台通过appid、AppSecret、code 获取openid。前后端都获取到openid,并通过openid做用户绑定和查询。
-
不关注公众号可以获取openid吗_微信的OpenID究竟是什么
2020-11-24 12:28:04今天被别人问了个问题,微信的OpenID是什么?虽然已经大半年没写过代码了,但我居然还...涉及到的相关知识点有:OpenID和unionidOpenID:为了识别用户,每个用户针对每个公众号或小程序等应用会产生一个安全的OpenID...今天被别人问了个问题,微信的OpenID是什么?虽然已经大半年没写过代码了,但我居然还记得挺清楚的,那就写出来,鬼知道什么时候又忘了。
之前做过一个引导用户将微信号与公司的手机账号绑定的需求,虽然乍听上去挺简单,但其中涉及到的细节却比较多,而且也踩到了几个坑。涉及到的相关知识点有:
OpenID和unionid
OpenID:为了识别用户,每个用户针对每个公众号或小程序等应用会产生一个安全的OpenID,公众号或应用可将此ID进行存储,便于用户下次登录时辨识其身份,或将其与用户在第三方应用中的原有账号进行绑定
UnionId
:UnionId也是用户的标识符,但它与OpenID不同的是,同一个微信用户,登录同一个开发主体下的多个小程序或公众号的时候,分配的UnionId是一样的。可以打个通俗的比喻,比如某个用户是万达商场的会员,那么UnionId就是这个用户对应的万达会员标识,而这个用户又比较爱买买买,在万达商场的很多商店下面都是会员,那么此时每个商店赋予这个用户的会员号就相当于OpenID了,总而言之,在同一个开发体下,UnionId是唯一的,而OpenID不一定唯一。
微信授权登录
如果用户在微信客户端中访问第三方网页,那么第三方网页需要通过微信网页的授权机制,来获取用户的基本信息,进而实现业务逻辑。用户授权登录的方式分为两种,一种是显式授权登录,一种是静默的授权登录。
显式的授权登录页
:这种方式是以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。需要用户手动点击登录按钮同意授权,可以获取较多的信息,比如用户头像、昵称、openId、unionId、是否关注公众号等。如下是常见的授权页面:静默授权登录页
:用户在无感知的情况下进行了授权。这种授权是以snsapi_base为scope发起的网页授权,是用来获取用户的openId,用户无需进入授权页就进入了第三方业务页。授权流程
整个授权流程在微信开发者文档已有了比较清晰的解释,具体可点击这里进入微信网页授权。
整个过程可以总结成以下步骤:
- 引导进入授权页
用户授权需要进入以下页面(页面链接参数解释如上表所示):https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE& state=STATE#wechat_redirect
- 用户同意授权(scope=snsapi_base无此步骤)
- 授权后成功后服务器将code回传回来并重定向到第一步配置的回调页面
- 微信公众号通过code向微信服务器请求openId
- 微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
- 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)
- 微信公众号通过openId向本服务器请求用户信息(若此openId已与第三方账号有所关联,那么可依据openId查询到用户在第三方数据库中的信息)
整个流程图如下所示:
相关代码
用户进入页面时首先判断是否存在微信返回的授权code,如果没有,则代表用户未进行授权,需要进入授权页
function getUserInfo(callback){ // 如果认证的code存在 if (params.code) { const code = encodeURIComponent(params.code); const data = { mchId: 'WX001', code, }; const _params = new Params(params); delete _params.code; history.replaceState(null, null, _params); $loader.show(); request('/node_api/user.do?fn=wxUserInfo', 'GET', data).then((res) => { $loader.hide(); if (res.code === 0){ const userInfo = {}; try { userInfo.wxInfo = res.content.userinfo || {}; userInfo.isbind = res.content.isBind; userInfo.channelUserId = res.content.channelUserId; } catch (ex) { userInfo.wxInfo = {}; userInfo.isbind = false; } if (!userInfo.isbind) { const userToken = { accessToken: res.content.accessToken || '', channelId: res.content.channelId || '', channelUserId: res.content.channelUserId || '', unionId: res.content.unionId || '' }; // 将userToken写入cookie document.cookie = 'userToken=' + encodeURIComponent(JSON.stringify(userToken)); } callback(userInfo); }else{ // 请求sso/login接口失败,弹提示信息 showTextMessage(res.msg); }}, () => { $loader.hide(); showTextMessage('网络异常,请稍后再试'); deleteCode(); }); }else{ // 无code 则进行微信认证 authorize(); } }
- 引导进入授权页
-
微信小程序获取公众号code以及openId
2020-11-18 16:59:47没有需求就没有开发 需求在小程序内直接可以关注公众号 且如果已经关注则隐藏关注按钮;找了许多没有特别完整的 索性就把自己的做法给整理一下 步骤大致如下 1. 小程序关联公众号: 1.1 路径:小程序后台——设置...微信小程序判断用户是否关注公众号-简要流程
版权 原文链接:树先生https://blog.csdn.net/weixin_39601000/article/details/105288342
没有需求就没有开发 需求在小程序内直接可以关注公众号 且如果已经关注则隐藏关注按钮;找了许多没有特别完整的 索性就把自己的做法给整理一下 步骤大致如下1. 小程序关联公众号:
1.1 路径:小程序后台——设置——关注公众号1.2 关联以后就可以直接在小程序内使用“”组件了 对应参考链接:https://developers.weixin.qq.com/miniprogram/dev/component/official-account.html
2. 获取用户是否关注公众号标识
2.1 实现:借用了小程序“web-view”组件来实现 注意需要先去小程序开发设置——业务域名 添加公众号设置的网页授权域名才可以访问;对应参考链接:https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html**2.1.1 小程序设置跳转路径 获取code:URL必须是上面设置好的域名下的路径**
<web-view src="https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_base#wechat_redirect"></web-view>
2.1.2 通过code换取公众号openid和网页授权access_token (就是正常获取公众号openid流程 参考链接:[https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html))
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
**2.1.3 获取通用接口access_token** (参考链接:https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/Nontax_Bill/API_list.html#1.1%20%E8%8E%B7%E5%8F%96access_token)注意:2.1.2获取到的网页授权access_token是无法用于后续请求的
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
**2.1.4 通过通用接口access_token和公众号openid获取用户基本信息(即是否关注公众号标识)**参考链接:[https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html](https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html)
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
建议将获取到的公众号openid与小程序openid对应关系 保存进表;供后续调用
3. 利用web-view的JSSDK接口携参跳转回小程序
//subscribe即为返回的是否关注公众号标识<script> wx.miniProgram.switchTab({url: '/pages/index/index?subscribe='+subscribe}) </script>
-
微信网页授权获取openid,发公众号模板消息提示openid无效。
2019-01-14 19:04:531.已关注公众号 2.公众号是服务号 3.线上服务器 4.公众号与小程序已经关联 用户小程序下单或from,给客户发送小程序模板消息,然后给商家发送公众号模板消息。小程序的没问题。公众号是事先让商家关注、授权... -
公众号根据openid获取用户信息,php通过openid得到用户详细信息
2017-11-22 09:55:31 -
微信公众号获取用户openId及用户信息
2018-04-04 15:32:36本文demo下载:wisdomdd.cn在开发微信公众号时,一旦用户关注了微信公众号,用户后续的操作已经跟用户的信息进行了绑定,那这些绑定的信息其它是通过OpenId进行的,每个用户关注不同的微信公众号时会产生唯一且不同... -
第三方网站实现微信扫码关注公众号并登陆
2020-03-13 14:08:38最近接到新需求,为将用户引流到公众号,官网实现...1、微信扫码进入微信关注页面,若关注微信向之服务器配置中的接口发送一条信息,说明用户已经关注,这时就可以根据拿到到openid去获取用户信息实现登陆。 2、结果... -
微信公众号获取微信用户信息
2017-07-29 08:25:01对于不同用户,所对应的OpenID是不一样的),但是还有一个问题就是只有当微信用户关注了微信公众号后,此时对应返回的subscribe的值为1的时候,此时说明的是微信用户已经关注了微信公众号,值为0时,表示没有关注。... -
如何获取20W+微信公众号用户信息 ?
2020-01-16 11:14:13目前在做一个获取公众号所有用户信息的工具,但是公众号有15W+的关注者 代码步骤如下: 1.调用微信接口 https://api.weixin.qq.com/cgi-bin/user/get?access_token={0} 获取到所有的用户信息,遍历... -
django 项目调用微信接口,获取用户openID, 昵称及关注信息等
2019-03-29 01:06:27最近写了一个微信公众号的项目,要获取用户详细信息及是否关注公众号,需要调用微信的接口。因为第一次用,所以开始的时候是很懵逼的,后来看了很多遍的文档以及百度了很多的CSDN才弄明白了一点。 微信公众号开发... -
微信 JSAPI 支付 微信内部起调H5支付 支付完成跳转公众号并发送公众号消息模板
2020-08-07 13:58:32微信 JSAPI 支付 微信内部起调H5支付 支付... // 强制关注公众号,获取openid getCode = function () { var code = getUrlParam('code'); // 截取路径中的code,如果没有就去微信授权,如果已经获取到了就直接传cod -
C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)
2015-07-09 11:44:00中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法如下: 第一步和之前讲的一样:获取code,但是scope使用方法是snsapi_userinfo; 第二... -
微信公众号消息群发
2019-02-11 15:11:21向关注了微信公众号的微信用户群发消息。(可以是所有的用户,也可以是提供了微信openid的微信用户集合) 2、基本步骤 前提: 已经有认证的公众号或者测试公众账号 发送消息步骤: 发送一个请求微信去获取... -
不管用户是否已经关注,授权获取用户的基本信息
2018-08-09 17:05:11基本信息包括openid headming 。。 思路: 1.微信公众号后台接口权限配置吧,需要填写验证服务器的域名例如 wx.xxx.com下面的所有目录下的都能可以作为接收信息页面 2.获取code 3.用code拼装成授权链接即可 ... -
httpClient实现微信公众号消息群发
2016-09-21 19:39:00向关注了微信公众号的微信用户群发消息。(可以是所有的用户,也可以是提供了微信openid的微信用户集合) 2、基本步骤 前提: 已经有认证的公众号或者测试公众账号 发送消息步骤: 发送一个请求微信去... -
PHP 微信活动校验微信用户是否已经关注
2018-08-20 08:56:53这里就要求我们是校验用户是否已经关注了,所以我们就需要用到微信的----获取用户基本信息接口 获取用户基本信息(包括UnionID机制) 开发者可通过OpenID来获取用户基本信息。请使用https协议。 接口调用请求... -
java 微信群发多图文_[Java教程]httpClient实现微信公众号消息群发
2021-02-28 14:56:25(可以是所有的用户,也可以是提供了微信openid的微信用户集合)2、基本步骤前提:已经有认证的公众号或者测试公众账号发送消息步骤:发送一个请求微信去获取access_token发送一个请求去请求微信发送消息相关微信接口... -
微信中的APP、公众号、小程序的openid及unionid介绍
2019-09-21 19:01:28同一个微信开放平台下的相同主体的App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。 openid ... -
php获取微信uninoid_微信小程序获取用户unionId
2020-12-30 19:22:09unionId一个微信开放平台下的相同主体的App、公众号、小程序的unionid是相同的,这样就可以...App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过 w... -
微信小程序获取用户unionId
2020-09-11 17:03:36同一个微信开放平台下的相同主体的 App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过 wx.login 获取到该用户UnionID,无须用户再次授权 ... -
H5中获取微信头像、昵称
2018-11-05 13:52:01第一种是默认登录方式,即不需要弹出授权框,只会有一个“正在登录”的弹窗,这种方式获取到的数据仅限于该用户已经关注了对应公众号之后,如果是未关注公众号的用户只能获取到openid。那么针对这种情况,就需要使用... -
微信小程序获取不到unionid
2018-05-21 11:59:20已经关联微信开放平台的小程序,一般可以通过wx.login登录接口获取到unionid,但是如果微信公众号和小程序都关联了微信公众平台,而且用户从未关注过微信公众号,那么通过wx.login不能获取到unionid,只有session_... -
回归PHP(一)——微信接入获取用户信息
2016-10-28 11:57:56最近在做公司的微信接入部分。目前接入部分代码已经由别人写好,但是还有很多问题。经过几天痛苦的看文档和代码,整理一下接入流程,大致相当于...第一种可以不经过授权,如果用户已经关注该公众号,则该公众号的... -
PHP用户管理中常用接口调用实例及解析(含源码)
2021-01-21 16:18:10掌握用户的第一步就是将已经关注的粉丝信息保存起来,这个时候就用到获取用户列表接口。公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的... -
微信公众平台开发5-用户管理中常用接口调用实例及解析(含源码)
2017-03-09 12:59:00掌握用户的第一步就是将已经关注的粉丝信息保存起来,这个时候就用到获取用户列表接口。公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一... -
微信授权
2019-01-17 11:50:00微信授权分为两种,一种是以snsapi_base为scope发起的网页授权,无授权窗口弹出,用于获取...其实对于已经关注过公众号的用户,再次进入该公众号,即使scope为snsapi_userinfo,也相当于静默授权,用户无感知。 具... -
微信三方平台开发踩坑记录
2018-07-17 17:55:151.针对服务号,如果已经接...3.要想通过h5页面获取用户信息,服务号必须通过2次授权方式获取用户openid,订阅号只能通过发送带openid和appid的链接给用户,用户点击后从h5页面获取用户信息,前提是确保用户已经关注... -
httpClient实现
2017-07-19 15:29:00向关注了微信公众号的微信用户群发消息。(可以是所有的用户,也可以是提供了微信openid的微信用户集合) 2、基本步骤 前提: 已经有认证的公众号或者测试公众账号 发送消息步骤: 发送一个请求微信去获取... -
JAVA实现微信支付V3
2018-07-04 16:54:00喜欢的朋友可以关注下,粉丝也缺。 相信很多的码友在项目中都需要接入微信支付,虽说微信支付已成为一个普遍的现象,但是接入的过程中难免会遇到各种各样的坑,这...1.获取用户openid 2.获取token,注意获取的t...