发布网友 发布时间:2022-04-23 02:27
共5个回答
热心网友 时间:2022-04-12 01:30
用户关注微信公众账号;
微信公众账号提供用户请求授权页面URL;
用户点击授权页面URL,将向服务器发起请求;
服务器询问用户是否同意授权给微信公众账号;
用户同意(scope为snsapi_base时无此步骤);
服务器将CODE通过回调传给微信公众账号;
微信公众账号获得CODE;
微信公众账号通过CODE向服务器请求Access Token;
服务器返回Access Token和OpenID给微信公众账号;
微信公众账号通过Access Token向服务器请求用户信息;
服务器将用户信息回送给微信公众账号。
热心网友 时间:2022-04-12 02:48
@RequestMapping("/oauth")
public String oauth(Integer companyId, Integer model, Double latitude, Double longitude, Integer style,
HttpServletRequest request, HttpServletResponse response, HttpSession session) {
if (companyId == 54) {
style = 1;
} else {
style = 0;
}
try {
request.setCharacterEncoding("utf8");
response.setCharacterEncoding("utf8");
} catch (Exception e) {
e.printStackTrace();
}
// 获取到code
String code = request.getParameter("code");
System.out.println("获取用户OPENID时的CODE:" + code);
if (StringUtils.isEmpty(code)) {
System.out.println("获取用户OPENID时的CODE为空!");
return null;
}
if (StringUtils.isEmpty(longitude) || StringUtils.isEmpty(latitude)) {
longitude = 0.0;
latitude = 0.0;
}
// 从session中获取openId信息
String openId = (String) session.getAttribute(companyId + "OPENID");
if (StringUtils.isEmpty(openId)) {
try {
// 根据公司id查询出 token appId appSecret
String appId = null;
String appSecret = null;
CompanyInfo companyInfo = companyInfoService.selectByCompanyId(companyId);
if (!StringUtils.isEmpty(companyInfo)) {
appId = companyInfo.getAppid();
appSecret = companyInfo.getAppsecret();
}
// 静默授权
String get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + "appid=" + appId
+ "&secret=" + appSecret + "&code=CODE&grant_type=authorization_code";
get_access_token_url = get_access_token_url.replace("CODE", code);
JSONObject json = CommonUtil.httpsRequest(get_access_token_url, "GET", null);
if (StringUtils.isEmpty(json)) {
System.out.println("从微信服务器新获取的用户OPENID,返回JSON信息为空");
return null;
}
JSONObject jsonObject = JSONObject.fromObject(json);
try {
openId = jsonObject.getString("openid");
session.setAttribute(companyId + "OPENID", openId);// 放入session
System.out.println("新获取的用户OPENID:" + openId);
return "redirect:fitnessService.do?companyId=" + companyId + "&model=" + model + "&openId=" + openId
+ "&latitude=" + latitude + "&longitude=" + longitude + "&style=" + style;
} catch (Exception e) {
System.out.println("返回JSON信息中获取用户OPENID失败异常");
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
} else {
System.out.println("SESSION中的OPENID:" + openId);
return "redirect:fitnessService.do?companyId=" + companyId + "&model=" + model + "&openId=" + openId
+ "&latitude=" + latitude + "&longitude=" + longitude + "&style=" + style;
}
看看代码思路即可 openID可以缓存 自己研究下吧
热心网友 时间:2022-04-12 04:23
微信访问你的回调地址,你必须给它返回个“SUCCESS”字符串,不然他就会认为你没有接收到信息热心网友 时间:2022-04-12 06:14
我这里也是,请问您解决了么?热心网友 时间:2022-04-12 08:22
微信公众平台OAuth2.0授权详细步骤如下: