刘韬 %!s(int64=6) %!d(string=hai) anos
pai
achega
a37bb82c03

+ 23 - 42
PacsOnline_Wechat_Patient/src/main/java/com/zskk/controller/WebBridgeController.java

@@ -1,10 +1,6 @@
 package com.zskk.controller;
 
-import java.net.URLEncoder;
-import java.util.List;
 import com.jfinal.core.Controller;
-import com.jfinal.kit.PropKit;
-import com.jfinal.plugin.redis.Redis;
 import com.jfinal.weixin.sdk.api.SnsAccessToken;
 import com.zskk.model.User;
 import com.zskk.service.ServiceFactory;
@@ -40,35 +36,35 @@ public class WebBridgeController extends Controller {
 				}
 				SnsAccessToken snsAccessToken = wService.getWebAccessToken("wxee1c68f8944d357b", "1bc0128b6bbb3907c3bcf4a1704f2a1f", code);
 				
-//				UserService uService = ServiceFactory.getService(UserService.class);
-//				String openId = uService.getOpenId(code);
-//				User userWechats = User.dao.findFirst("select * from user where wx_openid=?",openId);
-//				if (userWechats == null && openId != null) {
-//					userWechats = uService.createWxUser(openId);
-//				}
-//				if (userWechats != null && userWechats.getWxIcon().isEmpty()) {
-//					uService.getUserInfo(userWechats.getWxOpenid());
-//				}
-//				this.getRequest().getSession().setAttribute("pwpSessionObj", userWechats);
-////
+				UserService uService = ServiceFactory.getService(UserService.class);
+				User userWechats = User.dao.findFirst("select * from user where wx_openid=?",snsAccessToken.getOpenid());
+				if (userWechats == null && snsAccessToken.getOpenid() != null) {
+					userWechats = uService.createWxUser(snsAccessToken.getOpenid());
+				}
+				if (userWechats != null && userWechats.getWxIcon().isEmpty()) {                     
+					wService.getWebWeixinUserInfo(snsAccessToken.getAccessToken(), snsAccessToken.getOpenid());
+				}
+				this.getRequest().getSession().setAttribute("pwpSessionObj", userWechats);
 				String uidStr = toUrl.contains("?") ? "&openid=" : "?openid=";
 				this.redirect(toUrl + uidStr + snsAccessToken.getOpenid());
 			} else {
-//				UserService uService = ServiceFactory.getService(UserService.class);
-//				User userWechats = (User) sessionObj;
-//				User users = User.dao.findById(userWechats.getId());
-//				String uidStr = toUrl.contains("?") ? "&openid=" : "?openid=";
-//				if (users == null) {
-//					uService.createWxUser(userWechats.getWxOpenid());
-//				}
-//				User users2 = User.dao.findFirst("select * from user where wx_openid=?",userWechats.getWxOpenid());
-//				if (users2 != null && users2.getWxIcon().isEmpty()) {
+				UserService uService = ServiceFactory.getService(UserService.class);
+				User userWechats = (User) sessionObj;
+				User users = User.dao.findById(userWechats.getId());
+				String uidStr = toUrl.contains("?") ? "&openid=" : "?openid=";
+				if (users == null) {
+					userWechats = uService.createWxUser(userWechats.getWxOpenid());
+				}
+				User users2 = User.dao.findFirst("select * from user where wx_openid=?",userWechats.getWxOpenid());
+				if (users2 != null && users2.getWxIcon().isEmpty()) {
 //					uService.getUserInfo(userWechats.getWxOpenid());
-//				}
+//					wService.getWebWeixinUserInfo(snsAccessToken.getAccessToken(), snsAccessToken.getOpenid());
+
+				}
 //				
-//				this.getRequest().getSession().setAttribute("pwpSessionObj", users2);
+				this.getRequest().getSession().setAttribute("pwpSessionObj", users2);
 //
-//				this.redirect(toUrl + uidStr + userWechats.getWxOpenid());
+				this.redirect(toUrl + uidStr + userWechats.getWxOpenid());
 
 				
 			}
