wechat:
app-id: ***
app-secret: ****
access-token-url: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
base-oauth2-url: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=123
@Value("${wechat.app-id}")
private String appId;
@Value("${wechat.app-secret}")
private String appSecret;
@Value("${wechat.access-token-url}")
private String accessTokenURL;
@Value("${wechat.base-oauth2-url}")
private String baseOauth2Url;
public ResponseBean getOpenIdByCode(BaseQuery params) {
String code = params.getCode();
logger.info("code=======>" + code);
if (StringUtils.isEmpty(code)) {
return new ResponseBean(ResponseBean.ERROR, "登录失败");
}
String url = accessTokenURL.replace("APPID", appId).replace("SECRET", appSecret).replace("CODE", code);
ResponseEntity<WechatBean> entity = this.restTemplate.getForEntity(url, WechatBean.class, new Object[0]);
if (ResponseBean.SUCCESS != entity.getStatusCodeValue()) {
return new ResponseBean(ResponseBean.ERROR, "登录失败");
}
WechatBean wechatResultBean = (WechatBean) entity.getBody();
if (null != wechatResultBean) {
String errcode = wechatResultBean.getErrcode();
if ("40029".equals(errcode)) {
return new ResponseBean(ResponseBean.ERROR, "登录失败");
}
String accessToken = wechatResultBean.getAccess_token();
logger.info("accessToken=======>" + accessToken);
if (StringUtils.isEmpty(accessToken)) {
return new ResponseBean(ResponseBean.ERROR, "登录失败");
}
String openId = wechatResultBean.getOpenid();
logger.info("openId=======>" + openId);
if (StringUtils.isEmpty(openId)) {
return new ResponseBean(ResponseBean.ERROR, "登录失败");
}
User user = userService.getByWxOpenId(openId);
if (null == user) {
logger.info("insert=======>" + i);
if (1 == i) {
return new ResponseBean(ResponseBean.SUCCESS,"登录成功", userInfo);
}
return new ResponseBean(ResponseBean.ERROR,"登录失败");
}
return new ResponseBean(ResponseBean.SUCCESS,"登录成功", user);
}
return new ResponseBean(ResponseBean.ERROR,"登录失败");
}
public class Wechat2HTTPConverter extends MappingJackson2HttpMessageConverter {
public Wechat2HTTPConverter() {
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
mediaTypes.add(MediaType.TEXT_HTML);
setSupportedMediaTypes(mediaTypes);
}
}
public class RestTemplateConfig {
private RestTemplateBuilder restTemplateBuilder;
public RestTemplateConfig(RestTemplateBuilder restTemplateBuilder) {
this.restTemplateBuilder = restTemplateBuilder;
}
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = restTemplateBuilder.build(RestTemplate.class);
restTemplate.getMessageConverters().add(new Wechat2HTTPConverter());
return restTemplate;
}
}