107 lines
3.6 KiB
Java
107 lines
3.6 KiB
Java
package com.gxwebsoft.common.core.utils;
|
|
|
|
import cn.hutool.core.util.CharsetUtil;
|
|
import cn.hutool.http.HttpUtil;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.gxwebsoft.common.core.config.ConfigProperties;
|
|
import com.gxwebsoft.common.core.exception.BusinessException;
|
|
import com.gxwebsoft.common.system.service.SettingService;
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.net.URLEncoder;
|
|
|
|
/**
|
|
* 微信公众号工具类
|
|
* @author 科技小王子
|
|
*
|
|
*/
|
|
@Component
|
|
public class WxOfficialUtil {
|
|
private final StringRedisTemplate stringRedisTemplate;
|
|
private Integer tenantId;
|
|
public String appId;
|
|
public String appSecret;
|
|
public String openid;
|
|
public String unionid;
|
|
public String access_token;
|
|
public String expires_in;
|
|
public String nickname;
|
|
|
|
|
|
@Resource
|
|
private SettingService settingService;
|
|
@Resource
|
|
private ConfigProperties pathConfig;
|
|
@Resource
|
|
private CacheClient cacheClient;
|
|
|
|
public WxOfficialUtil(StringRedisTemplate stringRedisTemplate){
|
|
this.stringRedisTemplate = stringRedisTemplate;
|
|
}
|
|
|
|
// 实例化客户端
|
|
public WxOfficialUtil client(Integer tenantId) {
|
|
if(tenantId > 0){
|
|
throw new BusinessException(tenantId + "123123");
|
|
}
|
|
this.tenantId = tenantId;
|
|
this.config();
|
|
System.out.println("this.tenantId = " + this.tenantId);
|
|
return this;
|
|
}
|
|
|
|
// 开发者ID和秘钥
|
|
private void config() {
|
|
String key = "cache"+ this.tenantId +":setting:wx-official";
|
|
String wxOfficial = stringRedisTemplate.opsForValue().get(key);
|
|
JSONObject data = JSONObject.parseObject(wxOfficial);
|
|
if(data != null){
|
|
this.appId = data.getString("appId");
|
|
this.appSecret = data.getString("appSecret");
|
|
}
|
|
System.out.println("this.appId = " + this.appId);
|
|
System.out.println("this.appSecret = " + this.appSecret);
|
|
}
|
|
|
|
// 获取appId
|
|
public String getAppSecret(){
|
|
return this.appSecret;
|
|
}
|
|
|
|
public String getCodeUrl() throws UnsupportedEncodingException {
|
|
String encodedReturnUrl = URLEncoder.encode("https://server.gxwebsoft.com/api/open/wx-official/accessToken","UTF-8");
|
|
return "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+ this.appId +"&redirect_uri=" + encodedReturnUrl + "&response_type=code&scope=snsapi_userinfo&state="+ this.tenantId +"#wechat_redirect";
|
|
}
|
|
|
|
// 获取access_token
|
|
public String getAccessToken(String code) {
|
|
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+ this.appId +"&secret="+ this.appSecret +"&code="+ code +"&grant_type=authorization_code";
|
|
System.out.println("url = " + url);
|
|
String response = HttpUtil.get(url, CharsetUtil.CHARSET_UTF_8);
|
|
final JSONObject jsonObject = JSONObject.parseObject(response);
|
|
access_token = jsonObject.getString("access_token");
|
|
if(access_token == null){
|
|
throw new BusinessException("获取access_token失败");
|
|
}
|
|
this.openid = jsonObject.getString("openid");
|
|
this.unionid = jsonObject.getString("unionid");
|
|
this.expires_in = jsonObject.getString("expires_in");
|
|
return access_token;
|
|
}
|
|
|
|
// 获取userinfo
|
|
public JSONObject getUserInfo(String access_token) {
|
|
String url = "https://api.weixin.qq.com/sns/userinfo?access_token="+ access_token +"&openid="+ this.openid +"&lang=zh_CN";
|
|
System.out.println("url2 = " + url);
|
|
String response = HttpUtil.get(url, CharsetUtil.CHARSET_UTF_8);
|
|
System.out.println("response = " + response);
|
|
if(response == null){
|
|
throw new BusinessException("获取userinfo失败");
|
|
}
|
|
return JSONObject.parseObject(response);
|
|
}
|
|
}
|