1. 程式人生 > >java實現微信登入(SSM)

java實現微信登入(SSM)

提醒:本文章可能需要一定的java基礎,所需jar包也需要自己尋找

效果圖:


掃描後獲取的資料



openid:(微信唯一標識)

headimgurl:頭像

nickname:暱稱

(其他就不列舉啦)

1.註冊微信開放平臺開發者賬號並建立一個或一個以上的網站應用


點選檢視進入下圖

2.把授權回撥域改成自己的

授權回撥域:域名

注:花生殼可以免費註冊域名,並且對映至外網測試


3.一個類搞定登入,LoginAction 


package com.t5.weixin;


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
  
@Controller
@RequestMapping(value = "/WeCat")
  
public class LoginAction {


@RequestMapping(value = "/login")
public void login(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
System.out.println("================>>");
String url = "https://open.weixin.qq.com/connect/qrconnect?";
url += "appid=你的appid";


url += "&redirect_uri=" + URLEncoder.encode("http://169l5w4498.imwork.net:16282/WeCat/callBackLogin", "UTF-8");   //此處和微信會呼叫的域名相同
url += "&response_type=code&scope=snsapi_login";
url += "&state=" + request.getSession().getId() + "#wechat_redirect";
//redirect_uri;指定回撥路徑
try {
response.sendRedirect(url);
} catch (IOException e) {
e.printStackTrace();
}
}


@RequestMapping(value = "/callBackLogin")
public String callBackLogin(HttpServletRequest request, HttpServletResponse response,Model model) {
System.out.println("callBackLogin....");
// return "redirect:../loginSuccess.jsp";
String code = request.getParameter("code");
String state = request.getParameter("state");
System.out.println("code=" + code);
System.out.println("state=" + state);


String url = "https://api.weixin.qq.com/sns/oauth2/access_token?";
url += "appid=你的appid";
url += "&secret=你的secret";


url += "&code=" + code + "&grant_type=authorization_code";


JSONObject jsonObject = this.httpGet(url);
String at = jsonObject.getString("access_token");//獲取微信開放平臺票據號
String openId = jsonObject.getString("openid");

System.out.println("at="+at);

url="https://api.weixin.qq.com/sns/userinfo?access_token="+at+"&openid="+openId;

jsonObject = this.httpGet(url);//以json物件格式返回使用者資料
System.out.println("==============>"+jsonObject);
model.addAttribute("weixin", jsonObject);
//把使用者微信資訊儲存到資料庫(判斷這個資訊是否存在,如果不存在,新增到資料庫表(自動建立一個使用者),如果已存在,直接登入成功)

return "index";
}


/**
* ����get���� http://www.cnblogs.com/QQParadise/articles/5020215.html

* @param url
* @return
*/
public JSONObject httpGet(String url) {
JSONObject jsonResult = null;
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String strResult = EntityUtils.toString(response.getEntity(),"UTF-8");  //此處設定編碼格式
jsonResult = JSON.parseObject(strResult);
System.out.println("strResult=" + strResult);
} else {
System.out.println("*******************");
}
} catch (IOException e) {
e.printStackTrace();
}
return jsonResult;
}
}

此致,呼叫login方法即可