文档:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

!!!

微信跟用户没有关系类接口采用了OAUTH2 【客户端模式(Client Credentials Grant)】,而跟用户有关系的接口,采用OAuth2.0服务端【授权码模式(Authorization Code)】来获得用户的openid;另外需要注意的一点就是需要在开发者中心页配置授权回调域名,域名必须与设置的域名在同一个域下

网页授权access_token和普通access_token的区别

1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;
2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。

实现

一般了解了OAUTH2的授权流程做起来就比较简单了,可以使用Apache Oltu 的客户端来简化代码;我使用了一个JAVA实现微信的SDK fastweixin ,实现也比较简单

/**
* 微信公众号控制器
* Created by Irving on 2014/7/6.
*/
@Controller
@RequestMapping("/weixin")
public class WeixinController extends WeixinControllerSupport {
private static final Logger logger = LoggerFactory.getLogger(WeixinController.class); private static final String AppId = "";
private static final String AppSecret = "";
//令牌
private static final String TOKEN = "e_llt";
//设置TOKEN,用于绑定微信服务器
@Override
protected String getToken() {
return TOKEN;
}
//不再强制重写,有加密需要时自行重写该方法[使用安全模式时设置:APPID]
@Override
protected String getAppId() {
return null;
}
//不再强制重写,有加密需要时自行重写该方法[使用安全模式时设置:密钥]
@Override
protected String getAESKey() {
return null;
} //重写父类方法,处理对应的微信消息
@Override
protected BaseMsg handleTextMsg(TextReqMsg msg) {
String content = msg.getContent();
logger.debug("用户发送到服务器的内容:{}", content);
return new TextMsg("hava fun,by irving!");
} @Override
protected BaseMsg handleSubscribe(BaseEvent event) {
UserAPI userAPI =new UserAPI(new ApiConfig(AppId,AppSecret));
logger.info("handleSubscribe json: "+ toJSON(event) + " userAPI : "+toJSON(userAPI));
GetUserInfoResponse user= userAPI.getUserInfo(event.getFromUserName());
String msg ="Hi "+user.getNickname()+" 欢迎关注!";
return new TextMsg(msg);
} @Override
protected BaseMsg handleUnsubscribe(BaseEvent event) {
logger.info("handleUnsubscribe json: "+ toJSON(event));
return super.handleUnsubscribe(event);
} /*1.1版本新增,重写父类方法,加入自定义微信消息处理器
*不是必须的,上面的方法是统一处理所有的文本消息,如果业务觉复杂,上面的会显得比较乱
*这个机制就是为了应对这种情况,每个MessageHandle就是一个业务,只处理指定的那部分消息
*/
@Override
protected List<MessageHandle> initMessageHandles() {
List<MessageHandle> handles = new ArrayList<MessageHandle>();
//handles.add(new MyMessageHandle());
return handles;
} @Override
protected List<EventHandle> initEventHandles() {
List<EventHandle> handles = new ArrayList<EventHandle>();
//handles.add(new MyEventHandle());
return handles;
} /**
* oauth2 授权
* @return
*/
@RequestMapping("/authorize")
public String authorize() {
OauthAPI oauthAPI = new OauthAPI(new ApiConfig(AppId,AppSecret));
String url=oauthAPI.getOauthPageUrl("http://xxx.com/wx/weixin/oauth2", OauthScope.SNSAPI_USERINFO, "ellt");
return "redirect:"+url;
} /**
* 授权成功页
* @param code
* @param state
* @return
*/
@RequestMapping("/oauth2")
public String oauth2(HttpServletRequest request,String code,String state) {
logger.info("weixin oauth2 code :"+code +" state : "+state);
OauthAPI oauthAPI = new OauthAPI(new ApiConfig(AppId,AppSecret));
OauthGetTokenResponse oauthGetToken =oauthAPI.getToken(code);
GetUserInfoResponse oauthUserInfo= oauthAPI.getUserInfo(oauthGetToken.getAccessToken(),oauthGetToken.getOpenid());
request.setAttribute("userInfo", toJSONString(oauthUserInfo));
request.setAttribute("user",oauthUserInfo);
return "weixin/oauth2";
}

!!!集成springmvc 放到github:https://github.com/zhouyongtao/ellt-weixin

Refer:
https://github.com/Wechat-Group/weixin-java-tools

微信 OAuth2 网页授权获取用户信息的更多相关文章

  1. php微信网页授权获取用户信息

    配置回调域名: 1. 引导用户进入授权页面同意授权,获取code 2. 通过code换取网页授权access_token(与基础支持中的access_token不同) 3. 如果需要,开发者可以刷新网 ...

  2. PHP之路——微信公众号授权获取用户信息

    官方文档链接:http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html /** * 获取code */ public f ...

  3. PHP实现微信公众号授权获取用户信息

    class WxAuthModel extends BaseModel { var $appId = APPID; var $appSecret = APPSECRET; /*微信x小程序,获取微信o ...

  4. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  5. 微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  6. php 微信登录 公众号 获取用户信息 微信网页授权

    php 微信登录 公众号 获取用户信息 微信网页授权 先自己建立两个文件: index.php  和  getUserInfo.php index.php <?php //scope=snsap ...

  7. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

  8. 微信网页授权获取用户基本信息--PHP

    现在就说说怎么通过网页授权获取用户基本信息(国家,省,市,昵称)等. 必要条件: 1)公众号认证 2)有网页授权获取用户基本信息的权限接口 注意:最近有朋友说:在公众平台申请的测试号,会出现无法取到用 ...

  9. 【微信公众号开发】【8】网页授权获取用户基本信息(OAuth 2.0)

    前言: 1,在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名. 请注意,这 ...

随机推荐

  1. readystatechange事件

    IE为DOM文档中的某些部分readystatechange事件. 这个事件的目的是提供与文档或元素的加载状态有关的信息,但是这个事件的行为有时候也很难预测. 支持readystatechange事件 ...

  2. 乌龙之Ignoring query to other database问题

    问题现象: [root@zxdb05 ~]# mysql -root -pEnter password: Welcome to the MySQL monitor.  Commands end wit ...

  3. 空指针、NULL指针、零指针

    1. 空指针.NULL指针.零指针 1.1 什么是空指针常量 0.0L.'\0'.3 - 3.0 * 17 (它们都是“integer constant expression”)以及 (void*)0 ...

  4. rpcbind.service启动失败

    新装的服务器,启动rpcbind.service通常失败,执行下面的两个命令经常卡死,一直不返回,也不报错 #systemctl start nfs-server.service #systemctl ...

  5. Ng第七课:正则化与过拟合问题 Regularization/The Problem of Overfitting

    7.1  过拟合的问题 7.2  代价函数 7.3  正则化线性回归 7.4  正则化的逻辑回归模型 7.1  过拟合的问题 如果我们有非常多的特征,我们通过学习得到的假设预测可能能够非常好地适应训练 ...

  6. 最顶尖的12个IT技能

    这差不多是十年前得了,看看今天这些东西哪些死掉了,哪些成长茁壮了,又能有哪些启示. KevinScott是谷歌公司的高级技术经理,也是美国计算机协会专业与教育委 员会的创始成员,他说:“我在硅谷看到的 ...

  7. JQuery设置和去除disabled属性 与 display显示隐藏

    //两种方法设置disabled属性 $('#areaSelect').attr("disabled",true); $('#areaSelect').attr("dis ...

  8. uva1653

    本来想刷道签到题结果被卡住了.这题题意描述有点问题,数字又不一定都是个位数...难道是我英语太差了? digits就表示0~9这几个数?唉,还是太弱了.这题就是用了一个bfs,应该说还是有点意思的,直 ...

  9. 6、GNU makefile工程管理学习的一个例子

    在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...

  10. hdu 4941 map的使用

    http://acm.hdu.edu.cn/showproblem.php?pid=4941 给定N,M和K,表示在一个N*M的棋盘上有K个棋子,给出K个棋子的位置和值,然后是Q次操作,对应的是: 1 ...