Skip to content

Commit

Permalink
feat: add officialAccount api
Browse files Browse the repository at this point in the history
  • Loading branch information
hongyiheng committed Jan 10, 2024
1 parent 3753dd4 commit 5d1845b
Show file tree
Hide file tree
Showing 12 changed files with 763 additions and 39 deletions.
20 changes: 0 additions & 20 deletions src/main/java/io/github/doocs/im/core/Message.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ public class Message {

public static final String SERVICE_NAME_MSG_EXT = "openim_msg_ext_http_svc";

public static final String SERVICE_NAME_OFFICIAL_ACCOUNT = "official_account_open_http_svc";

/**
* 单聊消息相关命令字
*/
Expand All @@ -36,7 +34,6 @@ public class Message {
public static final String MODIFY_C2C_MSG_COMMAND = "modify_c2c_msg";
public static final String GET_KEY_VALUES_COMMAND = "get_key_values";
public static final String SET_KEY_VALUES_COMMAND = "set_key_values";
public static final String SEND_OFFICIAL_ACCOUNT_MSG_COMMAND = "send_official_account_msg";

private final ImClient imClient;

Expand Down Expand Up @@ -213,21 +210,4 @@ public SetKeyValuesResult setKeyValues(SetKeyValuesRequest setKeyValuesRequest,
String url = imClient.getUrl(SERVICE_NAME_MSG_EXT, SET_KEY_VALUES_COMMAND, random);
return HttpUtil.post(url, setKeyValuesRequest, SetKeyValuesResult.class, imClient.getConfig());
}

/**
* 公众号用户发送广播消息
*
* @param sendOfficialAccountMsgRequest 请求参数
* @return 结果
* @throws IOException 异常
*/
public SendOfficialAccountMsgResult sendOfficialAccountMsg(SendOfficialAccountMsgRequest sendOfficialAccountMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_OFFICIAL_ACCOUNT, SEND_OFFICIAL_ACCOUNT_MSG_COMMAND);
return HttpUtil.post(url, sendOfficialAccountMsgRequest, SendOfficialAccountMsgResult.class, imClient.getConfig());
}

public SendOfficialAccountMsgResult sendOfficialAccountMsg(SendOfficialAccountMsgRequest sendOfficialAccountMsgRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_OFFICIAL_ACCOUNT, SEND_OFFICIAL_ACCOUNT_MSG_COMMAND, random);
return HttpUtil.post(url, sendOfficialAccountMsgRequest, SendOfficialAccountMsgResult.class, imClient.getConfig());
}
}
60 changes: 60 additions & 0 deletions src/main/java/io/github/doocs/im/core/OfficialAccount.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,16 @@
import io.github.doocs.im.ImClient;
import io.github.doocs.im.model.request.CreateOfficialAccountRequest;
import io.github.doocs.im.model.request.DestroyOfficialAccountRequest;
import io.github.doocs.im.model.request.GetOfficialAccountInfoRequest;
import io.github.doocs.im.model.request.GetSubscriberInfoRequest;
import io.github.doocs.im.model.request.ModifyOfficialAccountBaseInfoRequest;
import io.github.doocs.im.model.request.SendOfficialAccountMsgRequest;
import io.github.doocs.im.model.response.CreateOfficialAccountResult;
import io.github.doocs.im.model.response.DestroyOfficialAccountResult;
import io.github.doocs.im.model.response.GetOfficialAccountInfoResult;
import io.github.doocs.im.model.response.GetSubscriberInfoResult;
import io.github.doocs.im.model.response.ModifyOfficialAccountBaseInfoResult;
import io.github.doocs.im.model.response.SendOfficialAccountMsgResult;
import io.github.doocs.im.util.HttpUtil;

import java.io.IOException;
Expand All @@ -29,6 +35,9 @@ public class OfficialAccount {
public static final String CREATE_OFFICIAL_ACCOUNT = "create_official_account";
public static final String DESTROY_OFFICIAL_ACCOUNT = "destroy_official_account";
public static final String MODIFY_OFFICIAL_ACCOUNT_BASE_INFO = "modify_official_account_base_info";
public static final String SEND_OFFICIAL_ACCOUNT_MSG_COMMAND = "send_official_account_msg";
public static final String GET_OFFICIAL_ACCOUNT_INFO = "get_official_account_info";
public static final String GET_SUBSCRIBER_INFO = "get_subscriber_info";

private final ImClient imClient;

Expand Down Expand Up @@ -86,4 +95,55 @@ public ModifyOfficialAccountBaseInfoResult modifyOfficialAccountBaseInfo(ModifyO
String url = imClient.getUrl(SERVICE_NAME, MODIFY_OFFICIAL_ACCOUNT_BASE_INFO, random);
return HttpUtil.post(url, modifyOfficialAccountBaseInfoRequest, ModifyOfficialAccountBaseInfoResult.class, imClient.getConfig());
}

/**
* 公众号用户发送广播消息
*
* @param sendOfficialAccountMsgRequest 请求参数
* @return 结果
* @throws IOException 异常
*/
public SendOfficialAccountMsgResult sendOfficialAccountMsg(SendOfficialAccountMsgRequest sendOfficialAccountMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, SEND_OFFICIAL_ACCOUNT_MSG_COMMAND);
return HttpUtil.post(url, sendOfficialAccountMsgRequest, SendOfficialAccountMsgResult.class, imClient.getConfig());
}

public SendOfficialAccountMsgResult sendOfficialAccountMsg(SendOfficialAccountMsgRequest sendOfficialAccountMsgRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, SEND_OFFICIAL_ACCOUNT_MSG_COMMAND, random);
return HttpUtil.post(url, sendOfficialAccountMsgRequest, SendOfficialAccountMsgResult.class, imClient.getConfig());
}

/**
* 获取公众号详细资料
*
* @param getOfficialAccountInfoRequest 请求参数
* @return 结果
* @throws IOException 异常
*/
public GetOfficialAccountInfoResult getOfficialAccountInfo(GetOfficialAccountInfoRequest getOfficialAccountInfoRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_OFFICIAL_ACCOUNT_INFO);
return HttpUtil.post(url, getOfficialAccountInfoRequest, GetOfficialAccountInfoResult.class, imClient.getConfig());
}

public GetOfficialAccountInfoResult getOfficialAccountInfo(GetOfficialAccountInfoRequest getOfficialAccountInfoRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_OFFICIAL_ACCOUNT_INFO, random);
return HttpUtil.post(url, getOfficialAccountInfoRequest, GetOfficialAccountInfoResult.class, imClient.getConfig());
}

/**
* 获取公众号订阅者列表
*
* @param getSubscriberInfoRequest 请求参数
* @return 结果
* @throws IOException 异常
*/
public GetSubscriberInfoResult getSubscriberInfo(GetSubscriberInfoRequest getSubscriberInfoRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_SUBSCRIBER_INFO);
return HttpUtil.post(url, getSubscriberInfoRequest, GetSubscriberInfoResult.class, imClient.getConfig());
}

public GetSubscriberInfoResult getSubscriberInfo(GetSubscriberInfoRequest getSubscriberInfoRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_SUBSCRIBER_INFO, random);
return HttpUtil.post(url, getSubscriberInfoRequest, GetSubscriberInfoResult.class, imClient.getConfig());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package io.github.doocs.im.model.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;
import java.util.List;

/**
* 获取公众号详细资料-请求参数
*
* @author hyh
* @since 2024/01/10 10:34
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GetOfficialAccountInfoRequest extends GenericRequest implements Serializable {
private static final long serialVersionUID = -7046784535464765710L;
/**
* 需要获取的公众号列表 ID
*/
@JsonProperty("OfficialAccountIdList")
private List<OfficialAccountItem> officialAccountIdList;

/**
* 过滤返回的公众号信息字段,不填时默认返回全部字段,包括 OfficialAccountBaseInfoFilter 过滤器,主要可取以下值:
* CreateTime 公众号的创建时间
* Name 公众号名称
* Owner_Account公众号所属的用户
* LastMsgTime 公众号内的最后一条消息时间
* SubscriberNum 公众号目前的订阅者人数
* Introduction 公众号简介
* FaceUrl 公众号的头像Url
* Organization 公众号的所在组织
* CustomString 公众号维度的自定义字段
*/
@JsonProperty("ResponseFilter")
private ResponseFilter responseFilter;

public GetOfficialAccountInfoRequest() {
}

public GetOfficialAccountInfoRequest(List<OfficialAccountItem> officialAccountIdList) {
this.officialAccountIdList = officialAccountIdList;
}

public GetOfficialAccountInfoRequest(List<OfficialAccountItem> officialAccountIdList, ResponseFilter responseFilter) {
this.officialAccountIdList = officialAccountIdList;
this.responseFilter = responseFilter;
}

private GetOfficialAccountInfoRequest(Builder builder) {
this.officialAccountIdList = builder.officialAccountIdList;
this.responseFilter = builder.responseFilter;
}

public static Builder builder() {
return new Builder();
}

public List<OfficialAccountItem> getOfficialAccountIdList() {
return officialAccountIdList;
}

public void setOfficialAccountIdList(List<OfficialAccountItem> officialAccountIdList) {
this.officialAccountIdList = officialAccountIdList;
}

public ResponseFilter getResponseFilter() {
return responseFilter;
}

public void setResponseFilter(ResponseFilter responseFilter) {
this.responseFilter = responseFilter;
}


public static final class Builder {
private List<OfficialAccountItem> officialAccountIdList;
private ResponseFilter responseFilter;

private Builder() {
}

public GetOfficialAccountInfoRequest build() {
return new GetOfficialAccountInfoRequest(this);
}

public Builder officialAccountIdList(List<OfficialAccountItem> officialAccountIdList) {
this.officialAccountIdList = officialAccountIdList;
return this;
}

public Builder responseFilter(ResponseFilter responseFilter) {
this.responseFilter = responseFilter;
return this;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package io.github.doocs.im.model.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;

/**
* 获取公众号的订阅成员资料-请求参数
*
* @author hyh
* @since 2024/01/10 11:20
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GetSubscriberInfoRequest extends GenericRequest implements Serializable {
private static final long serialVersionUID = -1051719195312598750L;
/**
* 需要获取的公众号 ID。使用创建时接口返回的 OfficialAccountUserID 字段
*/
@JsonProperty("Official_Account")
private String officialAccount;

/**
* 一次最多获取多少个成员的资料,不得超过200。如果不填,则获取群内全部成员的信息
*/
@JsonProperty("Limit")
private Integer limit;

/**
* 上一次拉取到的订阅者位置,首次调用填写"",续拉使用返回中的 Next 值
*/
@JsonProperty("Next")
private String next;

public GetSubscriberInfoRequest() {
}

public GetSubscriberInfoRequest(String officialAccount, String next) {
this.officialAccount = officialAccount;
this.next = next;
}

public GetSubscriberInfoRequest(String officialAccount, Integer limit, String next) {
this.officialAccount = officialAccount;
this.limit = limit;
this.next = next;
}

private GetSubscriberInfoRequest(Builder builder) {
this.officialAccount = builder.officialAccount;
this.limit = builder.limit;
this.next = builder.next;
}

public static Builder builder() {
return new Builder();
}

public String getOfficialAccount() {
return officialAccount;
}

public void setOfficialAccount(String officialAccount) {
this.officialAccount = officialAccount;
}

public Integer getLimit() {
return limit;
}

public void setLimit(Integer limit) {
this.limit = limit;
}

public String getNext() {
return next;
}

public void setNext(String next) {
this.next = next;
}

public static final class Builder {
private String officialAccount;
private Integer limit;
private String next;

private Builder() {
}

public GetSubscriberInfoRequest build() {
return new GetSubscriberInfoRequest(this);
}

public Builder officialAccount(String officialAccount) {
this.officialAccount = officialAccount;
return this;
}

public Builder limit(Integer limit) {
this.limit = limit;
return this;
}

public Builder next(String next) {
this.next = next;
return this;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package io.github.doocs.im.model.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;

/**
* @author hyh
* @since 2024/01/10 10:41
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OfficialAccountItem implements Serializable {
private static final long serialVersionUID = 1193395857815508620L;
@JsonProperty("Official_Account")
private String officialAccount;

public OfficialAccountItem() {
}

public OfficialAccountItem(String officialAccount) {
this.officialAccount = officialAccount;
}

private OfficialAccountItem(Builder builder) {
this.officialAccount = builder.officialAccount;
}

public static Builder builder() {
return new Builder();
}

public String getOfficialAccount() {
return officialAccount;
}

public void setOfficialAccount(String officialAccount) {
this.officialAccount = officialAccount;
}

public static final class Builder {
private String officialAccount;

private Builder() {
}

public OfficialAccountItem build() {
return new OfficialAccountItem(this);
}

public Builder officialAccount(String officialAccount) {
this.officialAccount = officialAccount;
return this;
}
}
}
Loading

0 comments on commit 5d1845b

Please sign in to comment.