Files
nuttyreading-java/src/main/java/com/peanut/common/utils/TokenHolder.java
2023-09-19 18:24:19 +08:00

123 lines
3.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.peanut.common.utils;
import org.json.JSONObject;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class TokenHolder {
public static final String ASR_SCOPE = "audio_voice_assistant_get";
public static final String TTS_SCOPE = "audio_tts_post";
/**
* url , Token的urlhttp可以改为https
*/
private static final String url = "http://openapi.baidu.com/oauth/2.0/token";
/**
* asr的权限 scope 是 "audio_voice_assistant_get" tts 的权限 scope 是
* "audio_tts_post"
*/
private String scope;
/**
* 网页上申请语音识别应用获取的apiKey
*/
private String apiKey;
/**
* 网页上申请语音识别应用获取的secretKey
*/
private String secretKey;
/**
* 保存访问接口获取的token
*/
private String token;
/**
* 当前的时间戳,毫秒
*/
private long expiresAt;
/**
* @param apiKey
* 网页上申请语音识别应用获取的apiKey
* @param secretKey
* 网页上申请语音识别应用获取的secretKey
*/
public TokenHolder(String apiKey, String secretKey, String scope) {
this.apiKey = apiKey;
this.secretKey = secretKey;
this.scope = scope;
}
/**
* 获取tokenrefresh 方法后调用有效
*
* @return
*/
public String getToken() {
return token;
}
/**
* 获取过期时间refresh 方法后调用有效
*
* @return
*/
public long getExpiresAt() {
return expiresAt;
}
/**
* 获取token
*
* @return
* @throws IOException
* http请求错误
* @throws DemoException
* http接口返回不是 200, access_token未获取
*/
public void resfresh() throws Exception {
String getTokenURL = url + "?grant_type=client_credentials" + "&client_id=" + ConnUtil.urlEncode(apiKey)
+ "&client_secret=" + ConnUtil.urlEncode(secretKey);
// 打印的url出来放到浏览器内可以复现
System.out.println("token url:" + getTokenURL);
URL url = new URL(getTokenURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
String result = ConnUtil.getResponseString(conn);
System.out.println("Token result json:" + result);
parseJson(result);
}
/**
* @param result
* token接口获得的result
* @throws DemoException
*/
private void parseJson(String result) throws Exception {
JSONObject json = new JSONObject(result);
if (!json.has("access_token")) {
// 返回没有access_token字段
throw new DemoException("access_token not obtained, " + result);
}
if (!json.has("scope")) {
// 返回没有scope字段
throw new DemoException("scopenot obtained, " + result);
}
if (!json.getString("scope").contains(scope)) {
throw new DemoException("scope not exist, " + scope + "," + result);
}
token = json.getString("access_token");
expiresAt = System.currentTimeMillis() + json.getLong("expires_in") * 1000;
}
}