首先需要在Uniapp 官网配置验证地址,就是画横线的地方,后面我们需要用到。 controller.java
@PostMapping("/oneClickLogin")
public AjaxResult oneClickLogin(@RequestBody LoginBody loginBody)
{
String sign= HeaUtil.sha256_HMAC("access_token="+loginBody.getAccessToken()+"&openid="+loginBody.getOpenId(),"这个是appsecrty");
String url="https://这个就是上图画线的地方/xxxx?access_token="+loginBody.getAccessToken()+"&openid="+loginBody.getOpenId()+"&sign="+sign;
String res= HttpUtils.sendGet(url);
if(StringUtils.isBlank(res)){
throw new RuntimeException("一键登录失败,请使用其他方式进行登录...");
}
System.out.println("一键登录返回:"+res);
JSONObject json= JSONObject.parseObject(res);
if(json.getJSONObject("data")==null){
throw new RuntimeException("一键登录失败,请使用其他方式进行登录..");
}
String phoneNumber= json.getJSONObject("data").getString("phoneNumber");
if(StringUtils.isBlank(phoneNumber)){
throw new RuntimeException("一键登录失败,请使用其他方式进行登录.");
}
return AjaxResult.success("操作成功",phoneNumber);
}
HeaUtil.java
/**
* sha256_HMAC加密
*
* @param message 消息
* @param secret 秘钥
* @return 加密后字符串
*/
public static String sha256_HMAC(String message, String secret) {
String hash = "";
try {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
hash = byteArrayToHexString(bytes);
} catch (Exception e) {
System.out.println("Error HmacSHA256 ===========" + e.getMessage());
}
return hash;
}
/**
* 将加密后的字节数组转换成字符串
*
* @param b 字节数组
* @return 字符串
*/
private static String byteArrayToHexString(byte[] b) {
StringBuilder hs = new StringBuilder();
String stmp;
for (int n = 0; b != null && n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1){
hs.append('0');
}
hs.append(stmp);
}
return hs.toString().toLowerCase();
}