网易云信IM C#.Net请求、操作网易云通信ID

没啥技术含量就不写其他的了  直接上代码

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace WXL_IM.Util
{
    public class IMUtil
    {
        #region 服务器操作URL
        // 创建【网易云通信ID】的Url
        //  参数	    类型    必须	    说明
        //  accid	String	是	    网易云通信ID,最大长度32字符,必须保证一个APP内唯一(只允许字母、数字、半角下划线_、@、半角点以及半角-组成,不区分大小写,会统一小写处理,请注意以此接口返回结果中的accid为准)。
        //  name	String	否	    网易云通信ID昵称,最大长度64字符,用来PUSH推送时显示的昵称
        //  props	String	否	    json属性,第三方可选填,最大长度1024字符
        //  icon	String	否	    网易云通信ID头像URL,第三方可选填,最大长度1024
        //  token	String	否	    网易云通信ID可以指定登录token值,最大长度128字符,并更新,如果未指定,会自动生成token,并在创建成功后返回
        //  sign	String	否	    用户签名,最大长度256字符
        //  email	String	否	    用户email,最大长度64字符
        //  birth	String	否	    用户生日,最大长度16字符
        //  mobile	String	否	    用户mobile,最大长度32字符,只支持国内号码
        //  gender	int	    否	    用户性别,0表示未知,1表示男,2女表示女,其它会报参数错误
        //  ex	    String	否	    用户名片扩展字段,最大长度1024字符,用户可自行扩展,建议封装成JSON字符串
        static string CRT_USER_URL = "https://api.netease.im/nimserver/user/create.action";

        // 更新【网易云通信ID】的Url 非修改用户信息用
        // 参数	    类型	   必须	   说明
        // accid	String	是	   网易云通信ID,最大长度32字符,必须保证一个APP内唯一
        // props	String	否	   json属性,第三方可选填,最大长度1024字符
        // token	String	否	   网易云通信ID可以指定登录token值,最大长度128字符
        static string UPD_USERID_URL = "https://api.netease.im/nimserver/user/update.action";

        // 更新并获取新token
        // 参数	    类型	   必须	   说明
        // accid	String	是	   网易云通信ID,最大长度32字符,必须保证一个APP内唯一
        static string UPDGET_USERTOKEN_URL = "https://api.netease.im/nimserver/user/refreshToken.action";

        // 封禁网易云通信ID
        // 参数	    类型	   必须	   说明
        // accid	String	是	   网易云通信ID,最大长度32字符,必须保证一个APP内唯一
        // needkick	String	否	   是否踢掉被禁用户,true或false,默认false
        static string BLOCK_USERID_URL = "https://api.netease.im/nimserver/user/block.action";

        // 解禁网易云通信ID
        // 参数	    类型	   必须	   说明
        // accid	String	是	   网易云通信ID,最大长度32字符,必须保证一个APP内唯一
        static string UNBLOCK_USERID_URL = "https://api.netease.im/nimserver/user/unblock.action";
        
        #endregion 服务器操作URL

        //云信AppKey 公匙
        static string appKey = ConfigurationManager.AppSettings["IMAppKey"];
        //云信AppSecret 私钥  
        static string appSecret = ConfigurationManager.AppSettings["IMAppSecret"];

        /// <summary>
        /// 执行请求
        /// </summary>
        /// <param name="action">操作码 1创建用户 2更新用户ID 3更新获取用户token 4禁用用户 5解禁用户</param>
        /// <param name="reqParams">参数 key=value</param>
        /// <returns></returns>
        public static string executeRequest(int action,string reqParams)
        {
            string url = string.Empty;
            switch (action)
            {
                case 1://创建用户
                    url = CRT_USER_URL;
                    break;
                case 2://更新用户ID
                    url = UPD_USERID_URL;
                    break;
                case 3://更新并获取新的Token
                    url = UPDGET_USERTOKEN_URL;
                    break;
                case 4://封禁网易云通信ID
                    url = BLOCK_USERID_URL;
                    break;
                case 5://解禁被封禁的网易云通信ID
                    url = UNBLOCK_USERID_URL;
                    break;
                default:
                    return "{\"desc\":\"方法选择错误!\",\"code\":-1}";
            }
            WebRequest wReq = WebRequest.Create(url);
            //------设定云信的相关校验值------
            wReq.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
            wReq.Method = "POST";
            wReq.Headers.Add("AppKey", appKey);
            //随机数(最大长度128个字符)
            string nonce = new Random().Next(100000, 999999).ToString();
            wReq.Headers.Add("Nonce", nonce);
            //当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数(String)
            string curTime = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();
            wReq.Headers.Add("CurTime", curTime);
            //SHA1(AppSecret + Nonce + CurTime),三个参数拼接的字符串,进行SHA1哈希计算,转化成16进制字符(String,小写)
            wReq.Headers.Add("CheckSum", SHA1_Hash(appSecret + nonce + curTime));
            //------设定云信的相关校验设定------

            //-----传递相关操作参数-----
            byte[] btBodys = Encoding.UTF8.GetBytes(reqParams);
            wReq.ContentLength = btBodys.Length;
            using (var wsr = wReq.GetRequestStream())
            {
                wsr.Write(btBodys, 0, btBodys.Length);
            }
            //-----传递相关操作参数-----

            WebResponse wResp = wReq.GetResponse();
            Stream respStream = wResp.GetResponseStream();

            string resultJson;
            using (StreamReader reader = new StreamReader(respStream,Encoding.UTF8))
            {
                resultJson = reader.ReadToEnd();
            }
            //Json数据:desc描述,code状态码
            return resultJson;
        }

        //【工具】计算SHA1值
        private static string SHA1_Hash(string str_sha1_in)
        {
            SHA1 sha1 = new SHA1CryptoServiceProvider();
            byte[] bytes_sha1_in = UTF8Encoding.Default.GetBytes(str_sha1_in);
            byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
            string str_sha1_out = BitConverter.ToString(bytes_sha1_out);
            str_sha1_out = str_sha1_out.Replace("-", "").ToLower();
            return str_sha1_out;
        }
    }
}

  

posted @ 2017-11-05 22:03  沐雨贤人  阅读(2291)  评论(1编辑  收藏  举报