@@ -79,20 +75,5 @@ public class WebBridgeController extends Controller {
 		}
 		
 	}
-
-	// 跳转到微信认证
-	public void redirectToWX() {
-//		String url = getRequest().getRequestURL().toString();
-//		if (getPara("type") !=null) {
-//			url = url + "?type=" + getPara("type");
-//		}
-//		try {
-//			url = URLEncoder.encode(url, "UTF-8");
-//		} catch (Exception e) {
-//			// nothing
-//		}
-//		String redirect = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo#wechat_redirect";
-//		redirect(String.format(redirect, PropKit.get("appId"), url));
-	}
 	
 }

+ 20 - 1
PacsOnline_Wechat_Patient/src/main/java/com/zskk/service/UserService.java

@@ -1,7 +1,10 @@
 package com.zskk.service;
 
+import java.util.Date;
 import java.util.UUID;
 import com.jfinal.kit.PropKit;
+import com.zskk.model.User;
+
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
 
@@ -14,6 +17,20 @@ public class UserService {
 	//业务逻辑请求
 	private static final String BASE_URL = PropKit.get("wx_base_url");
 
+	/**
+	 * 创建微信用户
+	 * @param openid
+	 */
+	public User createWxUser(String openid) {
+		User userWechats = new User();
+		userWechats.setId(creatId());
+		userWechats.setWxOpenid(openid);
+		userWechats.setSource("测试微信");
+		userWechats.setSubscribeStatus(2);
+		userWechats.setCreateAt(new Date());
+		userWechats.save();
+		return userWechats;
+	}
 	/*
 	 * 获取用户信息
 	 */
@@ -75,7 +92,9 @@ public class UserService {
 //			System.out.println(result.getJson());
 //		}
 	}
-	
+	private String creatId() {
+		return UUID.randomUUID().toString().replace("-", "");
+	}
 	private String create_timestamp() {
 		return Long.toString(System.currentTimeMillis() / 1000);
 	}

+ 25 - 0
PacsOnline_Wechat_Patient/src/main/java/com/zskk/service/WeixinService.java

@@ -3,8 +3,11 @@ package com.zskk.service;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 
+import com.jfinal.weixin.sdk.api.ApiResult;
 import com.jfinal.weixin.sdk.api.SnsAccessToken;
 import com.jfinal.weixin.sdk.api.SnsAccessTokenApi;
+import com.jfinal.weixin.sdk.api.SnsApi;
+import com.zskk.model.User;
 
 public class WeixinService {
 	
@@ -19,11 +22,33 @@ public class WeixinService {
 		return url;
 	}
 
+	/**
+	 * 通过回调地址参数code获取access_token
+	 * @param appId
+	 * @param secret
+	 * @param code
+	 * @return
+	 */
 	public SnsAccessToken getWebAccessToken(String appId, String secret, String code) {
 		SnsAccessToken snsAccessToken = SnsAccessTokenApi.getSnsAccessToken(appId, secret, code);
 		return snsAccessToken;
 	}
 	
+	/**
+	 * 拉取用户信息
+	 * @param accessToken
+	 * @param openId
+	 * @return
+	 */
+	public ApiResult getWebWeixinUserInfo(String accessToken, String openId) {
+		ApiResult apiResult = SnsApi.getUserInfo(accessToken, openId);
+		User user = User.dao.findFirst("select * from user where wx_openid=?",openId);
+		user.setWxIcon(apiResult.getStr("headimgurl"));
+		user.setWxNickname(apiResult.getStr("nickname"));
+		user.update();
+		return apiResult;
+	}
+	
 //	public static void main(String[] args) {
 //		try {
 //			String url = URLEncoder.encode("http://wechat.client.pacsonline.cn/#/bind", "UTF-8");