问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java基于微信开发,用oauth2静默授权是,回调的url总是执行两次,怎么回事...

发布网友 发布时间: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授权详细步骤如下:
1. 用户关注微信公众账号。
2. 微信公众账号提供用户请求授权页面URL。
3. 用户点击授权页面URL,将向服务器发起请求
4. 服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)
5. 用户同意(scope为snsapi_base时无此步骤)
6. 服务器将CODE通过回调传给微信公众账号
7. 微信公众账号获得CODE
8. 微信公众账号通过CODE向服务器请求Access Token
9. 服务器返回Access Token和OpenID给微信公众账号
10. 微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
11. 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
早孕验血报告单怎么看 测试早孕的方法 联想电脑退货注意什么 公务员裸眼视力必须0.3吗 山东农业大学机电学院科研成果 山东农业大学机械与电子工程学院实验研究 山东农业大学机电工程学院有哪些重点实验室和研究中心? 复发性无菌性脑膜炎的诊断 电子简历自我评价 电子信息技术专业个人简历自我评价 楚留香手游9月7日更新公告 天机阁指点江山功能开放-手游资讯-安族网 oauth2认证后返回#怎么获取accesstoken? - 信息提示 苹果手机屏坏了 为什么不推荐使用oauth2accesstoken 我们公司系统都是自己开发或者比较小众的,做单点登录是不是比较麻烦? iPhone屏幕摔坏了怎么办? 请问,业务系统需要做二开配合单点登录吗?再就是cs客户端的也一样吗? 谁了解苹果手机显示屏坏了怎么办 不同公司开发的系统可以用单点登录进去吗? iPhone xs屏幕坏了要怎么办? 苹果手机的屏幕花屏了怎么办?解决的方法是什么 iPhone手机摔碎了屏幕该怎么办? 湖南瀛寰文化传媒有限公司怎么样? 梦见家里养的小鸡被人打死是怎么回事? 梦见我自己家的鸡死了几只,然后其它的都被拿走? 梦见听人说我家鸡死了是什么意思? 梦见自己家的鸡死了好几只是好是坏 梦见自己养的大红公鸡有病死了三四只扔在厕所好吗? 梦到养的鸡都死了? 梦见家里的母鸡死了一只? 股票交易时需要缴纳哪些费用? 买入股票有哪些费用 买卖股票的时候,通常要交多少税费??? 股票买卖有哪些交易费用? 股票交易的费用有哪些 股票交易费用都有哪些 股票交易费用包括哪些具体内容 在进行股票交易时,都会收取什么费用呢?怎么计算? 股票交易手续费包括哪些呢? 股票交易收取哪些费用 win10电脑上面有没有比较好用的桌面便签? win10windows ink里面没有便筏,怎么添加 糟糠之妻不下堂,是什么意思? 菠萝属于什么类型果实 菠萝是聚花果吗? 为何中国传统讲究“糟糠之妻不下堂”? 当季鲜果菠萝分哪些品种呀,哪种最好吃 贫贱之交不可望,糟糠之妻不下堂,是什么意思 菠萝怎么选? 贫贱之知不可忘,糟糠之妻不下堂.啥意思