CNLiveUserInfo.m 18.9 KB
//
//  CNLiveUserInfo.m
//  CNLiveUserSystemDemo
//
//  Created by iOS on 16/9/13.
//  Copyright © 2016年 zhulin. All rights reserved.
//

#import "CNLiveUserInfo.h"
#import "CNLiveUserNetworkManager.h"
#import "CNLiveUserSystemTools.h"
#import "NSDictionary+Safety.h"

//更新手机号
static  NSString *updateMobileTestURL       = @"http://test.open.cnlive.com/openapi/api2/user/updateMobileById";
static  NSString *updateMobileFormalURL       = @"https://api.cnlive.com/open/api2/user/updateMobileById";

//查询用户信息
static  NSString *queryUserInfoTestURL      = @"http://test.open.cnlive.com/openapi/api2/user/readUserById";
static  NSString *queryUserInfoFormalURL      = @"https://api.cnlive.com/open/api2/user/readUserById";

//查询多条用户信息
static  NSString *queryMoreUserInfoTestURL  = @"http://test.open.cnlive.com/openapi/api2/user/readUsersById";
static  NSString *queryMoreUserInfoFormalURL  = @"https://api.cnlive.com/open/api2/user/readUsersById";

//修改用户单项信息
static  NSString *updateUserByIdTestURL     = @"http://test.open.cnlive.com/openapi/api2/user/updateUserById";
static  NSString *updateUserByIdFormalURL     = @"https://api.cnlive.com/open/api2/user/updateUserById";

//更新用户附加信息
static  NSString *updateOtherInfoTestURL    = @"http://test.open.cnlive.com/openapi/api2/user/updateUserExtInfo";
static  NSString *updateOtherInfoFormalURL    = @"https://api.cnlive.com/open/api2/user/updateUserExtInfo";

//修改密码
static  NSString *updatePwdTestURL          = @"http://test.open.cnlive.com/openapi/api2/user/updatePwdByMobile";
static  NSString *updatePwdFormalURL          = @"https://api.cnlive.com/open/api2/user/updatePwdByMobile";

//绑定第三方账号
static  NSString *BindingThirdTestURL       = @"http://test.open.cnlive.com/openapi/api2/user/bind3rd";
static  NSString *BindingThirdFormalURL       = @"https://api.cnlive.com/open/api2/user/bind3rd";

//通过原密码修改密码
static  NSString *oldPwdUpdatePwdTestURL       = @"http://test.open.cnlive.com/openapi/api2/user/updatePwd";
static  NSString *oldPwdUpdatePwdFormalURL       = @"https://api.cnlive.com/open/api2/user/updatePwd";

@implementation CNLiveUserInfo

/**
 *  更新手机号(旧)
 */
