首页 > 分享 > 微信 OAuth2 网页授权获取用户信息

微信 OAuth2 网页授权获取用户信息

文档: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

相关知识

促销展板网页UI
基于微信小程序的网上花店售卖系统
【网站项目】鲜花销售微信小程序
微信小程序之植物识别demo(百度开发接口)
【微案例】鲜花店通过微信让营业额“锦上添花”
基于uniapp微信小程序的摄影街拍圈子交流平台
微信订花哪家好?送花微信公众号哪个靠谱?
【关注】微信拉票背后有黑色产业链,藏安全隐患。评论:劝君莫当“手机奴”
微信朋友圈手握花束如何制作
mysql从表中获取用户最高出价

网址: 微信 OAuth2 网页授权获取用户信息 https://m.huajiangbk.com/newsview445561.html

所属分类:花卉
上一篇: 以色列国花银莲花,银莲花的花语是
下一篇: 【绿水青山】三季有花 四季有景—