文档: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. js,javascript,获取地址栏参数

    function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...

  2. 微信 公众号平台 与 开放平台 获取用户信息 scope snsapi_login

    微信公众号(公众平台) 和 微信开放平台 是两码事.公众号(公众平台)获取的scope只包括两种:snsapi_base 和snsapi_userinfo,前者是静默获取,用户无感知:后者是需要用户确 ...

  3. html的那些小小细节

    1.get post方式提交的不同 get:数据放在url的后面,用?连接                        会在客户端保留缓存信息,不安全                        ...

  4. DDR II中的延时参数

     CL (CAS latency) CL是从读命令发出到有效数据到DDR端口的延时,以时钟为单位.下图分别表示CL = 3和CL = 4的两种情况, 如果读命令在第n个时钟周期发出,CL = m,则读 ...

  5. poj 2240 Arbitrage(最短路问题)

    Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit o ...

  6. 25个Linux相关的网站

    下面是25个最具有影响力,也是最重要的Linux网站,这些网站提供了Linux的分发包,软件,文件,新闻,以及其它所有的关于Linux的东西.关于Linux的分发包历史,可以看看本站的这篇文章< ...

  7. Forward团队-爬虫豆瓣top250项目-需求分析

    一. 需求:1.爬取豆瓣电影top250. 2.获取电影名称,排名,分数,简介,导演,演员. 3.将爬取到的数据保存,以便随时查看. 3.可以将获取到的数据展示给用户. 二. 参考: 豆瓣api参考资 ...

  8. (树状数组+离散化)lines--hdu --5124

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 lines Time Limit: 5000/2500 MS (Java/Others)    Memor ...

  9. String、Stringbuffer、Stringbuilder三者之间的区别

    1.首先说运行速度,速度由快到慢排列:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuil ...

  10. Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)

    奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ...