知识点
相关文章
更多最近更新
更多微信OAuth授权获取用户OpenId-JAVA(个人经验)
2019-03-02 00:05|来源: 网路
http://mp.weixin.qq.com/wiki这个是官网的接口文档
微信授权获取用户openid-JAVA
第一步:用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
我的代码如下:GetWeiXinCode
package cn.elve.jxt.weixin.weixin.util; import java.net.URLEncoder; import cn.elve.jxt.weixin.util.Constants; /** * 获取微信的code * @author 宗潇帅 * @修改日期 2014-7-21下午1:01:45 */ public class GetWeiXinCode { public static String GetCodeRequest = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect"; public static String getCodeRequest(){ String result = null; GetCodeRequest = GetCodeRequest.replace("APPID", urlEnodeUTF8(Constants.appId)); GetCodeRequest = GetCodeRequest.replace("REDIRECT_URI",urlEnodeUTF8(Constants.REDIRECT_URI)); GetCodeRequest = GetCodeRequest.replace("SCOPE", Constants.SCOPE); result = GetCodeRequest; return result; } public static String urlEnodeUTF8(String str){ String result = str; try { result = URLEncoder.encode(str,"UTF-8"); } catch (Exception e) { e.printStackTrace(); } return result; } public static void main(String[] args) { System.out.println(getCodeRequest()); } }
替换相应的APPID APPSECRET SCOPE
第二步:通过code换取网页授权access_token
获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
具体做法与上面基本一致。更换相对应的值。需要注意的是code可以写一个Servlet获取。String code = request.getParameter("code");get/post都可以。
这样子就会返回一下json格式数据
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
我们需要对这个json格式数据进行转换。大写自己都是用自己账号获取的数据。所有做了替换。
oAuthInfo = new OAuthInfo();网页授权接口调用凭证5个参数
oAuthInfo.setAccessToken(jsonObject.getString("access_token"));
oAuthInfo.setExpiresIn(jsonObject.getInt("expires_in"));
oAuthInfo.setRefreshToken(jsonObject.getString("refresh_token"));
oAuthInfo.setOpenId(jsonObject.getString("openid"));
oAuthInfo.setScope(jsonObject.getString("scope"));
根据json。获取key,就能得到value。
这就获取到用户的openid。应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)我自己用的作用域为snsapi_userinfo。用户点击跳转页面为
写一个Servlet专门接收传递过来的code。进行相应的操作。
1.OAuthServlet 对code进行access——token的验证
2.GetWeiXinCode的方法调用接口地址。得到相应code。
3.OAuthInfo 返回数据相应的参数的PO类。set/get方法
4.WeiXinUtil添加一个方法 publicOAuth getOAuthInfo(String appid, String secret, String code)得到json格式。并使用JSONObject读取出自己想要的数据。
个人微博 http://weibo.com/u/2205636212
个人博客 http://my.oschina.net/xshuai/blog
个人联盟 http://www.bengbeng.com/?sid=687095
转自:http://my.oschina.net/xshuai/blog/293458
相关问答
更多-
微信公众平台如何获取用户基本信息 java[2022-02-13]
没有办法的,微信把用户信息控制的很严,只会给开发者一个openId,这是用户的微信号加密后的一串唯一标识 -
Java中如何获取微信的openID[2022-10-17]
openid是腾讯接口提供的用户唯一标识,在servlet中直接用request.getParamter("openid");就可以拿到了 -
oauth2.0网页授权微信怎么用java获取code[2023-01-21]
@RequestMapping(value="oauth2/{type}/{appId}/{scope}", method=RequestMethod.GET) public ModelAndView index(@PathVariable String type,@PathVariable String appId,@PathVariable String scope,String openId){ ModelAndView view=new ModelAndView(); if(StringUtils. ... -
java 微信 怎么网页授权获取用户基本信息[2022-06-03]
关于网页授权的两种scope的区别说明 1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面) 2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。 3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才 ... -
java怎么获取微信的openid[2022-03-12]
获取用户openid的操作是关于微信网页开发-微信网页授权部分的,你还是仔细看一下微信开发文档把: https://mp.weixin.qq.com/wiki -
python爬取微信好友运动步数[2022-05-22]
微信分享的url本身就有openid,伪造Request Headers然后拿到返回的信息就行了 -
微信公众平台开发 OAuth2.0网页授权获取用户基本信息[2023-02-09]
在用户没有关注的情况下,还是会产生一个与公众号对应的openid,可以根据这个openid和基础支持的access_token(不是用code换取的access_token)获取到用户的基本信息 用户信息中的subscribe 是为0的,表示没有关注。 -
微信高级接口OAuth2.0网页授权认证和获取用户基本信息有什么区别[2024-02-23]
1)在“获取用户基本信息”接口里得到的客户信息比“OAuth2.0网页授权”接口还多,那么为何还要用“OAuth2.0网页授权”接口呢? 2)如果只要获取OpenID的话,是不是只用“接收普通信息”接口就够呢? 3)在用户没有重新关注的情况之下,用户每次发送消息里的OpenID是否不变? -
不,这是不可能的。 Google只会发布用户的电子邮件地址。 他们的服务器设置为永不再提供任何更多的信息: 请访问OpenID页面以供开发人员了解更多信息: http : //code.google.com/apis/accounts/docs/OpenID.html No, it isn't possible. Google only releases the user's email address. Their server is set up to never give out any more i ...
-
从openid获取用户详细信息(Get user details from openid)[2023-09-24]
请阅读手册: http : //code.google.com/p/lightopenid/wiki/GettingMoreInformation $openid->required = array('namePerson/friendly', 'contact/email'); $openid->optional = array('namePerson/first'); 在调用$ openid-> authUrl()之前! 然后 $openid->validate(); $userinfo = $ope ...