| 
 package com.xingshang.servlet; 
 import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; 
 import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 
 import com.xingshang.util.AuthUtil; 
 import net.sf.json.JSONObject; 
 /** * 回调地址 * @author Administrator * */ //@WebServlet("/callBack") public class CallBackSerclet extends HttpServlet { 
 /** *  */ private static final long serialVersionUID = 1L; 
 private String dbUrl; private String driverClassName; private String userName; private String passWord; 
 private Connection conn =null; private PreparedStatement ps =null; private ResultSet rs = null; 
 //初始化数据库 @Override public void init(ServletConfig config) throws ServletException { 
 //加载驱动 try { this.dbUrl = config.getInitParameter("dbUrl"); this.driverClassName = config.getInitParameter("driverClassName"); this.userName = config.getInitParameter("userName"); this.passWord = config.getInitParameter("passWord"); Class.forName(driverClassName); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 
 
 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
 //第二步:通过code换取网页授权access_token 
 //从request里面获取code参数(当微信服务器访问回调地址的时候,会把code参数传递过来) String code = request.getParameter("code"); 
 System.out.println("code:"+code); 
 //获取code后,请求以下链接获取access_token String url = "; 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
           //通过网络请求方法来请求上面这个接口    JSONObject jsonObject = AuthUtil.doGetJson(url);         System.out.println("==========================jsonObject"+jsonObject);         //从返回的JSON数据中取出access_token和openid,拉取用户信息时用    String token = jsonObject.getString("access_token");    String openid = jsonObject.getString("openid");         // 第三步:刷新access_token(如果需要)     // 第四步:拉取用户信息(需scope为 snsapi_userinfo)    String infoUrl ="https://api.weixin.qq.com/sns/userinfo?access_token=" + token         + "&openid="+ openid        + "&lang=zh_CN";    //通过网络请求方法来请求上面这个接口    JSONObject userInfo = AuthUtil.doGetJson(infoUrl);         System.out.println(userInfo);              //第1种情况:使用微信用户信息直接登录,无需注册和绑定//    request.setAttribute("info", userInfo);    //直接跳转//    request.getRequestDispatcher("/index1.jsp").forward(request, response);              //第2种情况: 将微信与当前系统的账号进行绑定(需将第1种情况和@WebServlet("/callBack")注释掉)    //第一步,根据当前openid查询数据库,看是否该账号已经进行绑定    try{      String nickname = getNickName(openid);      if(!"".equals(nickname)){        //已绑定        request.setAttribute("nickname", nickname);        request.getRequestDispatcher("/index2.jsp").forward(request, response);      }else{        //未绑定        request.setAttribute("openid", openid);        request.getRequestDispatcher("/login.jsp").forward(request, response);      }    } catch(SQLException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }       }   //数据库的查询  publicString getNickName(String openid) throwsSQLException{    String nickName = "";    //创建数据库链接    conn = DriverManager.getConnection(dbUrl, userName, passWord);    String sql = "select nickname from user where openid = ?";    ps = conn.prepareStatement(sql);    ps.setString(1, openid);    rs = ps.executeQuery();    while(rs.next()) {      nickName = rs.getString("nickname");    }         //关闭链接    rs.close();    ps.close();    conn.close();         returnnickName;  }     //数据库的修改(openid的綁定)  publicintupdateUser(String account,String password,String openid) throwsSQLException{         //创建数据库链接    conn = DriverManager.getConnection(dbUrl, userName, passWord);    String sql = "update user set openid = ? where account = ? and password = ?";    ps = conn.prepareStatement(sql);    ps.setString(1, openid);    ps.setString(2, account);    ps.setString(3, password);    inttemp = ps.executeUpdate();         //关闭链接    rs.close();    ps.close();    conn.close();         returntemp;  }     //post方法,用来接受登录请求  @Override  protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {         String account = request.getParameter("account");    String password = request.getParameter("password");    String openid = request.getParameter("openid");         try{      inttemp = updateUser(account, password, openid);              if(temp > 0){        String nickname = getNickName(openid);        request.setAttribute("nickname", nickname);        request.getRequestDispatcher("/index2.jsp").forward(request, response);        System.out.println("账号绑定成功");      }else{        System.out.println("账号绑定失败");      }           } catch(SQLException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }       }   }  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |