文档: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. 使用函数的列 group by 分组需要别名

    问题描述 使用如下截图的SQL统计数据,报1105错误,提示all columns in group by clause should be in the selected column. 给格式化 ...

  2. word粘贴图片+的editor

    公司做的项目需要用到文本上传功能. Chrome+IE默认支持粘贴剪切板中的图片,但是我要粘贴的文章存在word里面,图片多达数十张,我总不能一张一张复制吧? 我希望打开文档doc直接复制粘贴到富文本 ...

  3. Ng第十二课:支持向量机(Support Vector Machines)(一)

    1 目录 支持向量机基本上是最好的有监督学习算法了,从logistic回归出发,引出了SVM,揭示模型间的联系,过渡自然. 2 重新审视logistic回归 Logistic回归目的是从特征学习出一个 ...

  4. tlink平台数据转发 c# 控制台程序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  5. Lombok自定义annotation扩展含Intellij插件

    Lombok简介 Lombok(https://projectlombok.org/)  提供了以注解的形式为java对象增加属性和方法,这使得原来冗长的java源文件变的简洁(不需要再使用ide去生 ...

  6. Windows下Django环境搭建

    总体示意图如下:  Windows下搭建Django环境 1.安装Python版本 2.安装pip工具,一般Python安装都会自动会有这个,在你python安装命令下Scripts文件夹下 3.dj ...

  7. 18、标准IO库详解及实例

    标准IO库是由Dennis Ritchie于1975年左右编写的,它是Mike Lestbain写的可移植IO库的主要修改版本,2010年以后, 标准IO库几乎没有进行什么修改.标准IO库处理了很多细 ...

  8. 转载:Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty("user.dir")的理解

    唉,读取个文件,也就是在项目里面去获得配置文件的目录,然后,变成文件,有事没事,总是出个 FileNotFoundException  系统找不到指定的文件,气死人啦. 还有就是:System.get ...

  9. ASP.NET Web API 框架研究 核心的消息处理管道

    ASP.NET Web API 的核心框架是一个由一组HttpMessageHandler有序组成的双工消息处理管道:寄宿监听到请求接受后,把消息传入该管道经过所有HttpMessageHandler ...

  10. 采用c3p0数据库连接池底层是jdbc的数据库的增删改查

    1.新建dbutils包,里面是JdbcUtils类: package cn.com.xxx.xxx.dbutil; import java.sql.Connection; import java.s ...