74 lines
2.6 KiB
Java
74 lines
2.6 KiB
Java
package com.example.mini_program.service;
|
|
|
|
import com.example.mini_program.config.WxMiniAppConfig;
|
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
import lombok.Data;
|
|
import org.json.JSONObject;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
@Service
|
|
public class WxLoginService {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(WxLoginService.class);
|
|
private static final String JSCODE2SESSION_URL =
|
|
"https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";
|
|
|
|
private final WxMiniAppConfig wxMiniAppConfig;
|
|
private final RestTemplate restTemplate;
|
|
|
|
public WxLoginService(WxMiniAppConfig wxMiniAppConfig, RestTemplate restTemplate) {
|
|
this.wxMiniAppConfig = wxMiniAppConfig;
|
|
this.restTemplate = restTemplate;
|
|
}
|
|
|
|
/**
|
|
* 调用微信接口用code换取openid
|
|
*/
|
|
public WxLoginResult code2Session(String code) {
|
|
String url = String.format(JSCODE2SESSION_URL,
|
|
wxMiniAppConfig.getAppid(),
|
|
wxMiniAppConfig.getSecret(),
|
|
code);
|
|
|
|
logger.info("调用微信jscode2session接口, code: {}", code);
|
|
|
|
try {
|
|
String response = restTemplate.getForObject(url, String.class);
|
|
logger.info("微信返回原始结果: {}", response);
|
|
|
|
JSONObject json = new JSONObject(response);
|
|
WxLoginResult result = new WxLoginResult();
|
|
result.setOpenid(json.optString("openid"));
|
|
result.setSessionKey(json.optString("session_key"));
|
|
result.setUnionid(json.optString("unionid"));
|
|
result.setErrcode(json.optString("errcode"));
|
|
result.setErrmsg(json.optString("errmsg"));
|
|
|
|
logger.info("解析后结果: openid={}, unionid={}, errcode={}",
|
|
result.getOpenid(), result.getUnionid(), result.getErrcode());
|
|
return result;
|
|
} catch (Exception e) {
|
|
logger.error("调用微信接口失败", e);
|
|
WxLoginResult errorResult = new WxLoginResult();
|
|
errorResult.setErrcode("-1");
|
|
errorResult.setErrmsg("系统错误: " + e.getMessage());
|
|
return errorResult;
|
|
}
|
|
}
|
|
|
|
@Data
|
|
public static class WxLoginResult {
|
|
|
|
@JsonProperty("session_key")
|
|
private String sessionKey;
|
|
|
|
private String unionid;
|
|
private String openid;
|
|
private String errcode;
|
|
private String errmsg;
|
|
}
|
|
}
|