java微信授权获取code代码怎么获取?

当前访客身份:游客 [
拥有积分:65
解答题中心
微信OAuth授权获取用户OpenId-JAVA(个人经验)
( 11:43:42) &|
&评论(0)&&|
&阅读次数(17000)|
人收藏此文章,
微信OAuth授权获取用户OpenId-JAVA(个人经验)
http://mp./wiki这个是官网的接口文档
微信授权获取用户openid-JAVA
第一步:用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open./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.
import&java.net.URLE
import&cn.elve.jxt.weixin.util.C
&*&获取微信的code
&*&@author&宗潇帅
&*&@修改日期&下午1:01:45
public&class&GetWeiXinCode&{
&&&&public&static&String&&GetCodeRequest&=&"https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
&&&&public&static&String&getCodeRequest(){
&&&&&&&&String&result&=&
&&&&&&&&GetCodeRequest&&=&GetCodeRequest.replace("APPID",&urlEnodeUTF8(Constants.appId));
&&&&&&&&GetCodeRequest&&=&GetCodeRequest.replace("REDIRECT_URI",urlEnodeUTF8(Constants.REDIRECT_URI));
&&&&&&&&GetCodeRequest&=&GetCodeRequest.replace("SCOPE",&Constants.SCOPE);
&&&&&&&&result&=&GetCodeR
&&&&&&&&return&
&&&&public&static&String&urlEnodeUTF8(String&str){
&&&&&&&&String&result&=&
&&&&&&&&try&{
&&&&&&&&&&&&result&=&URLEncoder.encode(str,"UTF-8");
&&&&&&&&}&catch&(Exception&e)&{
&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&return&
&&&&public&static&void&main(String[]&args)&{
&&&&&&&&System.out.println(getCodeRequest());
替换相应的APPID APPSECRET SCOPE
第二步:通过code换取网页授权access_token
获取code后,请求以下链接获取access_token:&
https://api./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读取出自己想要的数据。
个人微博 &
个人博客 &
个人联盟 & &&
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:(#换为@))微信开发笔记——微信网页登录授权,获取用户信息 - 推酷
微信开发笔记——微信网页登录授权,获取用户信息
最近做了一个公司的微信的公众号,对微信的流程清楚了不少,这里记录下,算不上多高深的,只希望能帮助到一部分人吧。
我们公司的测试微信公众号:NPCgo 可以感受下,哈哈~~
闲话少说,开始:
首先大家要看下微信的API文档。
微信网页授权,获取用户的微信官方API文档地址:
微信认证流程(我自己简称三次握手):
1、用户同意授权,获取code
2、通过code换取网页授权access_token,用户openId等信息
3、通过access_token和用户的openId获取该用户的用户信息
经过研究,我这边的思路是:让所有页面都继承同一个页面,在这个页面里做微信登录授权处理,
因为第一步必须要经过微信的登录授权,不能网页后端请求,所以先要经过用户同意,通过页面网页请求组装的微信请求链接。请求该链接,
获取code后,后端模拟请求。获取用户信息。
微信三次握手的方法(代码)
public class WeiXinOAuth
/// &summary&
/// 获取微信Code
/// &/summary&
/// &param name=&appId&&&/param&
/// &param name=&appSecret&&&/param&
/// &param name=&redirectUrl&&&/param&
public string GetWeiXinCode(string appId,string appSecret,string redirectUrl)
Random r = new Random();
//微信登录授权
//string url = &https://open./connect/qrconnect?appid=& + appId + &&redirect_uri=& + redirectUrl +&&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect&;
//微信OpenId授权
//string url = &https://open./connect/oauth2/authorize?appid=& + appId + &&redirect_uri=& + redirectUrl +&&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect&;
//微信用户信息授权
string url = &https://open./connect/oauth2/authorize?appid=& + appId + &&redirect_uri=& + redirectUrl + &&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect&;
/// &summary&
/// 通过code获取access_token
/// &/summary&
/// &param name=&appId&&&/param&
/// &param name=&appSecret&&&/param&
/// &param name=&code&&&/param&
/// &returns&&/returns&
public Model.WeiXinAccessTokenResult GetWeiXinAccessToken(string appId,string appSecret,string code)
string url = &https://api./sns/oauth2/access_token?appid=&+appId+&&secret=&+appSecret+
&&code=&+ code + &&grant_type=authorization_code&;
string jsonStr = Tools.GetHttpRequest(url);
Model.WeiXinAccessTokenResult result = new Model.WeiXinAccessTokenResult();
if (jsonStr.Contains(&errcode&))
Model.WeiXinErrorMsg errorResult = new Model.WeiXinErrorMsg();
errorResult=JsonHelper.ParseFromJson&Model.WeiXinErrorMsg&(jsonStr);
result.ErrorResult = errorR
result.Result = false;
Model.WeiXinAccessTokenModel model = new Model.WeiXinAccessTokenModel();
model = JsonHelper.ParseFromJson&Model.WeiXinAccessTokenModel&(jsonStr);
result.SuccessResult =
result.Result = true;
/// &summary&
/// 拉取用户信息
/// &/summary&
/// &param name=&accessToken&&&/param&
/// &param name=&openId&&&/param&
/// &returns&&/returns&
public Model.WeiXinUserInfoResult GetWeiXinUserInfo(string accessToken,string openId)
string url = &https://api./sns/userinfo?access_token=&+accessToken+&&openid=&+openId+&?=zh_CN&;
string jsonStr = Tools.GetHttpRequest(url);
Model.WeiXinUserInfoResult result = new Model.WeiXinUserInfoResult();
if(jsonStr.Contains(&errcode&))
Model.WeiXinErrorMsg errorResult = new Model.WeiXinErrorMsg();
errorResult = JsonHelper.ParseFromJson&Model.WeiXinErrorMsg&(jsonStr);
result.ErrorMsg = errorR
result.Result = false;
Model.WeiXinUserInfo userInfo = new Model.WeiXinUserInfo();
userInfo = JsonHelper.ParseFromJson&Model.WeiXinUserInfo&(jsonStr);
result.UserInfo = userI
result.Result = true;
所需要的对应实体类
WeiXinAccessTokenResult 类:
public class WeiXinAccessTokenResult
public WeiXinAccessTokenModel SuccessResult { get; set; }
public bool Result { get; set; }
public WeiXinErrorMsg ErrorResult { get; set; }
WeiXinAccessTokenModel类:
/// &summary&
/// 通过code获取access_token 请求成功的实体
/// &/summary&
public class WeiXinAccessTokenModel
/// &summary&
/// 接口调用凭证
/// &/summary&
public string access_token { get; set; }
/// &summary&
/// access_token接口调用凭证超时时间,单位(秒)
/// &/summary&
public int expires_in { get; set; }
/// &summary&
/// 用户刷新access_token
/// &/summary&
public string refresh_token { get; set; }
/// &summary&
/// 授权用户唯一标识
/// &/summary&
public string openid { get; set; }
/// &summary&
/// 用户授权的作用域,使用逗号(,)分隔
/// &/summary&
public string scope { get; set; }
WeiXinErrorMsg类:
/// &summary&
/// 微信错误访问的情况
/// &/summary&
public class WeiXinErrorMsg
/// &summary&
/// 错误编号
/// &/summary&
public int errcode { get; set; }
/// &summary&
/// 错误提示消息
/// &/summary&
public string errmsg { get; set; }
WeiXinUserInfoResult类:
/// &summary&
/// 获取微信用户信息
/// &/summary&
public class WeiXinUserInfoResult
/// &summary&
/// 微信用户信息
/// &/summary&
public WeiXinUserInfo UserInfo { get; set; }
/// &summary&
/// &/summary&
public bool Result { get; set; }
/// &summary&
/// 错误信息
/// &/summary&
public WeiXinErrorMsg ErrorMsg { get; set; }
WeiXinUser 类 :
public class WeiXinUserInfo
/// &summary&
/// 用户的唯一标识
/// &/summary&
public string openid { get; set; }
/// &summary&
/// 用户昵称
/// &/summary&
public string nickname { get; set; }
/// &summary&
/// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
/// &/summary&
public string sex { get; set; }
/// &summary&
/// 用户个人资料填写的省份
/// &/summary&
public string province { get; set; }
/// &summary&
/// 普通用户个人资料填写的城市
/// &/summary&
public string city { get; set; }
/// &summary&
/// 国家,如中国为CN
/// &/summary&
public string country { get; set; }
/// &summary&
/// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
/// &/summary&
public string headimgurl { get; set; }
/// &summary&
/// 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
/// &/summary&
public string[] privilege { get; set; }
所有的页面,都会继承BasePage页面,这样方便处理,继承这个页面的其他页面就不需要考虑认证的问题了。
public partial class BasePage : System.Web.UI.Page
public BasePage()
this.Page.Load += new EventHandler(Page_Load);
this.Page.Unload += new EventHandler(Page_UnLoad);
protected void Page_Load(object sender, EventArgs e)
protected void Page_UnLoad(object sender, EventArgs e)
private void DoWith()
//用户尚未登录
if (BLL.UserInfoManager.Instance().GetUserId() &= 0)
//获取appId,appSecret的配置信息
string appId = System.Configuration.ConfigurationSettings.AppSettings[&appid&];
string appSecret = System.Configuration.ConfigurationSettings.AppSettings[&secret&];
Core.WeiXinOAuth weixinOAuth = new WeiXinOAuth();
//微信第一次握手后得到的code 和state
string _code = Cmn.Request.Get(&code&);
string _state = Cmn.Request.Get(&state&);
if (_code == && || _code == &authdeny&)
if (_code == &&)
//发起授权(第一次微信握手)
string _authUrl = weixinOAuth.GetWeiXinCode(appId, appSecret, HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()));
HttpContext.Current.Response.Redirect(_authUrl, true);
{ // 用户取消授权
HttpContext.Current.Response.Redirect(&~/Error.html&, true);
//获取微信的Access_Token(第二次微信握手)
Core.Model.WeiXinAccessTokenResult modelResult = weixinOAuth.GetWeiXinAccessToken(appId, appSecret, _code);
//获取微信的用户信息(第三次微信握手)
Core.Model.WeiXinUserInfoResult _userInfo = weixinOAuth.GetWeiXinUserInfo(modelResult.SuccessResult.access_token,modelResult.SuccessResult.openid);
//用户信息(判断是否已经获取到用户的微信用户信息)
if (_userInfo.Result && _userInfo.UserInfo.openid != &&)
//保存获取到的用户微信用户信息,并保存到数据库中
GameTradingByPublic.ExceptionLog.writeFile(2, &获取用户OpenId失败&);
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致微信公众平台--服务号/订阅号--网页授权获取用户基本信息
微信公众平台--服务号/订阅号--网页授权获取用户基本信息
[摘要:民圆Api文档: http://mp./wiki/17/c0f37d13d5d2c37b468d75.html 道的很清晰,能够细致看看。 1.登录微疑"大众,"仄台 https://mp./advanced/advanced?action=devt=advanced/devtoken=lan]
官方Api文档:
http://mp./wiki/17/c0f37d13d5d2c37b468d75.html
说的很清楚,可以仔细看看。
1.登录微信公众平台
https://mp./advanced/advanced?action=dev&t=advanced/dev&token=&lang=zh_CN
2.点击开发者中心
填写授权回调页面域名,我写的是我本机的局域网IP地址
然后点击确定。
3.诱导用户微信打开授权页面:
https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
用户会看到如下类似页面:
如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
code说明 :
code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
4.通过code获取网页授权access_token
在上一步获取code后,请求以下链接获取access_token:
https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
参数是否必须说明
公众号的唯一标识
公众号的appsecret
填写第一步获取的code参数
grant_type
填写为authorization_code
正确时返回的JSON数据包如下:
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
access_token
网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
用户授权的作用域,使用逗号(,)分隔
5.拉取用户信息
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
http:GET(请使用https协议)
https://api./sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token
网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
用户的唯一标识
返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
正确时返回的JSON数据包如下:
"openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl":
"/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[
"PRIVILEGE1"
"PRIVILEGE2"
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
后端简单代码如下:
    /**
* 获取微信登录用户信息
* @param code
* @param request
* @param response
* @throws IOException
* @throws ServletException
@RequestMapping(value= "vote/getCode")
public void getCode(String code,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{
System. out.println(code);
//https://open./connect/oauth2/authorize?appid=XXXXXXX&redirect_uri=http://192.168.246.172/business/vote/getCode.do&response_type=code&scope=snsapi_userinfo &state=STATE#wechat_redirect
//格式https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
//1.通过code换取网页授权access_token的URL连接
tokenUrl = "https://api./sns/oauth2/access_token?appid=" +WeixinConf.AppID+"&secret="+WeixinConf. AppSecret+ "&code="+code+ "&grant_type=authorization_code";
//System.out.println("拼接后的token连接:" + tokenUrl);
//获取access_token
token = WebUtils. getUrlReturnData(tokenUrl);
access_token = token.substring( token.indexOf( "":"") + 3 , token.indexOf( "",""));
openId = token.substring( token.indexOf( "openid":"")+9,token .indexOf("","scope"" ));
//2.获取用户信息 请求格式:https://api./sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
String userUrl = "https://api./sns/userinfo?access_token=" +access_token +"&openid=" +openId +"&lang=zh_CN" ;
String userInfo = WebUtils. getUrlReturnData(userUrl);
nickname = userInfo.substring(userInfo.indexOf("nickname":"" )+11,userInfo.indexOf("","sex" ));
sex = userInfo.substring(userInfo.indexOf("sex":" )+5,userInfo.indexOf(","language":"" ));
headimgurl = userInfo.substring(userInfo.indexOf(""headimgurl":"" )+14,userInfo.indexOf("","privilege"" ));
System. out.println( " token = " + token);
System. out.println( "access_token = " + access_token );
System. out.println( "openID = "+ openId);
System. out.println( "userInfo = " + userInfo);
System. out.println( "nickname = " + nickname);
System. out.println( "sex = " + sex);
System. out.println( "imgurl = " + headimgurl);
if(code == null
|| "".equals(code) || token == null || "".equals(token ) || userInfo == null || "".equals(userInfo)){
//登录失败,用户重新登录,从新拉取用户信息
String url = "https://open./connect/oauth2/authorize?appid=wxfb42d3d1c8d4c11b&redirect_uri=http://192.168.246.172/business/vote/getCode.do&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect" ;
response.sendRedirect(url);
//登录成功后要跳到的页面
response.sendRedirect( "http://192.168.246.172/business/index.html" );
测试结果图如下:
1.此为网页授权获取用户基本信息,必须为服务号,订阅号是没有权限通过网页授权来获取用户基本信息的
2.必须是80端口
3.用户授权获取code连接必须在微信客户端打开
4.开发者中心的服务器配置可以不用启用,最后我还是成功的获取到了用户的信息
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊

我要回帖

更多关于 php微信授权登陆代码 的文章

 

随机推荐