step1. 配置回调域名
登陆微信公众平台,菜单“设置”→“公众号设置”→功能设置→网页授权域名
【定义】授权回调页面域名:用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。
以上定义似乎会把人带入误区,我一开始被整懵了。配了个回调地址,其实不用,只需要配置授权访问的域名就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