一、参考文档:微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
关于网页授权的两种scope的区别说明
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
二、流程
1、调起微信服务
该部操作一般由前端调起,这里只展示触发的链接生成方式:
scope为snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
scope为snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
微信回调地址:
String backUrl = "https://******/entrance/yyapis/receiveCodeFromWeChat?param=aaaa";
尤其注意:跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。
回调地址用来接收微信返回信息,成功/失败状态以及详细信息。回调地址中可以设置参数,然后经过加密(加密方式:URLEncoder.encode(backUrl));
页面将跳转至 redirect_uri/?code=CODE&state=STATE。
//使用返回的CODE做静默授权页面地址 (重定向)
获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
正确时返回的JSON数据包如下:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
2、如果用户之前已经授权,则通过静默方法获取用户的openid就可以知道用户的身份,可以进行下一步的逻辑操作;如果用户是第一次授权,则需要先获取用户的信息。
重定向
https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + "APPID" + "&redirect_uri=" + URLEncoder.encode(backUrl) + "&esponse_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect";
正确时返回的JSON数据包如下:
{
"openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}