网页qq抓取什么原理( 微信H5网页需要获取用户的基本信息(图))

优采云 发布时间: 2021-11-14 07:11

  网页qq抓取什么原理(

微信H5网页需要获取用户的基本信息(图))

  从微信H5网页获取用户基本信息

  在微信访问一些HTML5网页时,我们经常会看到是否允许访问用户公开信息的提示。如果用户点击“允许”,网页可以获得用户的头像、昵称等信息。

  

  如果复制网址,在非微信环境打开,会看到提示“请在微信客户端打开连接”。

  

  一直很好奇这是怎么实现的,是微信提供的功能还是开发者自己实现的?从页面显示效果来看,应该是微信提供的功能。如果是微信提供的功能,如何实现这样的效果?正好我们有个H5网页需要获取用户昵称信息,研究了微信的相关文档,整理了这篇文章。

  先决条件

  首先,获取用户昵称属于微信H5开发中的“高级功能”。所谓“高级功能”就是微信收费的内容。开发者必须通过公众号认证后方可使用。所以如果你想玩这篇文章,先把300大洋转到微信。不是崩溃吗?没办法,微信这么厉害。认证成功后,可以调用相关接口获取用户的基本信息。相关文档可直接访问

  页面授权

  在上一篇文章中,我们看到了一个微信授权提示页面。这个页面其实是微信自动弹出的。用户点击“允许”后,应用程序可以获得用户的基本信息。那么问题来了,如何让微信弹出这个授权提示页面呢?其实很简单,在微信上访问一个特定的网站就行了。如以下代码所示:

   const redirectToAuthPage = () => {

const callbackURL = encodeURIComponent(`https://pk.xxx.cn/pk/wechat/getUserInfoCallback`)

const state = encodeURIComponent('/pk/page/teachersday/index.html')

const wechatId = 'wx116c7ab3d519b006'

const redirectURI = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${wechatId}&redirect_uri=${callbackURL}&response_type=code&scope=snsapi_userinfo&state=${state}#wechat_redirect`

window.location.href = redirectURI

}

  URL中主要有几个参数:也就是说,只要我们访问诸如:///pk/wechat/getUserInfoCallback&response_type=code&scope=snsapi_userinfo&state=/abc这样的地址,微信就会自动弹出授权提示。如果在微信客户端内没有访问,会提示“请在微信客户端打开连接”。

  appid 开发者ID,公众号唯一标识。您可以在微信公众号左侧的“基本配置”菜单中通过redirect_uri查看授权后重定向的回调链接地址。官方要求是使用urlEncode对状态重定向后的链接进行处理。带状态参数,最多128字节

  前两个参数必须填写,最后一个可以忽略。但是状态在开发的时候会很有用,可以传入一些辅助信息。比如在我们的页面中,授权成功后,我们会使用状态来让后台页面跳转。

  回到上面的URL地址,当用户在微信中访问时,首先会弹出一个授权提示。如果用户点击“允许”,页面将自动重定向到它。

  注意这里的代码,用于在微信中获取access_token,通过access_token调用其他API可以获取用户的基本信息。

  access_token 的交换代码

  拿到code后,可以兑换access_token的code,如下图:

  curl https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx116c7ab3d519b006&secret=SECRET_CODE&code=xxxxxx&grant_type=authorization_code

  Secret 是开发人员的密钥。第一次创建密钥时,微信会提示我们保存。

  返回以下结果:

  {

  "Access_token":"13_wNUT-XFU2d4TYuBRt98",

  "Expires_in":7200,

  "Refresh_token":"13__46yGQMYzwe2",

  "Openid":"og7kR1WU05l0hUYpGtQAZNHYJSzE",

  "范围":"snsapi_userinfo"

  }

  通过access_token获取用户基本信息

  获取access_token后,就可以获取用户的基本信息,如下图:

  https://api.weixin.qq.com/sns/userinfo?access_token=13_wNUT-XFU2d4TYuBRt98&openid=og7kR1WU05l0hUYpGtQAZNHYJSzE&lang=zh_CN

  返回以下结果:

  {

  "Openid":"og7kR1WU05l0hUYpGtQAZNHYJSzE",

  "昵称":"石头",

  “性别”:1,

  "语言":"zh_CN",

  "城市":"成都",

  "省":"四川",

  "国家":"中国",

  "headimgurl": "",

  “特权”:[]

  }

  跳转到H5页面

  后台获取用户昵称后,可以通过读取redirect_uri中的state参数跳转到前端H5页面。比如跳转到Stone,前端页面可以很方便的获取到用户的昵称信息。

  注意公众号必须经过认证,否则无法获取用户基本信息。公众号需要到“安全中心”设置白名单,比如后台服务器的外部IP地址,否则将无法访问微信界面。公众号需要设置JS接口安全域名和回调域名。

  以上配置都OK后,就可以正常调用微信JS SDK,获取用户公开的基本信息了。

  对于后台开发的同学来说,code兑换的access_token是有时间限制的,2小时左右就会过期。需要使用接口返回的refresh_token来获取新的access_token。refresh_token 的有效期为 30 天。如下:

  curl https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=wx116c7ab3d519b006&grant_type=refresh_token&refresh_token=13__46yGQMYzwe2

  返回以下数据:

  {

  "Access_token":"ACCESS_TOKEN",

  "Expires_in":7200,

  "Refresh_token":"REFRESH_TOKEN",

  "Openid":"og7kR1WU05l0hUYpGtQAZNHYJSzE",

  “范围”:””

  }

  同时,微信还提供了API接口来验证access_token是否有效。

  curl https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=og7kR1WU05l0hUYpGtQAZNHYJSzE

  如果access_token有效,则返回如下数据,否则提示错误信息:

  {

  "错误代码":0,

  "Errmsg": "好的"

  }

  如果数据不合法,将返回其他信息:

  {

  "错误代码":40013,

  "Errmsg":"无效的 appid"

  }

  总结

  本篇短文主要介绍如何通过微信HTML5网页中的授权提示获取用户的基本信息。此功能需要微信公众号认证才能使用。同时需要配置相应的白名单IP和回调域名。希望对大家的发展有所帮助。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线