網站微信登錄,做起來挺簡單的,我們做這個,首頁是要去看微信文檔,文檔看懂了,然後理清楚邏輯,怎麼進行綁定貴公司的賬號,業務那塊要理清楚!
首先,微信官方告訴我們,要先去申請網站應用,好吧,去申請一下,幾小時後,審批通過,速度蠻快的!
申請成功,我們就可以拿到AppId, AppSercret,那麼就可以去開心的調接口了!
看看接口文檔,嗯,二維碼是吧,看看URL,簡單,傳參,然後發起請求,好舒服,嗯,按照參往裏面傳,然後出現了二維碼。開心!
第二步,用戶掃描成功,跳到我傳的回調地址,進行授權申請登錄,那麼就可以拿到oppid了,開心,oppid拿到手了,不是就可以進行關聯了,簡單,關聯在一起,這裏要提醒一下,公衆號與小程序的oppid是不一樣的,但是uuid是一樣的,如果要關聯小程序與公衆號,那麼就要再通過token去拿uuid哦,我是偷懶,沒有再去調接口拿uuid了!
又有同學問我了,如果沒有綁定賬號怎麼辦,這個我就不給與回答,你自己動動小腦袋去想,哈哈!還有,token不要總是去調,要緩存起來,每次用戶登錄,你要延遲這個token的時間,博主我是知道怎麼做,就是懶,到時候如果需要用到,我再花幾分鐘改改代碼。
開始寫代碼了!
首先,寫一個WxConfig類,把你的配置寫好,我公開下我的
//微信二維碼
public static final String WX_OA_CODE = "https://open.weixin.qq.com/connect/qrconnect?";
//微信二維碼回調地址
public static final String REDIRECT_URL = "http://127.0.0.1:8888/v1/b/user/wx_login";
//微信網站應用
public static final String APPID="1";
public static final String APPSERCRET="2";
http請求
/**
* dapeng
*/
public class Httprequests {
public static String sendGet (String url,String param) {
String result ="";
BufferedReader in =null;
try {
String urlNameString = url +"?" +param;
System.out.println("發送的鏈接請求:"+urlNameString);
URL reaurl = new URL(urlNameString);
URLConnection connection = reaurl.openConnection();
//設置通用
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//建立實際的連接
connection.connect();
Map<String, List<String>> map = connection.getHeaderFields();
//定義 BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("發送GET請求出現異常!" + e);
e.printStackTrace();
}
// 使用finally塊來關閉輸入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 發送POST方法的請求
* @param url 發送請求的 URL
* @param param 參數
* @return String 所代表遠程資源的響應結果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打開和URL之間的連接
URLConnection conn = realUrl.openConnection();
// 設置通用的請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 發送POST請求必須設置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection對象對應的輸出流
out = new PrintWriter(conn.getOutputStream());
// 發送請求參數
out.print(param);
// flush輸出流的緩衝
out.flush();
// 定義BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("發送 POST 請求出現異常!"+e);
e.printStackTrace();
}
//使用finally塊來關閉輸出流、輸入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}
service層
/**
* 微信登錄 - 二維碼
* @param request
*/
void getCode(HttpServletRequest request);
/**
* 微信登錄
* @param request
*/
OrgSessionEntity wxLogin(HttpServletRequest request);
impl層
/**
* dapeng
*/
@Override
public void getCode(HttpServletRequest request) {
String state = UUID.randomUUID().toString().replaceAll("_","");
RedisUtil.setex("wx_open_state" + request.getSession().getId(), state,600);
StringBuilder url = new StringBuilder();
url.append(WxConfigVar.WX_OA_CODE);
url.append("appid=" + WxConfigVar.APPID);
url.append("&redirect_uri=" + URLEncoder.encode(WxConfigVar.REDIRECT_URL));
url.append("&response_type=code");
url.append("&scope=snsapi_login");
url.append("&state=" + state + "#wechat_redirect");
//打印路徑
System.out.println(url);
Httprequests.sendGet(url.toString(), "");
}
@Override
public OrgSessionEntity wxLogin(HttpServletRequest request) {
String code = request.getParameter("code");
String state = request.getParameter("state");
String stateStr = RedisUtil.get("wx_open_state"+ request.getSession().getId());
if(state.equals(stateStr) || StringUtils.isEmpty(state)){
throw new WxUserException(ErrorCodeEnum.WX_PARAMETER_NON_HAIR.code(),ErrorCodeEnum.WX_PARAMETER_NON_HAIR.msg());
}
//用戶授權成功
if(StringUtils.isNotEmpty(code)){
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WxConfigVar.APPID +"&secret="+WxConfigVar.APPSERCRET+"&code="+code+"&grant_type=authorization_code";
String urln = Httprequests.sendGet(url,"");
System.out.println(urln);
JSONObject jsonObject = JSONObject.parseObject(urln);
String openid = jsonObject.getString("openid");
//已經拿到了openid了,開心起來吧!
}else {
throw new WxUserException(ErrorCodeEnum.WX_PARAMETER_NULL.code(),ErrorCodeEnum.WX_PARAMETER_NULL.msg());
}
}
OK了,就網站微信登錄就完成了,是不是很簡單,半小時就做好了,如果你的領導給你3天時間做個微信登錄,那你就有2天半的時間去學習,去逛貼吧了,美滋滋哈!!!