1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 微信开发 网页授权获取用户基本信息

微信开发 网页授权获取用户基本信息

时间:2022-02-15 20:59:50

相关推荐

微信开发 网页授权获取用户基本信息

微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章。

一、什么是OAuth2.0

官方网站:/ /2/

权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.

OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth 2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

新浪微博API目前也使用OAuth 2.0。

原文:/txw1958/p/weixin71-oauth20.html

二、微信公众平台OAuth2.0授权

微信公众平台OAuth2.0授权详细步骤如下:

1. 用户关注微信公众账号。

2. 微信公众账号提供用户请求授权页面URL。

3. 用户点击授权页面URL,将向服务器发起请求

4. 服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)

5. 用户同意(scope为snsapi_base时无此步骤)

6. 服务器将CODE通过回调传给微信公众账号

7. 微信公众账号获得CODE

8. 微信公众账号通过CODE向服务器请求Access Token

9. 服务器返回Access Token和OpenID给微信公众账号

10. 微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)

11. 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)

使用的AppId和AppSecret在开发者中心-开发者ID中,可以找到。

1. 配置授权回调页面域名

进入微信公众平台后台后,依次进入开发者中心-权限表,找到网页授权获取用户基本信息,

点击右侧的修改。原文:/txw1958/p/weixin71-oauth20.html

授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为:,配置以后此域名下面的页面/music.html 、 /login.html 都可以进行OAuth2.0鉴权。但 、 、 无法进行OAuth2.0鉴权。

这里我们填写方倍工作室的一个百度应用二级域名为

原文:/txw1958/p/weixin71-oauth20.html

如果你的网址没有被列入过黑名单,就会在顶部出现

然后,域名配置就成功了。

2. 用户授权并获取code

在域名根目录下,新建一个文件,命名为oauth2.php,其内容为

<?phpif (isset($_GET['code'])){echo $_GET['code'];}else{echo "NO CODE";}?>

先了解下请求授权页面的构造方式:

https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数说明

应用授权作用域:由于snsapi_base只能获取到openid,意义不大,所以我们使用snsapi_userinfo。

回调地址:填写为刚才上传后的oauth2.php的文件地址,

state参数:随便一个数字,这里填1

构造请求url如下:

https://open./connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=/oauth2.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect

把这个链接发送到微信中,以便在微信浏览器中打开,这里使用A链接封装如下:

欢迎关注【近宝】,它能让你更加方便寻找在你附近合你心意的餐饮、服装、百货、美容美发店铺。 <a href="https://open./connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=/oauth2.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect">点击这里绑定</a>技术支持 方倍工作室

在微信中显示如下

点击绑定后,弹出应用授权界面

选择允许,点击

跳转到auth2.php页面,执行

echo $_GET['code']

界面上显示的就是code,这时候通过右上角按钮中的复制链接,得到链接如下:

/oauth2.php?code=00b788e3b42043c8459a57a8d8ab5d9f&state=1

我们成功得到了code了。

注意:如果在绑定的时候出现这样的界面,就说明参数不对,需要回头检查一下参数

3.使用code换取access_token

换取网页授权access_token页面的构造方式:

https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数说明

code:在这里填写为上一步获得的值

构造请求url如下:

https://api./sns/oauth2/access_token?appid=wx8888888888888888&secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&code=00b788e3b42043c8459a57a8d8ab5d9f&grant_type=authorization_code

可以在浏览器中直接执行这条语句:

(

这里是关键,就是通过上面的url获取json数据的代码

$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_HEADER, 0); // 不要http header 加快效率curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');curl_setopt($ch, CURLOPT_TIMEOUT, 15);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); $output = curl_exec($ch);curl_close($ch);$jsondecode = json_decode($output); //对JSON格式的字符串进行编码$array = get_object_vars($jsondecode);//转换成数组

//红色两行是重点,针对https的,让我纠结了一天多

echo $array;

)

得到如下json数据:

{"access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw","expires_in": 7200,"refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A","openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc","scope": "snsapi_userinfo,"}

数据格式解读如下:

于是,我们成功的通过code换取到了access_token,以及refresh_token。

刷新access_token

官方文档中提到了刷新access_token的功能,但这不是必须要做的,初次使用可以先忽略。

url请求方法如下:

https://api./sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

参数说明

构造如下:

https://api./sns/oauth2/refresh_token?appid=wx8888888888888888&grant_type=refresh_token&refresh_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A

在浏览器中执行得到前面同样格式的json数据

4. 使用access_token获取用户信息

请求方法:

https://api./sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

参数说明

构造url如下:

https://api./sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw&openid=oLVPpjqs9BhvzwPj5A-vTYAX3GLc

可以在浏览器中直接执行这条语句:

得到如下json数据:

{"openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc","nickname": "方倍","sex": 1,"language": "zh_CN","city": "Shenzhen","province": "Guangdong","country": "CN","headimgurl": "/mmopen/utpKYf69VAbCRDRlbUsPsdQN38DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qpBBg18/0","privilege": []}

参数解读:

这与我个人的微信信息是一致的

至此,在不输入我的账号及密码的情况下,微信公众账号近宝获得了我的个人信息,这些信息包括昵称、性别、国家、省份、城市、个人头像以及特权列表。

一个完整的OAuth2认证就完成了。

三、详细演示

关注方倍工作室(二维码见下图),回复“授权”,返回图文消息,点击图片

在确认页面,点击“允许”

弹出获取到的结果(图片做了防盗处理,所以不能直接显示出来,可以下载到本地再来显示)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。