- (void)updateMobileWithAppId:(NSString *)appId appKey:(NSString *)appKey uid:(NSString *)uid mobile:(NSString *)mobile verificationCode:(NSString *)verificationCode token:(NSString *)token success:(void (^)(id result))success failure:(void (^)(NSDictionary *))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {

        NSString *timeString = realTime;
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"uid":[CNLiveUserSystemTools verify:uid],
                                 @"mobile":[CNLiveUserSystemTools verify:mobile],
                                 @"verificationCode":[CNLiveUserSystemTools verify:verificationCode],
                                 @"clientPlat":@"i",
                                 @"token":[CNLiveUserSystemTools verify:token],
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = updateMobileTestURL;
        } else {
            url = updateMobileFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  更新手机号(新)
 */
- (void)updateMobileWithAppId:(NSString *)appId appKey:(NSString *)appKey uid:(NSString *)uid mobile:(NSString *)mobile countryCode:(NSString *)countryCode verificationCode:(NSString *)verificationCode token:(NSString *)token success:(void (^)(id result))success failure :(void (^)(NSDictionary *errorDic))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
        
        NSString *timeString = realTime;
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"uid":[CNLiveUserSystemTools verify:uid],
                                 @"mobile":[CNLiveUserSystemTools verify:mobile],
                                 @"countryCode":countryCode,
                                 @"verificationCode":[CNLiveUserSystemTools verify:verificationCode],
                                 @"clientPlat":@"i",
                                 @"token":[CNLiveUserSystemTools verify:token],
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = updateMobileTestURL;
        } else {
            url = updateMobileFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  绑定第三方账号
 */
- (void)bindingThirdPartyWithAppId:(NSString *)appId appKey:(NSString *)appKey uid:(NSString *)uid thirdPartyPlatType:(NSString *)plat thirdPartyId:(NSString *)thirdPartyId token:(NSString *)token success:(void (^)(id))success failure:(void (^)(NSDictionary *))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
        NSString *timeString = realTime;
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"uid":[CNLiveUserSystemTools verify:uid],
                                 @"thirdPartyPlat":[CNLiveUserSystemTools verify:plat],
                                 @"thirdPartyId":[CNLiveUserSystemTools verify:thirdPartyId],
                                 @"token":[CNLiveUserSystemTools verify:token],
                                 @"clientPlat":@"i",
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = BindingThirdTestURL;
        } else {
            url = BindingThirdFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  查询用户信息
 */
- (void)queryUserInfoWithAppId:(NSString *)appId appKey:(NSString *)appKey uid:(NSString *)uid srcUid:(NSString *)srcUid token:(NSString *)token success:(void (^)(id result))success failure:(void (^)(NSDictionary *))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
        NSString *timeString = realTime;
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"uid":[CNLiveUserSystemTools verify:uid],
                                 @"srcUid":[CNLiveUserSystemTools verify:srcUid],
                                 @"clientPlat":@"i",
                                 @"token":[CNLiveUserSystemTools verify:token],
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = queryUserInfoTestURL;
        } else {
            url = queryUserInfoFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  查询多个用户信息
 */
- (void)queryMoreUserInfoWithAppId:(NSString *)appId appKey:(NSString *)appKey uid:(NSString *)uid srcUids:(NSArray *)srcUids token:(NSString *)token success:(void (^)(id))success failure:(void (^)(NSDictionary *))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
        NSString *timeString = realTime;
        
        NSString *uids = [srcUids componentsJoinedByString:@","];
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"uid":[CNLiveUserSystemTools verify:uid],
                                 @"srcUids":[CNLiveUserSystemTools verify:uids],
                                 @"clientPlat":@"i",
                                 @"token":[CNLiveUserSystemTools verify:token],
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = queryMoreUserInfoTestURL;
        } else {
            url = queryMoreUserInfoFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  修改用户单项信息
 */
- (void)modifyUserInfoWithAppId:(NSString *)appId appKey:(NSString *)appKey type:(UserInfoType)type uid:(NSString *)uid modifyInfo:(NSString *)info token:(NSString *)token success:(void (^)(id result))success failure :(void (^)(NSDictionary *error))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
        NSString *timeString = realTime;
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"uid":[CNLiveUserSystemTools verify:uid],
                                 @"type":[self updateType:type],
                                 @"value":[CNLiveUserSystemTools verify:info],
                                 @"clientPlat":@"i",
                                 @"token":[CNLiveUserSystemTools verify:token],
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = updateUserByIdTestURL;
        } else {
            url = updateUserByIdFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  更新用户附加信息
 */
- (void)updateOtherInfoWithAppId:(NSString *)appId appKey:(NSString *)appKey uid:(NSString *)uid extInfo:(NSString *)extInfo token:(NSString *)token success:(void (^)(id result))success failure:(void (^)(NSDictionary *))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
        NSString *timeString = realTime;
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"token":[CNLiveUserSystemTools verify:token],
                                 @"uid":[CNLiveUserSystemTools verify:uid],
                                 @"extInfo":[CNLiveUserSystemTools verify:extInfo],
                                 @"clientPlat":@"i",
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = updateOtherInfoTestURL;
        } else {
            url = updateOtherInfoFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  修改密码
 */
- (void)changePasswordWithAppId:(NSString *)appId appKey:(NSString *)appKey mobile:(NSString *)mobile verificationCode:(NSString *)verificationCode newPassword:(NSString *)newPassword success:(void (^)(id result))success failure:(void (^)(NSDictionary *))failure
{
    [CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
        NSString *timeString = realTime;
        
        NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                                 @"mobile":[CNLiveUserSystemTools verify:mobile],
                                 @"verificationCode":[CNLiveUserSystemTools verify:verificationCode],
                                 @"newPwd":[CNLiveUserSystemTools verify:newPassword],
                                 @"clientPlat":@"i",
                                 @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                                 @"timestamp": timeString};
        
        NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
        NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
        NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
        
        [parameter setObject:signString forKey:@"sign"];
        NSString *url;
        if ([CNLiveUserSystemTools isTestEnvironment]) {
            url = updatePwdTestURL;
        } else {
            url = updatePwdFormalURL;
        }
        [self requestWithURL:url parameter:parameter success:success failure:failure];
    }];
}

