微信登录实现
import com.demo.Result;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
public class LoginController {
@ApiOperation(value = "微信登录", notes = "微信登录", response = Result.class)
@ApiImplicitParams({
@ApiImplicitParam(name = "code", value = "授权临时票据"),
})
@RequestMapping(value = "/wxLogin", method = RequestMethod.GET)
public Result<Object> wxLogin(@RequestParam("code") String code) {
return memberUserService.wxLogin(code);
}
}
@Service
public class MemberUserServiceImpl implements MemberUserService {
@Override
public Result<Object> wxLogin(String code) {
WxTokenEntity wxTokenEntity = WxloginUtil.getAccessToken(code,YunstConstant.USER_TYPE_MEMBER);
String openid = wxTokenEntity.getOpenid();
if (null == openid) {
throw new BizException(ExceptionEnum.WXLOGIN_ERROR);
}
MemberUserCriteria criteria = new MemberUserCriteria();
criteria.createCriteria().andWxOpenidEqualTo(openid);
List<MemberUser> memberUserList = memberUserMapper.selectByCriteria(criteria);
if (null == memberUserList || memberUserList.size() <= 0) {
Map<String, Object> param1 = new HashMap<>();
param1.put("first_login", true);
param1.put("openid", openid);
return ResultBuilder.success(param1);
}
MemberUser memberUser = memberUserList.get(0);
MemberUser tokenUser = setUserToken(memberUser);
return ResultBuilder.success(tokenUser);
}
}
package com.demo.utils.wxlogin;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.tbb.idp.constant.PropertiesConstant;
import com.tbb.idp.constant.YunstConstant;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
public class WxloginUtil {
public static WxTokenEntity getAccessToken(String code, Integer userType) {
String appId = PropertiesConstant.MEMBER_WXPAY_APP_ID;
String secret = PropertiesConstant.MEMBER_WXPAY_SECRET;
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";
URI uri = URI.create(url);
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(uri);
HttpResponse response;
try {
response = client.execute(get);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
StringBuilder sb = new StringBuilder();
for (String temp = reader.readLine(); temp != null; temp = reader.readLine()) {
sb.append(temp);
}
WxTokenEntity wxTokenEntity = new WxTokenEntity();
JSONObject object = JSON.parseObject(sb.toString().trim());
wxTokenEntity.setAccessToken(object.getString("access_token"));
wxTokenEntity.setExpiresIn(object.getString("expires_in"));
wxTokenEntity.setRefreshToken(object.getString("refresh_token"));
wxTokenEntity.setOpenid(object.getString("openid"));
wxTokenEntity.setUnionid(object.getString("unionid"));
wxTokenEntity.setScope(object.getString("scope"));
return wxTokenEntity;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
package com.demo.utils.wxlogin;
public class WxTokenEntity {
private String accessToken;
private String expiresIn;
private String refreshToken;
private String openid;
private String scope;
private String unionid;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(String expiresIn) {
this.expiresIn = expiresIn;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getUnionid() {
return unionid;
}
public void setUnionid(String unionid) {
this.unionid = unionid;
}
}