微信公众平台开发:通过OAuth2.0方式不弹出授权页面获得用户基本信息

微信公众平台开发:通过OAuth2.0方式不弹出授权页面获得用户基本信息_第1张图片
overview

step1. 配置回调域名

登陆微信公众平台,菜单“设置”→“公众号设置”→功能设置→网页授权域名

微信公众平台开发:通过OAuth2.0方式不弹出授权页面获得用户基本信息_第2张图片
微信公众平台开发.png

【定义】授权回调页面域名:用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。

以上定义似乎会把人带入误区,我一开始被整懵了。配了个回调地址,其实不用,只需要配置授权访问的域名就ok了,这里我配置的是testpcenter.shenbianhui.cn。注意,要保证域名可访问并且要把MP_verify_****.txt放到站点相应的目录下,否则点击“确认”按钮会提示的。

step2. 构造微信用户请求的url

https://open.weixin.qq.com/connect/oauth2/authorize?appid=@APPID&redirect_uri=@redirectUri&response_type=code&scope=snsapi_base&state=1#wechat_redirect

页面URL中的scope=snsapi_base 表示应用授权作用域为 不弹出授权页面,直接跳转,只获取用户openid

这里我配置的redirect_uri是http://testpcenter.shenbianhui.cn/TCP/WeixinJSPay.aspx

step3. 返回回调页面如下

http://testpcenter.shenbianhui.cn/TCP/WeixinJSPay.aspx?code=001bxIJx1Pi1ge0bZpLx1AAAJx1bxIJb&state=1

这里获得到了code

step4. 再使用code获取OpenID

url如下:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=@APPID&secret=@APPSECRET&code=@code&grant_type=authorization_code

返回如下

{
    "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5Y6vey3dgDtFki5C8r6D0E6mSVxxtb8BjLMhb-mCyT_Yg",
    "expires_in": 7200,
    "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5YBkF0ZUH1Ew8Iqea6x_itq13sYDqP1D7ieaDy9u2AHHw",
    "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
    "scope": "snsapi_base"
}

step5. 获取全局Access Token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=@APPID&secret=@APPSECRET

返回结果:

{
    "access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ",
    "expires_in": 7200
}

step6. 最后,使用全局ACCESS_TOKEN和OpenID就可以获取微信用户的详细信息了

https://api.weixin.qq.com/cgi-bin/user/info?access_token=@ACCESS_TOKEN&openid=@OPENID

返回如下:

{
    "subscribe": 1,
    "openid": "o48_Ct5YigM7JDZ6x3Havr4kgzQQ",
    "nickname": "UNION",
    "sex": 1,
    "language": "zh_CN",
    "city": "朝阳",
    "province": "北京",
    "country": "中国",
    "headimgurl": "http://wx.qlogo.cn/mmopen/IYiampJQbm5TEicYAhWAMAicSVDVRGYFAiamB4qyq3mUWmzT1zNQFzYnBMTNmicljmm9GDSX2Hhbs6oMM6BezDLyZibfFrVuZ3D7sW/0",
    "subscribe_time": 1443007389,
    "remark": "",
    "groupid": 0,
    "tagid_list": []
}

至此,成功获得用户基本信息。

这种适合已经有OAuth2.0网页授权的服务号在网页中使用,且不会弹出“微信登录”页面。减少给用户的打扰。

ref:微信网页授权官方文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

你可能感兴趣的:(微信公众平台开发:通过OAuth2.0方式不弹出授权页面获得用户基本信息)