import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import net.iharder.Base64;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class JMessageUtils {
public final static String JMESSAGE_URL = "https://api.im.jpush.cn";
private static String appKey;
private static String masterSecret;
@Autowired
private Environment environment;
@PostConstruct
public void init() {
JMessageUtils.appKey = environment.getProperty("config.jpush.appkey");
JMessageUtils.masterSecret = environment.getProperty("config.jpush.mastersecret");
}
/**
* 注册用户:一次批量注册最多支持500个用户
* <p>
* username 用户登录名(必填)
* password 登录密码(必填)
* appkey 用户所属于的应用的appkey
* nickname 用户暱称
* birthday 生日 yyyy-MM-dd HH:mm:ss
* gender 性别 0 - 未知, 1 - 男 ,2 - 女
* signature 用户签名
* region 用户所属地区
* address 用户详细地址
* ctime 用户创建时间
* mtime 用户最后修改时间
* extras
*/
public String insertUser(JSONArray users) throws IOException, Exception {
String url = JMESSAGE_URL + "/v1/users/";
return httpPostOrGet(url, users.toJSONString());
}
/**
* 管理员注册 (管理员api发送消息接口的权限)
*/
public String adminRegister(JSONObject admin) throws IOException, Exception {
String url = JMESSAGE_URL + "/v1/admins/";
return httpPostOrGet(url, admin.toJSONString());
}
/**
* 获取应用管理员列表
*
* @param start 起始记录位置 从0开始
* @param count 查询条数 最多支持500条
*/
public String getAdminsListByAppkey(Integer start, Integer count) throws IOException, Exception {
String url = JMESSAGE_URL + "/v1/admins?start=" + start + "&count=" + count;
return httpPostOrGet(url);
}
/**
* 获取用户信息
*/
public String getUserInfo(String username) throws IOException, Exception {
String url = JMESSAGE_URL + "/v1/users/" + username;
return httpPostOrGet(url);
}
/**
* 用户在线状态查询(不适用于多端在线)
*
* @return {"login": true,"online": false}
*/
public String getUserStat(String username) throws IOException, Exception {
String url = JMESSAGE_URL + "/v1/users/" + username + "/userstat";
return httpPostOrGet(url);
}
/**
* 批量用户在线状态查询
*
* @return [{ "devices": [],"username": "caiyh01"},
* {"devices": [{"login": false, "online": false,"platform": "a" }],"username": "Rauly" }]
* <p>devices: 设备登陆状态数组,没有登陆过数组为空; platform: SDK各平台:a-Android,i-iOS,j-JS,w-Windows</p>
*/
public String getUserStat(String... username) throws IOException, Exception {
String url = JMESSAGE_URL + "/v1/users/userstat";
return httpPostOrGet(url, username);
}
/**
* 批量用户在线状态查询2
*
* @return [{"devices": [], "username": "caiyh01","statusmsg": "no_exist", "statuscode": 1 // 用户不存在,会有statusmsg }, {
* "devices": [{ "login": false, "online": false,"platform": "a" }], "username": "Rauly", "statuscode": 0 // 用户存在}]
*/
public String getUserStat2(String... username) throws IOException, Exception {
String url = JMESSAGE_URL + "/v2/users/statuser";
return httpPostOrGet(url, username);
}
/**
* 修改密码
*/
public String updatePassword(String username, String newPassword) throws IOException, Exception {
// PUT
String url = JMESSAGE_URL + "/v1/users/" + username + "/password";
JSONObject password = new JSONObject();
password.put("new_password", newPassword);
return httpPostOrGet(url, password.toJSONString());
}
/**
* 删除用户
*/
public String deleteUser(String username) throws IOException, Exception {
// DELETE
String url = JMESSAGE_URL + "/v1/users/" + username;
return httpPostOrGet(url);
}
/**
* 删除用户(最多支持同时删除100个用户)
*/
public String deleteUsers(String... username) throws IOException, Exception {
// DELETE
String url = JMESSAGE_URL + "/v1/users/";
return httpPostOrGet(url, username);
}
/**
* 添加黑名单
*/
public String addUserBlacklist(String username) throws IOException, Exception {
// HttpMethod.PUT
// PUT
String url = JMESSAGE_URL + "/v1/users/" + username + "/blacklist";
return httpPostOrGet(url);
}
/**
* 添加黑名单
*/
public String addUserBlacklist(String... username) throws IOException, Exception {
// PUT
String url = JMESSAGE_URL + "/v1/users/" + username + "/blacklist";
return httpPostOrGet(url);
}
private String httpPostOrGet(String url) throws IOException, Exception {
return httpPostOrGet(url, null);
}
/**
* @param url 请求URL
* @param payload 请求体为null 时,使用 GET请求方式
*/
private String httpPostOrGet(String url, Object payload) throws IOException, Exception {
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", Base64.encodeObject(appKey + ":" + masterSecret));
String response;
if (null == payload) {
response = HttpUtils.get(url, headers);
} else {
response = HttpUtils.postBody(url, headers, "application/json", payload);
}
return response;
}
}