github.com/872409/go-netease-im@v1.0.2-0.20201109080841-fdb3e13691c5/account.go (about) 1 package netease 2 3 import ( 4 "errors" 5 "fmt" 6 "strconv" 7 8 "github.com/json-iterator/go" 9 ) 10 11 const ( 12 neteaseBaseURL = "https://api.netease.im/nimserver" 13 createImUserPoint = neteaseBaseURL + "/user/create.action" 14 refreshTokenPoint = neteaseBaseURL + "/user/refreshToken.action" 15 updateTokenPoint = neteaseBaseURL + "/user/update.action" 16 updateUserInfoPoint = neteaseBaseURL + "/user/updateUinfo.action" 17 18 teamJoinGet = neteaseBaseURL + "/team/joinTeams.action" 19 teamCreate = neteaseBaseURL + "/team/create.action" 20 teamQuery = neteaseBaseURL + "/team/query.action" 21 22 friendGet = neteaseBaseURL + "/friend/get.action" 23 friendAdd = neteaseBaseURL + "/friend/add.action" 24 friendUpdate = neteaseBaseURL + "/friend/update.action" 25 ) 26 27 // UpdateUser 更新用户名片 28 /** 29 * @param accid 网易云通信ID,最大长度32字符,必须保证一个APP内唯一(只允许字母、数字、半角下划线_、@、半角点以及半角-组成,不区分大小写,会统一小写处理,请注意以此接口返回结果中的accid为准)。 30 * @param name 网易云通信ID昵称,最大长度64字符,用来PUSH推送时显示的昵称 31 * @param icon 网易云通信ID头像URL,第三方可选填,最大长度1024 32 * @param sign 用户签名,最大长度256字符 33 * @param email 用户email,最大长度64字符 34 * @param birth 用户生日,最大长度16字符 35 * @param gender 用户性别,0表示未知,1表示男,2女表示女,其它会报参数错误 36 * @param ex 用户名片扩展字段,最大长度1024字符,用户可自行扩展,建议封装成JSON字符串 37 */ 38 func (c *ImClient) UpdateUser(u *ImUser) error { 39 param := map[string]string{"accid": u.Accid} 40 41 if len(u.Name) > 0 { 42 param["name"] = u.Name 43 } 44 45 if len(u.IconURL) > 0 { 46 param["icon"] = u.IconURL 47 } 48 49 if len(u.Sign) > 0 { 50 param["sign"] = u.Sign 51 } 52 53 if len(u.Birthday) > 0 { 54 param["birth"] = u.Birthday 55 } 56 57 if len(u.Extension) > 0 { 58 param["ex"] = u.Extension 59 } 60 if u.Gender == 1 || u.Gender == 2 { 61 param["gender"] = strconv.Itoa(u.Gender) 62 } 63 64 _, err := c.post(updateUserInfoPoint, param, "info") 65 66 if err != nil { 67 fmt.Println("UpdateUser err", param, "err:", err) 68 return err 69 } 70 fmt.Println("UpdateUser", param) 71 return nil 72 73 } 74 75 // CreateImUser 创建网易云通信ID 76 /** 77 * @param accid 网易云通信ID,最大长度32字符,必须保证一个APP内唯一(只允许字母、数字、半角下划线_、@、半角点以及半角-组成,不区分大小写,会统一小写处理,请注意以此接口返回结果中的accid为准)。 78 * @param name 网易云通信ID昵称,最大长度64字符,用来PUSH推送时显示的昵称 79 * @param props json属性,第三方可选填,最大长度1024字符 80 * @param icon 网易云通信ID头像URL,第三方可选填,最大长度1024 81 * @param token 网易云通信ID可以指定登录token值,最大长度128字符,并更新,如果未指定,会自动生成token,并在创建成功后返回 82 * @param sign 用户签名,最大长度256字符 83 * @param email 用户email,最大长度64字符 84 * @param birth 用户生日,最大长度16字符 85 * @param mobile 用户mobile,最大长度32字符 86 * @param gender 用户性别,0表示未知,1表示男,2女表示女,其它会报参数错误 87 * @param ex 用户名片扩展字段,最大长度1024字符,用户可自行扩展,建议封装成JSON字符串 88 */ 89 func (c *ImClient) CreateImUser(u *ImUser) (*TokenInfo, error) { 90 param := map[string]string{"accid": u.Accid} 91 92 if len(u.Name) > 0 { 93 param["name"] = u.Name 94 } 95 if len(u.Propertys) > 0 { 96 param["props"] = u.Propertys 97 } 98 if len(u.IconURL) > 0 { 99 param["icon"] = u.IconURL 100 } 101 if len(u.Token) > 0 { 102 param["token"] = u.Token 103 } 104 if len(u.Sign) > 0 { 105 param["sign"] = u.Sign 106 } 107 if len(u.Email) > 0 { 108 param["email"] = u.Email 109 } 110 if len(u.Birthday) > 0 { 111 param["birth"] = u.Birthday 112 } 113 if len(u.Mobile) > 0 { 114 param["mobile"] = u.Mobile 115 } 116 if len(u.Extension) > 0 { 117 param["ex"] = u.Extension 118 } 119 if u.Gender == 1 || u.Gender == 2 { 120 param["gender"] = strconv.Itoa(u.Gender) 121 } 122 123 fmt.Println("CreateImUser", param) 124 125 // client := c.client.R() 126 // c.setCommonHead(client) 127 // client.SetFormData(param) 128 129 // infoJSON, err := handleResp(client.Post(createImUserPoint)) 130 infoJSON, err := c.post(createImUserPoint, param, "info") 131 132 if err != nil { 133 return nil, err 134 } 135 136 token := &TokenInfo{} 137 err = jsoniter.Unmarshal(*infoJSON, token) 138 if err != nil { 139 return nil, err 140 } 141 return token, nil 142 143 // 144 // if err != nil { 145 // return nil, err 146 // } 147 // 148 // var jsonRes map[string]*json.RawMessage 149 // err = jsoniter.Unmarshal(resp.Body(), &jsonRes) 150 // if err != nil { 151 // return nil, err 152 // } 153 // 154 // var code int 155 // err = json.Unmarshal(*jsonRes["code"], &code) 156 // if err != nil { 157 // return nil, err 158 // } 159 // 160 // if code != 200 { 161 // var msg string 162 // json.Unmarshal(*jsonRes["desc"], &msg) 163 // return nil, errors.New(msg) 164 // } 165 // 166 // tk := &TokenInfo{} 167 // err = jsoniter.Unmarshal(*jsonRes["info"], tk) 168 // if err != nil { 169 // return nil, err 170 // } 171 // 172 // return tk, nil 173 } 174 175 // RefreshToken 更新并获取新token 176 /** 177 * @param accid 网易云通信ID,最大长度32字符,必须保证一个APP内唯一 178 */ 179 func (c *ImClient) RefreshToken(accid string) (*TokenInfo, error) { 180 if len(accid) == 0 { 181 return nil, errors.New("必须指定网易云通信ID") 182 } 183 184 param := map[string]string{"accid": accid} 185 // client := c.client.R() 186 // c.setCommonHead(client) 187 // client.SetFormData(param) 188 189 infoJSON, err := c.post(refreshTokenPoint, param, "info") 190 191 // infoJSON, err := handleResp(client.Post(refreshTokenPoint)) 192 193 if err != nil { 194 return nil, err 195 } 196 197 token := &TokenInfo{} 198 err = jsoniter.Unmarshal(*infoJSON, token) 199 if err != nil { 200 return nil, err 201 } 202 203 return token, nil 204 205 // 206 // var jsonRes map[string]*json.RawMessage 207 // err = jsoniter.Unmarshal(resp.Body(), &jsonRes) 208 // if err != nil { 209 // return nil, err 210 // } 211 // 212 // var code int 213 // err = json.Unmarshal(*jsonRes["code"], &code) 214 // if err != nil { 215 // return nil, err 216 // } 217 // 218 // if code != 200 { 219 // var msg string 220 // json.Unmarshal(*jsonRes["desc"], &msg) 221 // return nil, errors.New(msg) 222 // } 223 // 224 // tk := &TokenInfo{} 225 // err = jsoniter.Unmarshal(*jsonRes["info"], tk) 226 // if err != nil { 227 // return nil, err 228 // } 229 // 230 // return tk, nil 231 } 232 233 func (c *ImClient) UpdateToken(accid string, token string, props string) error { 234 235 if len(accid) == 0 { 236 return errors.New("必须指定网易云通信ID") 237 } 238 239 param := map[string]string{ 240 "accid": accid, 241 "token": token, 242 } 243 if len(props) > 0 { 244 param["props"] = props 245 } 246 247 _, err := c.post(updateTokenPoint, param, "info") 248 249 if err != nil { 250 return err 251 } 252 253 return nil 254 }