• 微信扫码登录


    package video.controller;

    import video.config.WeChatConfig;
    import video.domain.User;
    import video.dto.JsonData;
    import video.utils.HttpUtils;
    import video.utils.JwtUtil;
    import org.apache.http.HttpResponse;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;

    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.util.Date;
    import java.util.Map;


    /**微信扫描登录功能*
    @Controller
    @RequestMapping("/api/v1/wechat")
    public class WechatController {

    @Autowired
    private WeChatConfig weChatConfig;

    /**获取二维码链接*/
    @GetMapping(value = "login_url")
    @ResponseBody
    public JsonData loginUrl(@RequestParam(value = "access_page",required = true) String accessPage) throws UnsupportedEncodingException {
    String openRedirectUrl = weChatConfig.getOpenRedirectUrl();//回调地址
    String callBackUrl = URLEncoder.encode(openRedirectUrl, "GBK");//进行编码
    String qrCodeUrl = String.format(weChatConfig.getOpenQrcodeUrl(), weChatConfig.getOpenAppId(), callBackUrl, accessPage);
    return JsonData.success(qrCodeUrl);
    }


    /**
    * 信扫码登录,回调地址
    * @param code 微信返回的code
    * @param state 登录时,应用系统当前的页面地址
    * @param response 用于跳转页面
    */
    @GetMapping(value = "/user/callback")
    public void wechatUserCallBack(@RequestParam(value = "code", required = true) String code, String state, HttpServletResponse response) throws IOException {
    //TODO:userService.saveWechatUser(code);
    User user = saveWeChatUser(code);
    if (user != null) {
    String token = JwtUtil.geneJsonWebJwt(user);
    // state 当前用户的页面地址,需要拼接 http:// 这样才不会站内跳转
    response.sendRedirect(state + "?token=" + token + "&head_img=" + user.getHeadImg()
    + "&name=" + URLEncoder.encode(user.getName(),"UTF-8"));
    }
    }

    //************************以下为UserService中方法******************************//

    public User saveWeChatUser(String code) {
    //获取access_token
    String accessTokenUrl = String.format(weChatConfig.getOpenAccessTokenUrl(),
    weChatConfig.getOpenAppId(),weChatConfig.getOpenAppSecret(),code);
    Map<String, Object> baseMap = HttpUtils.doGet(accessTokenUrl);

    if(baseMap == null || baseMap.isEmpty()){
    return null;
    }

    String accessToken = (String)baseMap.get("access_token");
    String openId = (String) baseMap.get("openid");

    User dbUser = getUserByOpenId(openId);
    if (dbUser != null) {
    return dbUser;
    }

    //获取用户基本信息
    String userInfoUrl = String.format(weChatConfig.getOpenUserInfoUrl(),
    accessToken, weChatConfig.getOpenAppId(),weChatConfig.getLanguage());
    Map<String, Object> userInfoMap = HttpUtils.doGet(userInfoUrl);

    if(userInfoMap == null || userInfoMap.isEmpty()){
    return null;
    }

    String openid = (String) userInfoMap.get("openid");
    String nickname = (String)userInfoMap.get("nickname");
    Double sex = (Double) userInfoMap.get("sex");
    String country = (String) userInfoMap.get("country");
    String province = (String) userInfoMap.get("province");
    String city = (String)userInfoMap.get("city");
    String headimgurl = (String) userInfoMap.get("headimgurl");
    String address = new StringBuilder(country).append("||").append(province).append("||").append(city).toString();
    try {
    nickname = new String(nickname.getBytes("ISO-8859-1"),"UTF-8");
    address = new String(address.getBytes("ISO-8859-1"), "UTF-8");
    } catch (Exception e) {
    e.printStackTrace();
    }

    User user = new User();
    user.setName(nickname);
    user.setHeadImg(headimgurl);
    user.setCity(address);
    user.setCreateTime(new Date());
    user.setOpenid(openid);
    user.setSex(sex.intValue());
    saveUser(user);
    return user;
    }

    /**
    * 保存用户
    * @param user
    * @return
    */
    public Integer saveUser(User user) {
    //TODO: int id = userMapper.save(user);
    return user.getId();
    }

    /**
    * 根据openid找用户
    * @param openId
    * @return
    */
    public User getUserByOpenId(String openId) {
    //todo:User user = userMapper.getUserByOpenId(openId);
    return new User();
    }
    }
  • 相关阅读:
    alert
    自定义基类装载数据模块显示到dataGrid
    关于dataGrid查询按钮的实现
    如何查看oracle用户具有的权限和角色 大风起
    LoadRunner使用手册 大风起
    电脑蓝屏了,教你一招保证恢复 大风起
    oracle如何查看当前有哪些用户连接到数据库 大风起
    apache+tomcat整合(动静分离) 大风起
    cdn技术浅谈 大风起
    Tomcat性能优化总结 大风起
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/11124451.html
Copyright © 2020-2023  润新知