微信网页授权,获取微信code,获取access_tocken,获取用户信息
1.配置安全回调域名:
2.用户级授权和静默授权
3.网页授权access_token和普通access_token的区别
4.引导用户进入授权页面同意授权,获取code
js:
var center = {init: function(){.....},enterWxAuthor: function(){var wxUserInfo = localStorage.getItem("wxUserInfo");if (!wxUserInfo) {var code = common.getUrlParameter('code');if (code) {common.getWxUserInfo();center.init();}else{//没有微信用户信息,没有授权-->> 需要授权,跳转授权页面window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+ WX_APPID +'&redirect_uri='+ window.location.href +'&response_type=code&scope=snsapi_userinfo#wechat_redirect';}}else{center.init();}} } $(document).ready(function() { center.enterWxAuthor(); }
getWxUserInfo方法:
/*** 授权后获取用户的基本信息*/getWxUserInfo:function(par){var code = common.getUrlParameter("code");if (par) code = par;$.ajax({async: false,data: {code:code},type : "GET",url : WX_ROOT + "wechat/authorization",success : function(json) {if (json){try {//保证写入的wxUserInfo是正确的var data = JSON.parse(json);if (data.openid) {localStorage.setItem('wxUserInfo',json);//写缓存--微信用户信息 }} catch (e) {// TODO: handle exception }}}});},
5.后台restful-- /wechat/authorization,根据code换取用户信息
/*** 微信授权* @param code 使用一次后失效* * @return 用户基本信息* @throws IOException */@RequestMapping(value = "/authorization", method = RequestMethod.GET)public void authorizationWeixin(@RequestParam String code,HttpServletRequest request, HttpServletResponse response) throws IOException{request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter();LOGGER.info("RestFul of authorization parameters code:{}",code);try {String rs = wechatService.getOauthAccessToken(code);out.write(rs);LOGGER.info("RestFul of authorization is successful.",rs);} catch (Exception e) {LOGGER.error("RestFul of authorization is error.",e);}finally{out.close();}}
/*** 根据code 获取授权的token 仅限授权时使用,与全局的access_token不同* @param code* @return* @throws IOException * @throws ClientProtocolException */public String getOauthAccessToken(String code) throws ClientProtocolException, IOException{String data = redisService.get("WEIXIN_SQ_ACCESS_TOKEN");String rs_access_token = null;String rs_openid = null;String url = WX_OAUTH_ACCESS_TOKEN_URL + "?appid="+WX_APPID+"&secret="+WX_APPSECRET+"&code="+code+"&grant_type=authorization_code";if (StringUtils.isEmpty(data)) {synchronized (this) {//已过期,需要刷新String hs = apiService.doGet(url);JSONObject json = JSONObject.parseObject(hs);String refresh_token = json.getString("refresh_token");String refresh_url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid="+WX_APPID+"&grant_type=refresh_token&refresh_token="+refresh_token;String r_hs = apiService.doGet(refresh_url);JSONObject r_json = JSONObject.parseObject(r_hs);String r_access_token = r_json.getString("access_token");String r_expires_in = r_json.getString("expires_in");rs_openid = r_json.getString("openid");rs_access_token = r_access_token;redisService.set("WEIXIN_SQ_ACCESS_TOKEN", r_access_token, Integer.parseInt(r_expires_in) - 3600);LOGGER.info("Set sq access_token to redis is successful.parameters time:{},realtime",Integer.parseInt(r_expires_in), Integer.parseInt(r_expires_in) - 3600);}}else{//还没有过期String hs = apiService.doGet(url);JSONObject json = JSONObject.parseObject(hs);rs_access_token = json.getString("access_token");rs_openid = json.getString("openid");LOGGER.info("Get sq access_token from redis is successful.rs_access_token:{},rs_openid:{}",rs_access_token,rs_openid);}return getOauthUserInfo(rs_access_token,rs_openid);}/*** 根据授权token获取用户信息* @param access_token* @param openid* @return*/public String getOauthUserInfo(String access_token,String openid){String url = "https://api.weixin.qq.com/sns/userinfo?access_token="+ access_token +"&openid="+ openid +"&lang=zh_CN";try {String hs = apiService.doGet(url);//保存用户信息 saveWeixinUser(hs);return hs;} catch (IOException e) {LOGGER.error("RestFul of authorization is error.",e);}return null;}
6:保存用户信息
参考链接:
微信公众平台官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN
在线接口调试工具:http://mp.weixin.qq.com/debug
最近在学习react,react+flux+react-router 持续集成,一直更新,欢迎交流讨论,欢迎star
个人站点www.twobike.cn,欢迎指导交流....
微信网页授权,获取微信code,获取access_tocken,获取用户信息相关推荐
- 手把手实现微信网页授权和微信支付,附源代码(VUE and thinkPHP)
wechat github 手把手实现微信网页授权和微信支付,附源代码(VUE and thinkPHP) 概述 公众号开发是痛苦的,痛苦在好多问题开发者文档是没有提到的,是需要你猜的. 在开发过程中 ...
- 微信网页授权提示微信服务器异常,微信号提示使用环境异常是怎么回事,如何避免这种封号的情况...
最近很多的营销号都出现了账号异常被封号的情况,就算你微信放哪里什么都不做只要被检测到了,就会提示登录环境异常或者账号使用异常,小编自己的私人号码正常使用的都被提示使用异常了,总结了一下经验为什么会出现 ...
- php 微信网页授权获取微信access_token以及用户基础信息的方法
首先在微信公众平台配置好 官方文档地址 目录 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) ...
- 微信网页授权的2种方式
<微信网页授权>专题 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) 4 第四步 ...
- 微信公众号03 微信网页授权
前提准备 域名 开发微信网页授权时需要一个外网可以访问的域名,因为用户确认进行微信网页授权后微信服务器会通过一个回调URL向开发服务器发送一个回调请求. 开发阶段可以使用一些内网穿透工具来实现,例如: ...
- ajax 微信code获取_ajax 实现微信网页授权登录的方法
项目背景 因为项目采用前后端完全分离方案,所以,无法使用常规的微信授权登录作法,需要采用 ajax 实现微信授权登录. 需求分析 因为本人是一个phper ,所以,微信开发采用的是 EasyWeCha ...
- ajax 微信code获取_微信网页授权——获取code、access_token、openid,及跨域问题解决...
首先在微信开发文档中有提到微信网页授权的操作步骤: 第一步:用户同意授权,获取code 在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中 ...
- Java微信公众号开发微信网页授权之前端传递code方式获取用户信息
本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...
- debug5x 微信_本地调试微信网页授权,获取code
需求:微信网页授权要求配置授权回调页面域名,在没有域名,没有认证公众号的情况下,如何在本地调试呢. 1.申请公众号开发测试账号 体验接口权限表--网页服务--网页授权获取用户基本信息--修改 写上一个 ...
最新文章
- telegram 创建机器人
- 网站推广——网站制作二维码只是为了更好的实现网站推广
- 第三章:lambda表达式
- 36 | 套路篇:怎么评估系统的网络性能?
- camelcase_在Python中将字符串转换为camelCase
- keepalived高可用+nginx负载均衡
- scala java 区别_Scala(和Java)中的类和类型之间有什么区别?
- 链表和数组的区别在哪里?
- 3dm游戏运行包_权势纵横捭阖,战场龙血玄黄!三国志14火爆来袭电脑游戏
- 读书APP的不二备胎,我选了网易蜗牛读书
- 什么样的域名是一级域名?和二级域名有什么关系?
- iphone开蓝牙wifi上网慢_iPhone手机网速慢解决方法
- Ubiquitous Religions——并查集
- [转]Apache Ignite——新一代数据库缓存系统
- Xenu简单使用说明
- 残差分析三要素(补充说明OLS六个条件与残差季节性)
- 屏幕绘画 V1.1 - 一念(VB 绘制 图形)
- SMP、NUMA、MPP体系结构
- “3D游戏之父”考古“诺基亚时代”手游,网友:求支持智能手机!
- 易语言编译和c语言,易语言独立编译的EXE文件问题
热门文章
- python plot画图_1. 用Python画出漂亮的图表
- Python库引用import多种用法及比较
- opengl加载显示3D模型3MF类型文件
- OpenCASCADE:Mac OS X平台使用Code::Blocks构建OCCT
- wxWidgets:wxImage类用法
- boost::variant2模块转换构造抛出相关的测试程序
- boost::program_options::options_description相关的测试程序
- boost::math模块非有限环回的基本测试
- boost::io::ostream_joiner模块相关的测试程序
- GDCM:二个DICOM文件的diff差异的测试程序