/**
 *  通过原密码修改密码
 */
- (void)oldPwdChangePasswordWithAppId:(NSString *)appId appKey:(NSString *)appKey uid:(NSString *)uid pwd:(NSString *)pwd newPwd:(NSString *)newPwd token:(NSString *)token success:(void (^)(id result))success failure :(void (^)(NSDictionary *errorDic))failure
{
    NSDictionary *params = @{@"appId":[CNLiveUserSystemTools verify:appId],
                             @"uid":[CNLiveUserSystemTools verify:uid],
                             @"pwd":[CNLiveUserSystemTools verify:pwd],
                             @"newPwd":[CNLiveUserSystemTools verify:newPwd],
                             @"clientPlat":@"i",
                             @"platform_id":[NSBundle mainBundle].bundleIdentifier,
                             @"token":[CNLiveUserSystemTools verify:token]
                             };
    
    NSMutableDictionary *parameter = [NSMutableDictionary dictionaryWithDictionary:params];
    NSString *string = [NSString stringWithFormat:@"%@&key=%@", [CNLiveUserSystemTools signvalue:parameter], [CNLiveUserSystemTools verify:appKey]];
    NSString *signString = [[CNLiveUserSystemTools sha1:string] uppercaseString];
    
    [parameter setObject:signString forKey:@"sign"];
    NSString *url;
    if ([CNLiveUserSystemTools isTestEnvironment]) {
        url = oldPwdUpdatePwdTestURL;
    } else {
        url = oldPwdUpdatePwdFormalURL;
    }
    [self requestWithURL:url parameter:parameter success:success failure:failure];
}

#pragma mark - request

- (void)requestWithURL:(NSString *)URL parameter:(NSDictionary *)param success:(void(^)(id result))success failure :(void (^)(NSDictionary *errorDic))failure
{

    [[CNLiveUserNetworkManager manager] requestPostURL:URL parameters:param success:^(NSURLResponse * _Nullable response, id  _Nullable responseObject) {
        
        
        responseObject = [responseObject validatedDictionary];

        if ([[responseObject allKeys] containsObject:@"errorCode"] && [responseObject[@"errorCode"] isEqualToString:@"0"]) {
            
            if (success) {
                success(responseObject);
            }
            
        } else {
            
            if (failure) {
                failure(responseObject);
            }
            
            [CNLiveUserSystemTools errorStat:responseObject[@"errorMessage"]];
        }

    } failure:^(NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
        NSDictionary *errorDic = @{@"errorCode": [NSString stringWithFormat:@"%ld", error.code], @"errorMessage": error.localizedDescription};
        
        if (failure) {
            failure(errorDic);
        }
        
        [CNLiveUserSystemTools errorStat:error.localizedDescription];

    }];
}

#pragma mark - type

- (NSString *)updateType:(UserInfoType)updateType
{
    NSString *type;
    switch (updateType) {
        case UserInfoTypeNickName:
            type = @"nickName";
            break;
        case UserInfoTypeGender:
            type = @"gender";
            break;
        case UserInfoTypeEmail:
            type = @"email";
            break;
        case UserInfoTypeLocation:
            type = @"location";
            break;
        default:
            break;
    }
    return type;
}

@end