网易云信第三方接口调用超详细Demo

**

正文

直接进入正题
**

	//单人通知推送
	private static String  PUSH_INFORM_URL="https://api.netease.im/nimserver/msg/sendAttachMsg.action"; 
	
	//多人通知推送
	private static String  PUSH_INFORMS_URL="https://api.netease.im/nimserver/msg/sendBatchAttachMsg.action";

	//创建群组
	private static final String ADD_GROUP="https://api.netease.im/nimserver/team/create.action";

	//移除群主
	private static final String REMOVE_GROUP_MANAGER="https://api.netease.im/nimserver/team/changeOwner.action";

	//提出成员
	private static final String DELETE_USERS="https://api.netease.im/nimserver/team/kick.action";

	//添加成员
	private static final String ADD_USERS ="https://api.netease.im/nimserver/team/add.action";

	private static final String UPDATE="https://api.netease.im/nimserver/team/update.action";

	private  static final  String  QUERY_USER="https://api.netease.im/nimserver/team/query.action";

	private static final  String  QUERY_NAME="https://api.netease.im/nimserver/user/getUinfos.action";
	//解封网易云信通运ID
	private static final String  UNBLOCK="https://api.netease.im/nimserver/user/unblock.action";

请求第三方接口,每个对应的功能都有单独的请求地址,同时也要遵循第三方请求的格式
网易云信第三方接口调用超详细Demo_第1张图片
请求网易云信的格式大部分都是一样的只是你的参数和请求的连接不一样,

/**
	 * @Description:认名管理员
	 * @Data 10:05 2019/12/12
	 * @Param [accid]
	 */
	public static final String addManager(String tid,String owner,String members){
		String result=null;

		CloseableHttpClient httpClient =  HttpClientBuilder.create().build();
		HttpPost httpPost = new HttpPost(ADD_MANAGER);
		String appKey = CloudSecurityUser.APP_KEY;
		String appSecret = CloudSecurityUser.APP_SECRET;
		String nonce =  UUID.randomUUID().toString().replaceAll("-","");
		String curTime = String.valueOf((new Date()).getTime() / 1000L);
		String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);//获取CheckSum

		// 设置请求的header
		httpPost.addHeader("AppKey", appKey);
		httpPost.addHeader("Nonce", nonce);
		httpPost.addHeader("CurTime", curTime);
		httpPost.addHeader("CheckSum", checkSum);
		httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
		// 设置请求的参数
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
		nvps.add(new BasicNameValuePair("tid",tid));
		nvps.add(new BasicNameValuePair("owner",owner));
		nvps.add(new BasicNameValuePair("members",members));

		try {
			httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		// 执行请求
		HttpResponse response;
		try {
			response = httpClient.execute(httpPost);
			result=EntityUtils.toString(response.getEntity(), "utf-8");
			return result;
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return result;
	}

请求网易认名管理员方法事例
网易云信第三方接口调用超详细Demo_第2张图片
这个大体上分为2部分,上面红的框操作就是设置你的请求,将你们公司创建网易云用户的公钥和私钥放入参数
ADD_MANAGER:网易云信接口请求地址
APP_KEY:公钥
APP_SECRET:密钥
获取随机数和时间和你的密钥经过h5加密请求网易,方法献上:

public class CheckSumBuilder {
    private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
        '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
	
	// 计算并获取CheckSum
    public static String getCheckSum(String appSecret, String nonce, String curTime) {
        return encode("sha1", appSecret + nonce + curTime);
    }

    // 计算并获取md5值
    public static String getMd5(String requestBody) {
        return encode("md5", requestBody);
    }

    private static String encode(String algorithm, String value) {
        if (value == null) {
            return null;
        }
        try {
            MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
            messageDigest.update(value.getBytes());
            return getFormattedText(messageDigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    private static String getFormattedText(byte[] bytes) {
        int len = bytes.length;
        StringBuilder buf = new StringBuilder(len * 2);
        for (int j = 0; j < len; j++) {
            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
        }
        return buf.toString();
    }
}	

请求后网易会返回你调用接口后的参数
网易云信第三方接口调用超详细Demo_第3张图片
你要根据返回的参数去判断成功还是失败,可以从参数中获取你想要的参数在做业务的逻辑处理

		HttpResponse response;
		try {
			response = httpClient.execute(httpPost);
			result=EntityUtils.toString(response.getEntity(), "utf-8");
			return result;

博主获取参数方法:将返回的数据转换成字符串类型,最后将字符串传换成json对象去获取里面的参数

群邀请人:

String save = CloudPushMessageUtil.addUsers(tid, owner, jsonArray.toString(), msg);
JSONObjsonject object = JSONObject.parseObject(save);

返回参数String类型,然后转换成JSONObjsonject 对象,再获取里面得值,
具体得返回参数看网易云信IM 开发文档,每个请求返回得参数不同。

code	详细描述
200	操作成功,
201	客户端版本不对,需升级sdk
301	被封禁
302	用户名或密码错误
315	IP限制
403	非法操作或没有权限
404	对象不存在
405	参数长度过长
406	对象只读
408	客户端请求超时
413	验证失败(短信服务)
414	参数错误
415	客户端网络问题
416	频率控制
417	重复操作
418	通道不可用(短信服务)
419	数量超过上限
422	账号被禁用
423	帐号被禁言
431	HTTP重复请求
500	服务器内部错误
503	服务器繁忙
508	消息撤回时间超限
509	无效协议
514	服务不可用
998	解包错误
999	打包错误
群相关错误码	
801	群人数达到上限
802	没有权限
803	群不存在
804	用户不在群
805	群类型不匹配
806	创建群数量达到限制
807	群成员状态错误
808	申请成功
809	已经在群内
810	邀请成功
811	@账号数量超过限制
812	群禁言,普通成员不能发送消息
813	群拉人部分成功
814	禁止使用群组已读服务
815	群管理员人数超过上限
音视频、白板通话相关错误码	
9102	通道失效
9103	已经在他端对这个呼叫响应过了
11001	通话不可达,对方离线状态
聊天室相关错误码	
13001	IM主连接状态异常
13002	聊天室状态异常
13003	账号在黑名单中,不允许进入聊天室
13004	在禁言列表中,不允许发言
13005	用户的聊天室昵称、头像或成员扩展字段被反垃圾
特定业务相关错误码	
10431	输入email不是邮箱
10432	输入mobile不是手机号码
10433	注册输入的两次密码不相同
10434	企业不存在
10435	登陆密码或帐号不对
10436	app不存在
10437	email已注册
10438	手机号已注册
10441	app名字已经存在
信令错误码	
10404	房间不存在
10405	房间已存在
10406	不在房间内
10407	已经在房间内
10408	邀请不存在或已过期
10409	邀请已经拒绝
10410	邀请已经接受了
10201	对方云信不在线
10202	对方云信不在线,且推送也不可达
10419	房间人数超限
10420	已经在房间内(自己的其他端)
10417	uid冲突

最后献上网易云信返回的code码
网易云信开发官网地址:https://dev.yunxin.163.com/docs/product/

总结:

小弟总结这个事例不容易,如果大佬感觉不错的话可以动动您发财的小手点个赞! 感谢

你可能感兴趣的:(网易云信第三方接口调用超详细Demo)