Browse Source

新增用户授权接口,调整手机号登陆接口

刘韬 5 years ago
parent
commit
5c62c0efc2

+ 86 - 22
PacsOnline_Wechat_Doctor/src/main/java/com/zskk/controller/WxaUserApiController.java

@@ -42,9 +42,7 @@ public class WxaUserApiController extends WxaController {
 		if (!apiResult.isSucceed()) {
 //			JSONObject object = new JSONObject();
 //			object.put("sessionId", sessionId);
-			JSONObject object = JSON.parseObject(apiResult.getJson());
-			ResultBean resultBean = new ResultBean(object.getIntValue("errcode"),apiResult.getStr("errmsg"));
-			
+			ResultBean resultBean = new ResultBean(apiResult.getInt("errcode"),apiResult.getStr("errmsg"));
 			renderJson(resultBean);
 			return;
 		}
@@ -123,29 +121,95 @@ public class WxaUserApiController extends WxaController {
 		// 服务端解密用户信息
 		ApiResult apiResult = wxaUserApi.getUserInfo(sessionKey, encryptedData, iv);
 		if (!apiResult.isSucceed()) {
-			String phone = apiResult.getStr("purePhoneNumber");
-			if (StrKit.isBlank(phone)) {
-				renderJson(ErrorConstant.ERROR_PHONE_BLANK);
-				return;
-			}
-			Doctors doctors = Doctors.dao.findFirst("select * from doctors where phone=?", phone);
-			if (doctors == null) {
-				renderJson(ErrorConstant.ERROR_DOCTOR_NOT_FIND);
-				return;
-			}
-			DoctorsWechat doctorsWechat = DoctorsWechat.dao.findFirst("select * from doctors_wechat where wxa_openid=?", sessionResult.get("openid"));
-			doctorsWechat.setDoctorId(doctors.getId());
-			doctorsWechat.update();
-			LoginBean loginBean = new LoginBean();
-			loginBean.setSessionId(sessionId);
-			loginBean.setDoctorBean(doctors);
-			renderJson(new ResultBean(loginBean));
+			ResultBean resultBean = new ResultBean(apiResult.getInt("errcode"),apiResult.getStr("errmsg"));
+
+			renderJson(resultBean);
 			return;
 		}
 		// 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性
 		// 同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
-		String unionId = apiResult.get("unionId");
-		renderJson("{}");
+//		String unionId = apiResult.get("unionId");
+		String phone = apiResult.getStr("purePhoneNumber");
+		if (StrKit.isBlank(phone)) {
+			renderJson(ErrorConstant.ERROR_PHONE_BLANK);
+			return;
+		}
+		Doctors doctors = Doctors.dao.findFirst("select * from doctors where phone=?", phone);
+		if (doctors == null) {
+			renderJson(ErrorConstant.ERROR_DOCTOR_NOT_FIND);
+			return;
+		}
+		DoctorsWechat doctorsWechat = DoctorsWechat.dao.findFirst("select * from doctors_wechat where wxa_openid=?", sessionResult.get("openid"));
+		doctorsWechat.setDoctorId(doctors.getId());
+		doctorsWechat.update();
+		LoginBean loginBean = new LoginBean();
+		loginBean.setSessionId(sessionId);
+		loginBean.setDoctorBean(doctors);
+		renderJson(new ResultBean(loginBean));
 	}
 
+	/**
+	 * 服务端解密用户信息接口
+	 * 获取unionId
+	 */
+	public void phoneLogin() {
+		
+		String encryptedData = getPara("encryptedData");
+		String iv = getPara("iv");
+		
+		// 参数空校验 不做演示
+		// 利用 appId 与 accessToken 建立关联,支持多账户
+		IAccessTokenCache accessTokenCache = ApiConfigKit.getAccessTokenCache();
+		String sessionId = getHeader("wxa-sessionid");
+		if (StrKit.isBlank(sessionId)) {
+			Kv data = Kv.by("errcode", 500)
+					.set("errmsg", "wxa_session Header is blank");
+			renderJson(ErrorConstant.ERROR_WXA_SESSION_BLANK);
+			return;
+		}
+		String sessionJson = accessTokenCache.get("wxa:session:" + sessionId);
+		if (StrKit.isBlank(sessionJson)) {
+			Kv data = Kv.by("errcode", 500)
+					.set("errmsg", "wxa_session sessionJson is blank");
+			renderJson(ErrorConstant.ERROR_WXA_SESSION_BLANK);
+			return;
+		}
+		ApiResult sessionResult = ApiResult.create(sessionJson);
+		// 获取sessionKey
+		String sessionKey = sessionResult.get("session_key");
+		if (StrKit.isBlank(sessionKey)) {
+			Kv data = Kv.by("errcode", 500)
+					.set("errmsg", "sessionKey is blank");
+			renderJson(ErrorConstant.ERROR_WXA_SESSION_BLANK);
+			return;
+		}
+		// 用户信息校验
+		WxaUserApi wxaUserApi = Duang.duang(WxaUserApi.class);
+		// 服务端解密用户信息
+		ApiResult apiResult = wxaUserApi.getUserInfo(sessionKey, encryptedData, iv);
+		if (!apiResult.isSucceed()) {
+			ResultBean resultBean = new ResultBean(apiResult.getInt("errcode"),apiResult.getStr("errmsg"));
+			renderJson(resultBean);
+			return;
+		}
+		// 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性
+		// 同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
+		String phone = apiResult.getStr("purePhoneNumber");
+		if (StrKit.isBlank(phone)) {
+			renderJson(ErrorConstant.ERROR_PHONE_BLANK);
+			return;
+		}
+		Doctors doctors = Doctors.dao.findFirst("select * from doctors where phone=?", phone);
+		if (doctors == null) {
+			renderJson(ErrorConstant.ERROR_DOCTOR_NOT_FIND);
+			return;
+		}
+		DoctorsWechat doctorsWechat = DoctorsWechat.dao.findFirst("select * from doctors_wechat where wxa_openid=?", sessionResult.get("openid"));
+		doctorsWechat.setDoctorId(doctors.getId());
+		doctorsWechat.update();
+		LoginBean loginBean = new LoginBean();
+		loginBean.setSessionId(sessionId);
+		loginBean.setDoctorBean(doctors);
+		renderJson(new ResultBean(loginBean));
+	}
 }