🔥 重写
This commit is contained in:
parent
50403947b8
commit
4b70b60922
27
api/account.go
Normal file
27
api/account.go
Normal file
@ -0,0 +1,27 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gitee.ltd/lxh/txim/api/param"
|
||||
"gitee.ltd/lxh/txim/common"
|
||||
)
|
||||
|
||||
// AccountImport 导入单个账号
|
||||
func AccountImport(r *param.AccountImportReq) (*param.AccountImportRes, error) {
|
||||
a := param.AccountImportRes{}
|
||||
err := Api(common.AccountImport, r, &a)
|
||||
return &a, err
|
||||
}
|
||||
|
||||
// AccountCheck 检查账号是否存在
|
||||
func AccountCheck(r *param.AccountCheckReq) (*param.AccountCheckRes, error) {
|
||||
a := param.AccountCheckRes{}
|
||||
err := Api(common.AccountCheck, r, &a)
|
||||
return &a, err
|
||||
}
|
||||
|
||||
// AccountDelete 账号删除
|
||||
func AccountDelete(r *param.AccountDeleteReq) (*param.AccountDeleteRes, error) {
|
||||
a := param.AccountDeleteRes{}
|
||||
err := Api(common.AccountDelete, r, &a)
|
||||
return &a, err
|
||||
}
|
130
api/api.go
130
api/api.go
@ -3,136 +3,22 @@ package api
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
. "gitee.ltd/lxh/txim"
|
||||
"gitee.ltd/lxh/txim/common"
|
||||
"math/rand"
|
||||
|
||||
"github.com/imroc/req"
|
||||
"github.com/tencentyun/tls-sig-api-v2-golang/tencentyun"
|
||||
)
|
||||
|
||||
const (
|
||||
API_HOST = "console.tim.qq.com"
|
||||
API_VERSION = "v4"
|
||||
)
|
||||
func Api(p common.Api, in, out interface{}) error {
|
||||
host := fmt.Sprintf("https://%s/%s/%s/%s", ApiHost, ApiVersion, p.ServiceName, p.Command)
|
||||
|
||||
var g struct {
|
||||
sdkAppID int
|
||||
identifier string
|
||||
key string
|
||||
}
|
||||
|
||||
func Init(sdkAppID int, key, identifier string) {
|
||||
g.sdkAppID = sdkAppID
|
||||
g.key = key
|
||||
g.identifier = identifier
|
||||
}
|
||||
|
||||
func UserSig(identifier string, expire int) string {
|
||||
sig, _ := tencentyun.GenUserSig(g.sdkAppID, g.key, identifier, expire)
|
||||
return sig
|
||||
}
|
||||
|
||||
//单个账号导入
|
||||
type AccountImportReq struct {
|
||||
Identifier string `json:"Identifier"` //:"test",
|
||||
Nick string `json:"Nick"` //:"test",
|
||||
FaceUrl string `json:"FaceUrl"` //:"http://www.qq.com"
|
||||
}
|
||||
type AccountImportAns struct{}
|
||||
|
||||
func AccountImport(r *AccountImportReq) (*AccountImportAns, error) {
|
||||
a := AccountImportAns{}
|
||||
err := Api("im_open_login_svc", "account_import", r, &a)
|
||||
return &a, err
|
||||
}
|
||||
|
||||
//账号查询
|
||||
type AccountCheckReq struct {
|
||||
CheckItem []*AccountCheckReqItem `json:"CheckItem"`
|
||||
}
|
||||
type AccountCheckReqItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
}
|
||||
type AccountCheckAns struct {
|
||||
ResultItem []*AccountCheckAnsItem `json:"ResultItem"`
|
||||
}
|
||||
type AccountCheckAnsItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
ResultCode int `json:"ResultCode"`
|
||||
ResultInfo string `json:"ResultInfo"`
|
||||
AccountStatus string `json:"AccountStatus"`
|
||||
}
|
||||
|
||||
func AccountCheck(r *AccountCheckReq) (*AccountCheckAns, error) {
|
||||
a := AccountCheckAns{}
|
||||
err := Api("im_open_login_svc", "account_check", r, &a)
|
||||
return &a, err
|
||||
}
|
||||
|
||||
//账号删除
|
||||
type AccountDeleteReq struct {
|
||||
DeleteItem []*AccountDeleteReqItem `json:"DeleteItem"`
|
||||
}
|
||||
type AccountDeleteReqItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
}
|
||||
type AccountDeleteAns struct {
|
||||
ResultItem []*AccountDeleteAnsItem `json:"ResultItem"`
|
||||
}
|
||||
type AccountDeleteAnsItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
ResultCode int `json:"ResultCode"`
|
||||
ResultInfo string `json:"ResultInfo"`
|
||||
}
|
||||
|
||||
func AccountDelete(r *AccountDeleteReq) (*AccountDeleteAns, error) {
|
||||
a := AccountDeleteAns{}
|
||||
err := Api("im_open_login_svc", "account_delete", r, &a)
|
||||
return &a, err
|
||||
}
|
||||
|
||||
//建群
|
||||
//https://cloud.tencent.com/document/product/269/1615
|
||||
type GroupCreateReq struct {
|
||||
OwnerAccount string `json:"Owner_Account"`
|
||||
Type string `json:"Type"`
|
||||
Name string `json:"Name"`
|
||||
ApplyJoinOption string `json:"ApplyJoinOption"`
|
||||
}
|
||||
type GroupCreateAns struct {
|
||||
GroupId string `json:"GroupId"`
|
||||
}
|
||||
|
||||
func GroupCreate(r *GroupCreateReq) (*GroupCreateAns, error) {
|
||||
a := GroupCreateAns{}
|
||||
err := Api("group_open_http_svc", "create_group", r, &a)
|
||||
return &a, err
|
||||
}
|
||||
|
||||
//资料设置
|
||||
type ProfileSetReq struct {
|
||||
FromAccount string `json:"From_Account"`
|
||||
ProfileItem []*ProfileSetReqItem `json:"ProfileItem"`
|
||||
}
|
||||
type ProfileSetReqItem struct {
|
||||
Tag string `json:"Tag"`
|
||||
Value interface{} `json:"Value"`
|
||||
}
|
||||
|
||||
type ProfileSetAns struct{}
|
||||
|
||||
func ProfileSet(r *ProfileSetReq) (*ProfileSetAns, error) {
|
||||
a := ProfileSetAns{}
|
||||
err := Api("profile", "portrait_set", r, &a)
|
||||
return &a, err
|
||||
}
|
||||
|
||||
func Api(servicename, command string, in, out interface{}) error {
|
||||
host := fmt.Sprintf("https://%s/%s/%s/%s", API_HOST, API_VERSION, servicename, command)
|
||||
appId, identifier := GetInfo()
|
||||
|
||||
query := req.QueryParam{
|
||||
"sdkappid": g.sdkAppID,
|
||||
"identifier": g.identifier,
|
||||
"usersig": UserSig(g.identifier, 5*60),
|
||||
"sdkappid": appId,
|
||||
"identifier": identifier,
|
||||
"usersig": UserSig(identifier, 5*60),
|
||||
"random": rand.Uint32(),
|
||||
"contenttype": "json",
|
||||
}
|
||||
|
14
api/group.go
Normal file
14
api/group.go
Normal file
@ -0,0 +1,14 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gitee.ltd/lxh/txim/api/param"
|
||||
"gitee.ltd/lxh/txim/common"
|
||||
)
|
||||
|
||||
// GroupCreate 建群
|
||||
//https://cloud.tencent.com/document/product/269/1615
|
||||
func GroupCreate(r *param.GroupCreateReq) (*param.GroupCreateRes, error) {
|
||||
a := param.GroupCreateRes{}
|
||||
err := Api(common.GroupCreate, r, &a)
|
||||
return &a, err
|
||||
}
|
56
api/param/request.go
Normal file
56
api/param/request.go
Normal file
@ -0,0 +1,56 @@
|
||||
package param
|
||||
|
||||
// AccountImportReq 单个账号导入
|
||||
type AccountImportReq struct {
|
||||
Identifier string `json:"Identifier"` // 用户名,长度不超过32字节
|
||||
Nick string `json:"Nick"` // 用户昵称
|
||||
FaceUrl string `json:"FaceUrl"` // 用户头像 URL
|
||||
}
|
||||
|
||||
// ========================================================
|
||||
|
||||
// AccountCheckReq 账号查询
|
||||
type AccountCheckReq struct {
|
||||
CheckItem []*AccountCheckReqItem `json:"CheckItem"`
|
||||
}
|
||||
|
||||
// AccountCheckReqItem 账号查询条件
|
||||
type AccountCheckReqItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
}
|
||||
|
||||
// ========================================================
|
||||
|
||||
// AccountDeleteReq 账号删除
|
||||
type AccountDeleteReq struct {
|
||||
DeleteItem []*AccountDeleteReqItem `json:"DeleteItem"`
|
||||
}
|
||||
|
||||
// AccountDeleteReqItem 账号删除条件
|
||||
type AccountDeleteReqItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
}
|
||||
|
||||
// ========================================================
|
||||
|
||||
// GroupCreateReq 建群
|
||||
type GroupCreateReq struct {
|
||||
OwnerAccount string `json:"Owner_Account"`
|
||||
Type string `json:"Type"`
|
||||
Name string `json:"Name"`
|
||||
ApplyJoinOption string `json:"ApplyJoinOption"`
|
||||
}
|
||||
|
||||
// ========================================================
|
||||
|
||||
// ProfileSetReq 资料设置
|
||||
type ProfileSetReq struct {
|
||||
FromAccount string `json:"From_Account"`
|
||||
ProfileItem []*ProfileSetReqItem `json:"ProfileItem"`
|
||||
}
|
||||
|
||||
// ProfileSetReqItem 资料设置条件
|
||||
type ProfileSetReqItem struct {
|
||||
Tag string `json:"Tag"`
|
||||
Value interface{} `json:"Value"`
|
||||
}
|
45
api/param/response.go
Normal file
45
api/param/response.go
Normal file
@ -0,0 +1,45 @@
|
||||
package param
|
||||
|
||||
// AccountImportRes 导入单个账号返回
|
||||
type AccountImportRes struct{}
|
||||
|
||||
// ===============================================================
|
||||
|
||||
// AccountCheckRes 查询账号列表返回
|
||||
type AccountCheckRes struct {
|
||||
ResultItem []*AccountCheckResItem `json:"ResultItem"`
|
||||
}
|
||||
|
||||
// AccountCheckResItem 账号查询结果
|
||||
type AccountCheckResItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
ResultCode int `json:"ResultCode"`
|
||||
ResultInfo string `json:"ResultInfo"`
|
||||
AccountStatus string `json:"AccountStatus"`
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
|
||||
// AccountDeleteRes 账号删除返回
|
||||
type AccountDeleteRes struct {
|
||||
ResultItem []*AccountDeleteResItem `json:"ResultItem"`
|
||||
}
|
||||
|
||||
// AccountDeleteResItem 账号删除结果
|
||||
type AccountDeleteResItem struct {
|
||||
UserID string `json:"UserID"`
|
||||
ResultCode int `json:"ResultCode"`
|
||||
ResultInfo string `json:"ResultInfo"`
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
|
||||
// GroupCreateRes 建群返回
|
||||
type GroupCreateRes struct {
|
||||
GroupId string `json:"GroupId"`
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
|
||||
// ProfileSetRes 资料设置返回
|
||||
type ProfileSetRes struct{}
|
13
api/profile.go
Normal file
13
api/profile.go
Normal file
@ -0,0 +1,13 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gitee.ltd/lxh/txim/api/param"
|
||||
"gitee.ltd/lxh/txim/common"
|
||||
)
|
||||
|
||||
// ProfileSet 资料设置
|
||||
func ProfileSet(r *param.ProfileSetReq) (*param.ProfileSetRes, error) {
|
||||
a := param.ProfileSetRes{}
|
||||
err := Api(common.ProfileSet, r, &a)
|
||||
return &a, err
|
||||
}
|
14
callback/param.go
Normal file
14
callback/param.go
Normal file
@ -0,0 +1,14 @@
|
||||
package callback
|
||||
|
||||
import "gitee.ltd/lxh/txim/common"
|
||||
|
||||
// TencentCallbackQuery 腾讯云回调Query参数
|
||||
type TencentCallbackQuery struct {
|
||||
CallbackCommand common.TxIMCallbackCommand `json:"CallbackCommand" form:"CallbackCommand"` // 回调命令字
|
||||
ClientIP string `json:"ClientIP" form:"ClientIP"` // 客户端IP
|
||||
OptPlatform string `json:"OptPlatform" form:"OptPlatform"` // 客户端平台
|
||||
RequestId string `json:"RequestId" form:"RequestId"` // 请求ID
|
||||
RetryId int `json:"RetryId" form:"RetryId"` // 重试次数
|
||||
SdkAppid string `json:"SdkAppid" form:"SdkAppid"` // 应用ID
|
||||
ContentType string `json:"contenttype" form:"contenttype"` // 内容类型
|
||||
}
|
14
common/api.go
Normal file
14
common/api.go
Normal file
@ -0,0 +1,14 @@
|
||||
package common
|
||||
|
||||
type Api struct {
|
||||
ServiceName string // 服务名称
|
||||
Command string // 接口名称
|
||||
}
|
||||
|
||||
var (
|
||||
AccountImport Api = Api{"im_open_login_svc", "account_import"}
|
||||
AccountCheck Api = Api{"im_open_login_svc", "account_check"}
|
||||
AccountDelete Api = Api{"im_open_login_svc", "account_delete"}
|
||||
GroupCreate Api = Api{"group_open_http_svc", "create_group"}
|
||||
ProfileSet Api = Api{"profile", "portrait_set"}
|
||||
)
|
40
common/callback.go
Normal file
40
common/callback.go
Normal file
@ -0,0 +1,40 @@
|
||||
package common
|
||||
|
||||
// TxIMCallbackCommand 回调消息类型
|
||||
type TxIMCallbackCommand string
|
||||
|
||||
const (
|
||||
// 在线状态
|
||||
|
||||
SnsStateChange TxIMCallbackCommand = "Sns.StateChange" // 状态变更
|
||||
|
||||
// 资料关系链
|
||||
|
||||
SnsCallbackPrevFriendAdd TxIMCallbackCommand = "Sns.CallbackPrevFriendAdd" // 添加好友之前回调
|
||||
SnsCallbackPrevFriendResponse TxIMCallbackCommand = "Sns.CallbackPrevFriendResponse" // 添加好友回应之前回调
|
||||
SnsCallbackFriendAdd TxIMCallbackCommand = "Sns.CallbackFriendAdd" // 添加好友之后回调
|
||||
SnsCallbackFriendDelete TxIMCallbackCommand = "Sns.CallbackFriendDelete" // 删除好友之后回调
|
||||
SnsCallbackBlackListAdd TxIMCallbackCommand = "Sns.CallbackBlackListAdd" // 添加黑名单之后回调
|
||||
SnsCallbackBlackListDelete TxIMCallbackCommand = "Sns.CallbackBlackListDelete" // 删除黑名单之后回调
|
||||
|
||||
// 资料关系链
|
||||
|
||||
C2CCallbackBeforeSendMsg TxIMCallbackCommand = "C2C.CallbackBeforeSendMsg" // 发单聊消息之前回调
|
||||
C2CCallbackAfterSendMsg TxIMCallbackCommand = "C2C.CallbackAfterSendMsg" // 发单聊消息之后回调
|
||||
C2CCallbackAfterMsgReport TxIMCallbackCommand = "C2C.CallbackAfterMsgReport" // 单聊消息已读上报后回调
|
||||
C2CCallbackAfterMsgWithDraw TxIMCallbackCommand = "C2C.CallbackAfterMsgWithDraw" // 单聊消息撤回后回调
|
||||
|
||||
// 群组系统
|
||||
|
||||
GroupCallbackBeforeCreateGroup TxIMCallbackCommand = "Group.CallbackBeforeCreateGroup" // 创建群组之前回调
|
||||
GroupCallbackAfterCreateGroup TxIMCallbackCommand = "Group.CallbackAfterCreateGroup" // 创建群组之后回调
|
||||
GroupCallbackBeforeApplyJoinGroup TxIMCallbackCommand = "Group.CallbackBeforeApplyJoinGroup" // 申请入群之前回调
|
||||
GroupCallbackBeforeInviteJoinGroup TxIMCallbackCommand = "Group.CallbackBeforeInviteJoinGroup" // 拉人入群之前回调
|
||||
GroupCallbackAfterNewMemberJoin TxIMCallbackCommand = "Group.CallbackAfterNewMemberJoin" // 新成员入群之后回调
|
||||
GroupCallbackAfterMemberExit TxIMCallbackCommand = "Group.CallbackAfterMemberExit" // 群成员离开之后回调
|
||||
GroupCallbackBeforeSendMsg TxIMCallbackCommand = "Group.CallbackBeforeSendMsg" // 群内发言之前回调
|
||||
GroupCallbackAfterSendMsg TxIMCallbackCommand = "Group.CallbackAfterSendMsg" // 群内发言之后回调
|
||||
GroupCallbackAfterGroupFull TxIMCallbackCommand = "Group.CallbackAfterGroupFull" // 群组满员之后回调
|
||||
GroupCallbackAfterGroupDestroyed TxIMCallbackCommand = "Group.CallbackAfterGroupDestroyed" // 群组解散之后回调
|
||||
GroupCallbackAfterGroupInfoChanged TxIMCallbackCommand = "Group.CallbackAfterGroupInfoChanged" // 群组资料修改之后回调
|
||||
)
|
76
demo.go
76
demo.go
@ -1,76 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
txim "gitee.ltd/lxh/txim/api"
|
||||
)
|
||||
|
||||
func main() {
|
||||
sdkAppId, _ := strconv.Atoi(os.Getenv("tximid"))
|
||||
sdkKey := os.Getenv("tximkey")
|
||||
txim.Init(sdkAppId, sdkKey, "administrator")
|
||||
|
||||
// 生成签名
|
||||
// sig := txim.UserSig("administrator", 300)
|
||||
// fmt.Println("签名:", sig)
|
||||
|
||||
var (
|
||||
data interface{}
|
||||
dataBytes []byte
|
||||
err error
|
||||
)
|
||||
|
||||
//创建房间
|
||||
// data, err = txim.GroupCreate(&txim.GroupCreateReq{
|
||||
// OwnerAccount: "administrator",
|
||||
// Type: "ChatRoom",
|
||||
// Name: "测试聊天室",
|
||||
// ApplyJoinOption: "FreeAccess",
|
||||
// })
|
||||
// dataBytes, _ = json.Marshal(data)
|
||||
// fmt.Printf("%s,%v\n", string(dataBytes), err)
|
||||
|
||||
//创建用户
|
||||
// data, err = txim.AccountImport(&txim.AccountImportReq{
|
||||
// Identifier: "test",
|
||||
// Nick: "test1",
|
||||
// })
|
||||
// dataBytes, _ = json.Marshal(data)
|
||||
// fmt.Printf("%s,%v\n", string(dataBytes), err)
|
||||
|
||||
//查询用户
|
||||
data, err = txim.AccountCheck(&txim.AccountCheckReq{
|
||||
CheckItem: []*txim.AccountCheckReqItem{
|
||||
{UserID: "test"},
|
||||
},
|
||||
})
|
||||
dataBytes, _ = json.Marshal(data)
|
||||
fmt.Printf("%s,%v\n", string(dataBytes), err)
|
||||
|
||||
//删除用户
|
||||
// data, err = txim.AccountDelete(&txim.AccountDeleteReq{
|
||||
// DeleteItem: []*txim.AccountDeleteReqItem{
|
||||
// {UserID: "test"},
|
||||
// },
|
||||
// })
|
||||
// dataBytes, _ = json.Marshal(data)
|
||||
// fmt.Printf("%s,%v\n", string(dataBytes), err)
|
||||
|
||||
//设置用户资料
|
||||
// data, err = txim.ProfileSet(&txim.ProfileSetReq{
|
||||
// FromAccount: "test1",
|
||||
// ProfileItem: []*txim.ProfileSetReqItem{
|
||||
// {
|
||||
// Tag: "Tag_Profile_IM_Nick",
|
||||
// Value: "test1",
|
||||
// },
|
||||
// },
|
||||
// })
|
||||
// dataStr, _ := json.Marshal(data)
|
||||
// fmt.Printf("%+v,%v\n", dataStr, err)
|
||||
|
||||
}
|
32
txim.go
Normal file
32
txim.go
Normal file
@ -0,0 +1,32 @@
|
||||
package txim
|
||||
|
||||
import "github.com/tencentyun/tls-sig-api-v2-golang/tencentyun"
|
||||
|
||||
const (
|
||||
ApiHost = "console.tim.qq.com" // API服务器地址
|
||||
ApiVersion = "v4" // API版本号
|
||||
)
|
||||
|
||||
var g struct {
|
||||
sdkAppID int
|
||||
identifier string
|
||||
key string
|
||||
}
|
||||
|
||||
// GetInfo 获取SDK AppID等信息
|
||||
func GetInfo() (int, string) {
|
||||
return g.sdkAppID, g.identifier
|
||||
}
|
||||
|
||||
// Init 初始化SDK
|
||||
func Init(sdkAppID int, key, identifier string) {
|
||||
g.sdkAppID = sdkAppID
|
||||
g.key = key
|
||||
g.identifier = identifier
|
||||
}
|
||||
|
||||
// UserSig 生成签名
|
||||
func UserSig(identifier string, expire int) string {
|
||||
sig, _ := tencentyun.GenUserSig(g.sdkAppID, g.key, identifier, expire)
|
||||
return sig
|
||||
}
|
Loading…
Reference in New Issue
Block a user