代码展示微信OAuth2.0、jsapi 的一些技巧

微信OAuth方法获取用户信息的一些技巧:

当session失效时如何重新获取用户信息以及jsapi 签名

public ModelAndView goCreateOrder(HttpServletRequest request)  {
        String lang=request.getParameter("lang");   //应用自定义的参数
        String code=request.getParameter("code"); //oauth 返回值
        String state=request.getParameter("state");   //oauth 返回值
         ModelAndView mv=new ModelAndView();
    //当前页面的基础URL
          String url=bundler.getString("domain")+"/smp/wxuserorder.do?goCreateOrder";

        try{
    //先判断是否应用参数传进来
            if(lang!=null){
                url=url+"&lang="+lang;
            }
//判断用户是否有session
            WxMpUser wxuser=(WxMpUser)request.getSession().getAttribute("WXMPUSER");
            if(wxuser==null){
                //用户没有正常通过oAuth进来或者session丢失,自动redirect 到oAuth路径,重新登录 

                if(code==null||code.isEmpty()){
                    //构建一个oauth url 
  String redirectUrl=wxMpService.oauth2buildAuthorizationUrl(url,WxConsts.OAUTH2_SCOPE_USER_INFO, "state");
                    logger.debug("----------------redirect url:"+redirectUrl); 

                                          //注意redirect:  之后没有"/" ,意思是redirect  到微信的OAUTH URL 
                    return  new ModelAndView("redirect:"+redirectUrl);
                }
                //二次oauth 回来之后,重新获取AccessCode -> 换取
                WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
              WxMpUser wxMpUser = this.wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
                request.getSession().setAttribute("WXMPUSER", wxMpUser);
            }

            //oauth 回来之后,会带上code 和state 这两个参数,在制造签名的时候需要加上,jsapi签名要求请求的地址和签名的地址一模一样不允许有任何的差异
       
            if(code!=null){
                url=url+"&code="+code;
            }
            if(state!=null){
                url=url+"&state="+state;
            }
            
            logger.debug("----------------jsapi url:"+url);
            WxJsapiSignature signature=this.wxMpService.createJsapiSignature(url);

你可能感兴趣的:(代码展示微信OAuth2.0、jsapi 的一些技巧)