Commit 74e7bafe by 303514581@qq.com

2018/4/9 wap方式微信公众号授权登陆+用户信息获取接口编写完毕

parent 7aef3230
...@@ -4,10 +4,9 @@ import org.slf4j.Logger; ...@@ -4,10 +4,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class GetWechatOpenUrl { public class GetWechatOpenUrl {
private static final Logger logger = LoggerFactory.getLogger(GetWechatOpenUrl.class); private static final Logger logger = LoggerFactory.getLogger(GetWechatOpenUrl.class);
/** /**
* Step1地址 获取code * Step1地址 获取code
* *
...@@ -18,7 +17,7 @@ public class GetWechatOpenUrl { ...@@ -18,7 +17,7 @@ public class GetWechatOpenUrl {
* @param scope * @param scope
* @return * @return
*/ */
public String getCodeUrl(String getCodeUrl,String appid,String redirect_uri,String respone_type,String scope) { public String getCodeUrl(String getCodeUrl, String appid, String redirect_uri, String respone_type, String scope) {
StringBuilder url = new StringBuilder(); StringBuilder url = new StringBuilder();
url.append(getCodeUrl); url.append(getCodeUrl);
url.append("?appid="); url.append("?appid=");
...@@ -33,8 +32,8 @@ public class GetWechatOpenUrl { ...@@ -33,8 +32,8 @@ public class GetWechatOpenUrl {
logger.info("请求授权登录url:" + url); logger.info("请求授权登录url:" + url);
return url.toString(); return url.toString();
} }
public String getTokenUrl(String getTokenUrl,String appid,String secret,String code,String grant_type) { public String getTokenUrl(String getTokenUrl, String appid, String secret, String code, String grant_type) {
StringBuilder url = new StringBuilder(); StringBuilder url = new StringBuilder();
url.append(getTokenUrl); url.append(getTokenUrl);
url.append("?appid="); url.append("?appid=");
...@@ -48,15 +47,16 @@ public class GetWechatOpenUrl { ...@@ -48,15 +47,16 @@ public class GetWechatOpenUrl {
logger.info("请求token的url:" + url); logger.info("请求token的url:" + url);
return url.toString(); return url.toString();
} }
/** /**
* 获取用户信息url * 获取用户信息url
* @Title: getUserInfo *
* @Title: getUserInfo
* @Description: 获取用户信息url * @Description: 获取用户信息url
* @param @param userInfoUrl * @param @param userInfoUrl
* @param @param access_token * @param @param access_token
* @param @param openid * @param @param openid
* @param @return 设定文件 * @param @return 设定文件
* @return String 返回类型 * @return String 返回类型
*/ */
public String getUserInfo(String userInfoUrl, String access_token, String openid) { public String getUserInfo(String userInfoUrl, String access_token, String openid) {
...@@ -69,4 +69,36 @@ public class GetWechatOpenUrl { ...@@ -69,4 +69,36 @@ public class GetWechatOpenUrl {
logger.info("获取用户信息url:" + url); logger.info("获取用户信息url:" + url);
return url.toString(); return url.toString();
} }
/**
* wap公众号授权url
*
* @param wapWR
* @param string
* @Title: getWapLoginUrl
* @Description: wap公众号授权url
* @param @param wapCodeUrl
* @param @param wapAppid
* @param @param wapRedirectUri
* @param @param wapScope
* @param @param wapWR
* @param @return 设定文件
* @return String 返回类型
*/
public String getWapLoginUrl(String wapCodeUrl, String wapAppid, String wapRedirectUri, String response_type,
String wapScope, String wapWR) {
StringBuilder url = new StringBuilder();
url.append(wapCodeUrl);
url.append("?appid=");
url.append(wapAppid);
url.append("&redirect_uri=");
url.append(wapRedirectUri);
url.append("&response_type=");
url.append(response_type);
url.append("&scope=");
url.append(wapScope);
url.append(wapWR);
logger.info("wap公众号授权url:" + url);
return url.toString();
}
} }
...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; ...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "wechat") @ConfigurationProperties(prefix = "wechat")
@PropertySource(value = "wechatlogin.properties") @PropertySource(value = "wechatlogin.properties")
public class WechatConfig { public class WechatConfig {
// 登录地址 // 登录地址
private String getCodeUrl; private String getCodeUrl;
// 授权类型,值固定为"code" // 授权类型,值固定为"code"
...@@ -30,6 +30,56 @@ public class WechatConfig { ...@@ -30,6 +30,56 @@ public class WechatConfig {
private String grantType; private String grantType;
// 获取用户个人信息(UnionID机制)地址 // 获取用户个人信息(UnionID机制)地址
private String userInfoUrl; private String userInfoUrl;
// 微信公众号授权登陆地址
private String wapCodeUrl;
// 微信公众号授权appid
private String wapAppid;
// 微信公众号成功授权后的回调地址,域名必须与审核时填写的授权域名一致
private String wapRedirectUri;
// 微信公众号应用授权作用域
private String wapScope;
// #wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数
private String wapWR;
public String getWapCodeUrl() {
return wapCodeUrl;
}
public void setWapCodeUrl(String wapCodeUrl) {
this.wapCodeUrl = wapCodeUrl;
}
public String getWapAppid() {
return wapAppid;
}
public void setWapAppid(String wapAppid) {
this.wapAppid = wapAppid;
}
public String getWapRedirectUri() {
return wapRedirectUri;
}
public void setWapRedirectUri(String wapRedirectUri) {
this.wapRedirectUri = wapRedirectUri;
}
public String getWapScope() {
return wapScope;
}
public void setWapScope(String wapScope) {
this.wapScope = wapScope;
}
public String getWapWR() {
return wapWR;
}
public void setWapWR(String wapWR) {
this.wapWR = wapWR;
}
public String getUserInfoUrl() { public String getUserInfoUrl() {
return userInfoUrl; return userInfoUrl;
......
package com.zhiwei.controller;
import java.io.IOException;
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.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.Tool.GetWechatOpenUrl;
import com.zhiwei.Tool.Tools;
import com.zhiwei.config.WechatConfig;
import com.zhiwei.entity.WeChatTokenEntity;
@SuppressWarnings("deprecation")
@RestController
public class WapWechatLoginController {
@Autowired
private WechatConfig config;
private static final Logger logger = LoggerFactory.getLogger(WapWechatLoginController.class);
private GetWechatOpenUrl getUrl = new GetWechatOpenUrl();
private static String yoururl = null;
/**
* 回调接口
*
* @param response
* @param request
*/
@SuppressWarnings("resource")
@RequestMapping("/wapwechat/recall")
public void Recall(HttpServletResponse response, HttpServletRequest request) {
// 取得code
String code = request.getParameter("code");
// 获取token的地址
String url = null;
try {
url = getUrl.getTokenUrl(config.getGetTokenUrl(), config.getAppid(), config.getSecret(), code,
config.getGrantType());
String resultToken = "";
// 根据地址获取请求
HttpGet httpGet = new HttpGet(url);// 这里发送get请求
// 获取当前客户端对象
HttpClient httpClient = new DefaultHttpClient();
// 通过请求对象获取响应对象
HttpResponse httpresponse;
httpresponse = httpClient.execute(httpGet);
// 判断网络连接状态码是否正常(0--200都数正常)
if (httpresponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
resultToken = EntityUtils.toString(httpresponse.getEntity(), "utf-8");
}
// System.out.println(resultToken);
WeChatTokenEntity entity = JSONObject.parseObject(resultToken, WeChatTokenEntity.class);
// System.err.println(entity.toString());
logger.info(entity.toString());
String sendurl = yoururl + "?access_token=" + entity.getAccess_token() + "&openid=" + entity.getOpenid()
+ "&expires_in=" + entity.getExpires_in() + "&unionid=" + entity.getUnionid();
response.sendRedirect(sendurl);
} catch (IOException e) {
logger.error("微信公众号授权请求失败", e);
}
}
@RequestMapping(value = "/wapwechat/getUserInfo", method = RequestMethod.GET)
public String getWechatUserInfo(@RequestParam(value = "access_token") String access_token,
@RequestParam(value = "openid") String openid, HttpServletResponse response, HttpServletRequest request) {
// https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
try {
String url = getUrl.getUserInfo(config.getUserInfoUrl(), access_token, openid);
return Tools.httpGet(url);
} catch (Exception e) {
logger.error("微信公众号授权请求用户信息失败", e);
return Tools.returnCommonError("zhiwei授权接口出错");
}
}
@RequestMapping("/wapwechat/login")
public void wapLogin(@RequestParam(value = "redirect_uri") String redirect_uri, HttpServletResponse response,
HttpServletRequest request) {
try {
yoururl = redirect_uri;
String url = getUrl.getWapLoginUrl(config.getWapCodeUrl(), config.getWapAppid(), config.getWapRedirectUri(),
config.getResponseType(), config.getWapScope(), config.getWapWR());
response.sendRedirect(url);
} catch (IOException e) {
logger.error("微信公众号授权登录请求发送失败", e);
}
}
}
...@@ -25,7 +25,7 @@ import com.zhiwei.Tool.Tools; ...@@ -25,7 +25,7 @@ import com.zhiwei.Tool.Tools;
import com.zhiwei.config.WechatConfig; import com.zhiwei.config.WechatConfig;
import com.zhiwei.entity.WeChatTokenEntity; import com.zhiwei.entity.WeChatTokenEntity;
//微博授权登录
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@RestController @RestController
public class WechatLoginController { public class WechatLoginController {
...@@ -85,17 +85,16 @@ public class WechatLoginController { ...@@ -85,17 +85,16 @@ public class WechatLoginController {
logger.info(entity.toString()); logger.info(entity.toString());
String sendurl = yoururl + "?access_token=" + entity.getAccess_token() + "&openid=" + entity.getOpenid() String sendurl = yoururl + "?access_token=" + entity.getAccess_token() + "&openid=" + entity.getOpenid()
+ "&expires_in=" + entity.getExpires_in()+ "&unionid=" + entity.getUnionid(); + "&expires_in=" + entity.getExpires_in() + "&unionid=" + entity.getUnionid();
response.sendRedirect(sendurl); response.sendRedirect(sendurl);
} catch (IOException e) { } catch (IOException e) {
logger.error("微信回调请求失败,错误信息:{},错误位置:{}", e.getMessage(), e.getStackTrace()); logger.error("微信回调请求失败,错误信息:{},错误位置:{}", e.getMessage(), e.getStackTrace());
} }
} }
@RequestMapping(value = "/WechatLogin/getUserInfo", method = RequestMethod.GET) @RequestMapping(value = "/WechatLogin/getUserInfo", method = RequestMethod.GET)
public String getWechatUserInfo(@RequestParam(value = "access_token") String access_token, public String getWechatUserInfo(@RequestParam(value = "access_token") String access_token,
@RequestParam(value = "openid") String openid, @RequestParam(value = "openid") String openid, HttpServletResponse response, HttpServletRequest request) {
HttpServletResponse response, HttpServletRequest request) {
// https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID // https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
try { try {
String url = getUrl.getUserInfo(config.getUserInfoUrl(), access_token, openid); String url = getUrl.getUserInfo(config.getUserInfoUrl(), access_token, openid);
...@@ -105,6 +104,5 @@ public class WechatLoginController { ...@@ -105,6 +104,5 @@ public class WechatLoginController {
return Tools.returnCommonError("zhiwei授权接口出错"); return Tools.returnCommonError("zhiwei授权接口出错");
} }
} }
} }
...@@ -16,4 +16,14 @@ wechat.getTokenUrl=https://api.weixin.qq.com/sns/oauth2/access_token ...@@ -16,4 +16,14 @@ wechat.getTokenUrl=https://api.weixin.qq.com/sns/oauth2/access_token
#授权类型 #授权类型
wechat.grantType=authorization_code wechat.grantType=authorization_code
#获取用户个人信息(UnionID机制)地址 #获取用户个人信息(UnionID机制)地址
wechat.userInfoUrl=https://api.weixin.qq.com/sns/userinfo wechat.userInfoUrl=https://api.weixin.qq.com/sns/userinfo
\ No newline at end of file #微信公众号授权登陆地址
wechat.wapCodeUrl=https://open.weixin.qq.com/connect/oauth2/authorize
#微信公众号授权appid
wechat.wapAppid=wxd1f40dde7e15845f
#微信公众号成功授权后的回调地址,域名必须与审核时填写的授权域名一致
wechat.wapRedirectUri =http://login.zhiweidata.com/wapwechat/recall
#微信公众号应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
wechat.wapScope=snsapi_userinfo
#微信公众号#wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数
wechat.wapWR=#wechat_redirect
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment