2026-05-03 00:11:06 +08:00
|
|
|
|
# Go Server SDK
|
|
|
|
|
|
|
2026-05-16 11:56:40 +08:00
|
|
|
|
XuqmGroup 服务端 Go SDK,封装了:
|
2026-05-08 18:32:00 +08:00
|
|
|
|
|
2026-05-09 14:53:43 +08:00
|
|
|
|
- IM 账号、UserSig 生成与登录、消息、群组、好友、会话、黑名单
|
2026-05-16 11:56:40 +08:00
|
|
|
|
- 管理端 Webhook、操作日志
|
2026-05-08 18:32:00 +08:00
|
|
|
|
- Push 注册与推送
|
2026-05-03 00:11:06 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 安装
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-05-08 18:32:00 +08:00
|
|
|
|
go get github.com/xuqmgroup/xuqmgroup-server-sdk-go
|
2026-05-03 00:11:06 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 初始化
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
2026-05-08 18:32:00 +08:00
|
|
|
|
import xuqmsdk "github.com/xuqmgroup/xuqmgroup-server-sdk-go"
|
2026-05-03 00:11:06 +08:00
|
|
|
|
|
2026-05-08 18:32:00 +08:00
|
|
|
|
client, err := xuqmsdk.NewClient(xuqmsdk.ClientConfig{
|
2026-05-03 00:11:06 +08:00
|
|
|
|
BaseURL: "https://dev.xuqinmin.com",
|
2026-05-08 18:32:00 +08:00
|
|
|
|
AppKey: "your_app_key",
|
2026-05-03 00:11:06 +08:00
|
|
|
|
AppSecret: "your_app_secret",
|
|
|
|
|
|
})
|
2026-05-08 18:32:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
|
}
|
2026-05-03 00:11:06 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
> 服务端 SDK 需要 `appSecret` 用于 HMAC 签名,`appSecret` 绝不下发到客户端。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-05-09 14:53:43 +08:00
|
|
|
|
## UserSig
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
userSig := client.GenerateUserSig("user_001")
|
|
|
|
|
|
valid := client.VerifyUserSig("user_001", userSig)
|
|
|
|
|
|
login, err := client.LoginWithUserSig("user_001", userSig)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
管理员账号可用于服务端 SDK / 管理端 REST API。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-05-08 18:32:00 +08:00
|
|
|
|
## 能力分类
|
|
|
|
|
|
|
|
|
|
|
|
| 分类 | 主要方法 |
|
|
|
|
|
|
|------|----------|
|
2026-05-09 14:53:43 +08:00
|
|
|
|
| 登录 | `GenerateUserSig`, `VerifyUserSig`, `Login`, `LoginWithUserSig` |
|
2026-05-08 18:32:00 +08:00
|
|
|
|
| 账号 | `ImportAccount`, `ImportAccounts`, `DeleteAccount`, `GetProfile`, `UpdateProfile`, `SearchAccounts`, `CheckAccount` |
|
|
|
|
|
|
| 消息 | `SendMessage`, `RevokeMessage`, `EditMessage`, `FetchHistory`, `FetchGroupHistory`, `SearchMessages` |
|
|
|
|
|
|
| 会话 | `ListConversations`, `SetConversationPinned`, `SetConversationMuted`, `MarkRead`, `SetDraft`, `SetConversationHidden`, `SetConversationGroup`, `DeleteConversation` |
|
|
|
|
|
|
| 好友 | `ListFriends`, `AddFriend`, `AddFriends`, `RemoveFriend`, `RemoveFriends`, `RemoveAllFriends`, `SetFriendGroup`, `ListFriendGroups`, `ListFriendsByGroup`, `CheckFriends` |
|
|
|
|
|
|
| 黑名单 | `ListBlacklist`, `AddBlacklist`, `RemoveBlacklist`, `CheckBlacklist` |
|
|
|
|
|
|
| 群组 | `ListGroups`, `ListPublicGroups`, `SearchGroups`, `GetGroup`, `ListGroupMembers`, `SearchGroupMembers`, `CreateGroup`, `UpdateGroup`, `AddGroupMember`, `AddGroupMembers`, `RemoveGroupMember`, `RemoveGroupMembers`, `SetGroupRole`, `TransferGroupOwner`, `LeaveGroup`, `UpdateGroupAttributes`, `RemoveGroupAttributes`, `MuteGroupMember`, `DismissGroup`, `SendGroupJoinRequest`, `ListGroupJoinRequests`, `AcceptGroupJoinRequest`, `RejectGroupJoinRequest`, `AcceptGroupJoinRequests`, `RejectGroupJoinRequests` |
|
|
|
|
|
|
| 管理端 | `QueryUserState`, `KickUsers`, `BatchSendMessage`, `AdminSetMsgRead`, `ImportMessages`, `AdminTransferGroupOwner`, `AdminUpdateGroupAttributes`, `AdminRemoveGroupAttributes`, `AdminGroupReadReceipts` |
|
|
|
|
|
|
| Webhook | `ListWebhooks`, `CreateWebhook`, `UpdateWebhook`, `DeleteWebhook`, `VerifyCallbackSignature`, `ParseCallbackEnvelope` |
|
2026-05-09 14:53:43 +08:00
|
|
|
|
| Push | `RegisterPushToken`, `SendPush`, `PushUserStatus`, `PushDeviceLogs`, `TestOfflinePush` |
|
2026-05-08 18:32:00 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-05-03 00:11:06 +08:00
|
|
|
|
## 发送消息
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
msg, err := client.SendMessage(xuqmsdk.SendMessageRequest{
|
|
|
|
|
|
ToID: "user_002",
|
|
|
|
|
|
ChatType: "SINGLE",
|
|
|
|
|
|
MsgType: "TEXT",
|
|
|
|
|
|
Content: "Hello from Go SDK!",
|
|
|
|
|
|
})
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
log.Printf("消息已发送: %s", msg.ID)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 发送群消息
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
msg, err := client.SendMessage(xuqmsdk.SendMessageRequest{
|
|
|
|
|
|
ToID: "group_xxx",
|
|
|
|
|
|
ChatType: "GROUP",
|
|
|
|
|
|
MsgType: "TEXT",
|
|
|
|
|
|
Content: "大家好",
|
|
|
|
|
|
})
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 撤回消息
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
err := client.RevokeMessage("message_id")
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 群管理
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
2026-05-08 18:32:00 +08:00
|
|
|
|
group, err := client.CreateGroup("项目讨论", []string{"user_001", "user_002"}, "NORMAL")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
|
}
|
2026-05-03 00:11:06 +08:00
|
|
|
|
|
|
|
|
|
|
err = client.AddGroupMember("group_xxx", "user_003")
|
|
|
|
|
|
err = client.RemoveGroupMember("group_xxx", "user_003")
|
|
|
|
|
|
|
|
|
|
|
|
groups, err := client.ListGroups()
|
|
|
|
|
|
members, err := client.ListGroupMembers("group_xxx")
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Push 推送
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
2026-05-08 18:32:00 +08:00
|
|
|
|
err := client.SendPush("user_001", "新消息", "你有一条未读消息", `{"chatId":"user_002"}`)
|
2026-05-03 00:11:06 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 错误处理
|
|
|
|
|
|
|
|
|
|
|
|
SDK 返回的错误实现了标准 `error` 接口。业务方可根据错误类型做不同处理:
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
msg, err := client.SendMessage(req)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
if apiErr, ok := err.(*xuqmsdk.APIError); ok {
|
|
|
|
|
|
log.Printf("API 错误: status=%d, code=%d, message=%s", apiErr.Status, apiErr.Code, apiErr.Message)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-05-08 18:32:00 +08:00
|
|
|
|
[→ Server API 文档](/server/api)
|