思路分析:

1.创建测试账号并且配置测试账号的授权回调域名。

2.由前端发起授权请求,微信收到请求后(若是首次打开,并且未关注公众号,微信会弹出授权页,提示用户授权)将重定向到请求url中配置的redirect_uri地址,并返回code和state参数。

3.将code传入后台服务端,获取网页授权access_token,再通过网页授权access_token获取用户基本信息及openid,返回用户对象。

1.创建测试账号

首先我们需要登录微信公众号的管理平台,如果没有账号的需要先注册账号,并填写认证信息。微信的网页授权主要是用于服务号的开发,因此我们需要申请的公众号类型为服务号。

完成上面的操作之后我们登录微信公众平台,在左侧菜单列表中选择下面的开发->开发者工具->公众平台测试账号,之后我们就会进入一个测试账号管理界面。

我们可以看到测试账号已经有appID和appsecret了,这个appID和秘钥跟真正的公众号好的appID是不一样的。所以我们对这个账号进行测试并不会影响真实的公众号。

2.配置测试账号

测试账号需要进行一些配置才能和我们的程序相结合,我们测试的主要是网页授权,因此我们选择在最下方体验接口权限表中选择->网页服务->网页账号-网页授权获取用户基本信息。

点击修改,然后在里面设置授权回调页面的域名,注意:这里填写的是不加http://或https://协议的域名,也不用把页面的完整url写在里面,只要页面url前的域名就行了,例如:你授权的回调页是localhost/indedx/auth.html,你只需要将localhost写在这里就行了。另外,这个域名必须得是外网能访问的域名,因为授权后微信服务器会请求这个域名下的回调页面,并返回回调的授权参数。

3. 发起授权请求

授权请求是用户在访问网页的时候就要发起的,一般是配置在页面加载的时候,请求链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http%3A%2F%2Flocalhost&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect 将链接中的appid和redirect_uri参数换成自己的配置即可,注意redirect_uri的参数需要进行url加密处理,scope参数的值必须是snsapi_userinfo。

关于请求链接的其他相关信息请查看微信开发者文档,微信网页授权,测试的时候必须先关注该测试公众号,否则无法发送授权请求,真实公众号不会出现该问题。

4.java程序配置

在java中我们需要通过授权拿到的code请求微信服务器获取网页授权access_token再通过网页授权access_token获取微信授权用户的基本信息,因此我们也要在java程序中配置appID和appsecret。

import com.alibaba.fastjson.JSONObject;/*** Created by Viking on 2019/6/19* 微信公众号网页授权工具类*/
public class WeChatUtil {//公众号唯一标识public static final String APPID = "your appID";//公众号的appsecretpublic static final String APPSECRET = "your appSecret";//获取网页授权accessToken的接口public static final String GET_WEB_ACCESSTOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";//获取用户信息的接口public static final String GET_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";/*** 获取网页授权的AccessToken凭据* @return*/public static JSONObject getWebAccessToken(String code) {String result = null;try {result = HttpRequestUtil.doGet(GET_WEB_ACCESSTOKEN_URL.replace("APPID", APPID).replace("SECRET", APPSECRET).replace("CODE", code));} catch (Exception e) {e.printStackTrace();}JSONObject json = JSONObject.parseObject(result);return json;}/*** 获取用户信息**/public static JSONObject getUserInfo(String accessToken,String openId) {String result = null;try {result = HttpRequestUtil.doGet(GET_USERINFO_URL.replace("ACCESS_TOKEN", accessToken).replace("OPENID",openId));} catch (Exception e) {e.printStackTrace();}JSONObject json = JSONObject.parseObject(result);return json;}
}

编写接口,通过授权code返回用户对象

import com.dlbz.model.User;
import com.dlbz.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** Created by Viking on 2019/6/18* 微信用户*/
@Controller
@RequestMapping("user")
public class UserController {@Autowiredprivate UserService service;@RequestMapping("auth")@ResponseBodypublic Object auth(String code, String state){User user = service.auth(code,state);return user;}
}

业务层代码,封装用户基本信息对象:

import com.alibaba.fastjson.JSONObject;
import com.dlbz.model.User;
import com.dlbz.service.UserService;
import com.dlbz.util.HttpRequestUtil;
import com.dlbz.util.WeChatUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.*;/*** Created by Viking on 2019/6/18* 微信用户-授权*/
@Service
public class UserServiceImp implements UserService {private Logger log = LoggerFactory.getLogger(this.getClass());@Overridepublic User auth(String code,String state) {log.info("coed:"+code+"\tstate:"+state);Map<String,Object> map = new HashMap<>();if(code!=null) {//1.通过code来换取access_tokenJSONObject json = WeChatUtil.getWebAccessToken(code);//获取网页授权access_token凭据String webAccessToken = json.getString("access_token");if (StringUtils.isBlank(webAccessToken)) throw new SimpleException("用户授权","授权失败");//获取用户openidString openid = json.getString("openid");//2.通过access_token和openid拉取用户信息JSONObject userInfo = WeChatUtil.getUserInfo(webAccessToken, openid);//获取json对象中的键值对集合Set<Map.Entry<String, Object>> entries = userInfo.entrySet();for (Map.Entry<String, Object> entry : entries) {//把键值对作为属性设置到mmap中map.put(entry.getKey(),entry.getValue());}log.info(map);User user = new User();/** 封装user对象并存入数据库*/return user;}return null;}
}

微信公众号开发-网页授权——配置测试账号相关推荐

