微信获取openId时getParameter("code")为null

微信获取openId时,request.getParameter("code")获取的code一直未空,不是为何,求高人指点

1.根据网上的教程:
修改这个地址: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

但是教程中一办都是 String code=request.getParameter("code");获取code,但是连接中的键response_type,那是不是应该用:String code=request.getParameter("response_type")。但是改成后者依然是获取不到。。。。

2.另外 state也是 null

clipboard.png

----------------------------------OAuthServlet.java---------------------------------
public class OAuthServlet extends HttpServlet {

private static final long serialVersionUID=-1847238807216447030L;
@Override
public void doGet (HttpServletRequest request , HttpServletResponse response)

    throws ServletException , IOException{
    System.out.println("run...........");
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    //用户同意授权后,获取code
    String messageId=null;
    **// String code=request.getParameter("code");**
    **String code=request.getParameter("response_type");**
    String state=request.getParameter("state");
    PrintWriter out=response.getWriter();
    out.print("1.OAuthServlet....");
    System.out.println("state:"+state+";code:"+code);
    //用户同意授权、
    if(code==null){
        out.print("2.OAuthServlet....");
    }
    else if (!"authdeny".equals(code)) {
        try{
            out.print("3.OAuthServlet....");
                //获取网页授权access_token
                    WeChatOauth2Token weChatOauth2Token= WeChatUtil.getOauth2AccessToken(code);
                    //网页授权接口访问凭证
                    String accessToken=weChatOauth2Token.getAccessToken();
                    //用户标识
                    String openId=weChatOauth2Token.getOpenId();
                    //获取用户信息
                    SnsUserInfo snsUserInfo=WeChatUtil.getSnsUserInfo(accessToken,openId);
                    //设置传递的参数
                    request.setAttribute("snsUserInfo",snsUserInfo);
                    request.setAttribute("state",state);
                    System.out.println(openId+"---"+code+"---"+state);
                    out.print(openId);
                    out.flush();
                    out.close();
        }catch(Exception e){
            System.out.println("获取openId报错:"+e);
        }
    }
    // 跳转到index.jsp

// request.getRequestDispatcher("").forward(request, response);

}

}

补充:
1.微信运行在云服务器上 地址XXX.XX.X.X:80
2.回调的地址在公司服务器上,有域名www.boiler.org/login2

发现访问微信点击:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=自己平台的访问地址&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
直接进入回调的地址,但是没有进入OAuthServlet,使用request.getRequestURL获取不到请求URL。
但是根据网上的教程直接点这个链接,就好了。是还需要别的操作吗?

阅读 6k
评论
    1 个回答
      撰写回答

      登录后参与交流、获取后续更新提醒

      微信开放生态 相关的技术问题交流平台