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  }