  1. vue 微信公众号开发 网页授权 配置业务域名

    服务号! 服务号! 服务号! 1.官网下载xxx.txt文件 2.将文件放入vue项目的static文件夹中(注意不是src的static) 3.输入域名网址www.xxx.com/static/xx ...

  2. 微信公众号 用户绑定 php,微信公众号开发——网页授权实现简化用户绑定

    本教程的学习条件: 了解微信公众号开发的基本知识.已经申请了微信公众号并设置了开发模式等.如果不了解,请先到微信官方平台学习 需要服务器端开发的基本技能,本文主要讲解流程,基本不涉及具体开发语言. 首 ...

  3. 微信公众号开发之授权

    微信公众号开发之授权 开发前准备 首先准备自己的服务器资源,已有服务器的请忽略服务器资源. 我这里演示新浪云服务器环境搭建:(新注册号有免费云豆可用) 服务器资源(https://sae.sina.c ...

  4. 微信公众号-测试号-网页授权

    微信公众号-测试号-网页授权 自己摸索几天,总算搞清楚了 第一步 登录微信公众号平台,开发者工具菜单进入公众平台测试账号 第二步 设置网页帐号 网页授权获取用户基本信息的域名,测试号是可以用ip和域名 ...

  5. 微信公众号的网页授权如何在本地调试?

    调试微信公众号的网页授权时,要填写网页授权域名(如图1),否则授权的时候会提示redirect_uri参数错误(图2),可是我得在localhost先调试成功才能上传到实际的网站上吧,可是这里不支持l ...

  6. 微信公众号 服务器配置 token 测试,微信公众号开发:基本配置Token验证简单事件回复...

    公众号配置的URL就是你自己服务器上验证TOKEN的方法的地址 比如我验证TOKEN的方法访问地址是http://www.aaa.cn/wx_api.php 那我公众号配置的URL就要填http:// ...

  7. 微信公众号开发教程[002]-配置

    一.注册微信公众号 微信公众号官方入口https://mp.weixin.qq.com注册公众号,注册过程中,类型选择可能是新手比较迷惑的地方.微信公众号分为订阅号和服务号(还有个企业号,似乎用的人不 ...

  8. 微信公众号开发之授权登录(前端vue篇)

    前序: 由于之前一直是后端直接调用微信授权后,拿到相关信息后再返回给我(就是以前的前后端不分离),所以对微信公众号开发的微信授权登录还一直处于懵逼情况,直到今天有一个项目需要前后端分离,要前端主动去获 ...

  9. 微信公众号第三方网页授权

    如果用户在微信公众号客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域名的说明 1.在微信公众号请求用户网页授权之前,开发者需要先到公众 ...

最新文章

  1. 你的 Redis 为什么变慢了?
  2. (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
  3. linux命令-- 抓包
  4. nodejs+express整合kindEditor实现图片上传 - 木子丰咪咕晶 - 开源中国
  5. VC++文件监控(一) ReadDirectoryChangesW
  6. iou画 yolov3_专栏 | 【从零开始学习YOLOv3】4. YOLOv3中的参数进化
  7. 【Codeforces - 找不到题号】三元环计数(bitset优化,压位)
  8. LeetCode 9. 回文数
  9. python 密码学计算_python 密码学示例——理解哈希(Hash)算法
  10. lodash和debounce
  11. node.js(五)项目创建管理
  12. 最佳的46+14款免费软件
  13. bochs运行xp_bochs xp镜像完整版
  14. matlab中fmincon函数求最大值,matlab fmincon函数用法
  15. 北大计算机图灵班,北大2019“图灵班”计划招60人,在北大什么条件才能进图灵班?...
  16. Drools7中的万能函数accumulate
  17. Linux攻关之基础模块十二 进程相关
  18. html设置三号字体是多少px,CSS 中二号字体是多少 px?
  19. 烤仔建工 | 来红浪漫和漂亮姐姐Yanelis K歌吧
  20. 中国蚁剑安装使用教程

热门文章

  1. 海康X86平台智能相机的使用注意事项
  2. 金字塔原理学习笔记1
  3. Mac 地址与 IP 地址有什么区别?
  4. Nutanix荣膺 “超融合基础架构领导者” 称号
  5. canon 打印机 android,Canon PRINT Inkjet/SELPHY
  6. matlab simulink波特图,用simulink画波特图
  7. python中ulr关键词的转换,“E5 82”怎么转换成中文
  8. Your “Flamingo“ is My “Bird”:Fine-Grained or Not
  9. JIRA 怎么设置成中中文
  10. 网络爬虫技术的设计与实现