一共三步
一.
前端调用微信官方接口,获取code码, 传给后端
二.
后端可以通过code以及官方要求的其他参数, 调用官方接口, 获取到该微信用户的信息
// 通过JSONObject将接收到的json字符串中的值取出来
JSONObject jsonObject = JSONObject.parseObject(wechatCode);
String code = jsonObject.getString("code");
if (StringUtils.isEmpty(code)){
// 为空返回null
throw new ServiceException("参数为null");
}
// 存放参数
MultiValueMap<String, Object> param = new LinkedMultiValueMap<String, Object>();
// appid
param.add("appid", AppID);
// secret
param.add("secret", AppSecret);
// 前端小程序发送的code
param.add("js_code", code);
// 固定参数
param.add("grant_type", "authorization_code");
// 开发者服务器 登录凭证校验接口 appi + appsecret + code
JSONObject forObject = RestTemplateUtil.doPost(url,param);
System.out.println(forObject);
//接收微信接口服务 获取返回的参数
String openid = forObject.getString("openid");
String sessionKey = forObject.getString("session_key");
RestTemplateUtil
public class RestTemplateUtil {
/**
* post请求
* @param url url
* @param param 参数
* @return JSONObject
*/
public static JSONObject doPost(String url, MultiValueMap<String, Object> param){
RestTemplate restTemplate=new RestTemplate();
String s = restTemplate.postForObject(url, param, String.class);
return JSONObject.parseObject(s);
}
}
三.
如果还需要一些隐私信息,我们需要前端传给我们三个参数 : String encryptedData, String sessionKey, String iv 来获取更隐私的一些信息
例如: 头像,昵称,城市, 性别
public String wxDecrypt(String encryptedData, String sessionKey, String iv) throws Exception {
// 开始解密
byte[] encData = cn.hutool.core.codec.Base64.decode(encryptedData);
byte[] ivs = cn.hutool.core.codec.Base64.decode(iv);
byte[] key = Base64.decode(sessionKey);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivs);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
String obj = new String(cipher.doFinal(encData), "UTF-8");
//return new String(cipher.doFinal(encData), "UTF-8");
// 打印出来看看 是个json字符串
System.out.println("用户隐私信息-->"+obj); // {"nickName":"。。。","gender":0,"language":"zh_CN","city":"","province":"","country":"","avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJ6nEoR5KicECoKlsbo4Kvwf2EeTSF9EdgfCCKK9NbiaO8uFZYuNibGZ9hbhHKJ48ZYNfH6ibyKILGTbA/132","watermark":{"timestamp":1666592588,"appid":"wxa0f8729e62d024b1"}}
// 将obj这个json字符串转换成对象
JSONObject jsonObject = JSONObject.parseObject(obj);
System.out.println("nickName--->"+jsonObject.getString("nickName"));
System.out.println("avatarUrl--->"+jsonObject.getString("avatarUrl"));
}