// // OpenApiClient.m // LCOpenSDKDemo // // Created by bzy on 17/3/21. // Copyright © 2017年 lechange. All rights reserved. // #import "OpenApiClient.h" #import "OpenApiNetworking.h" #import "NSDictionary+LCOpenSDK.h" #import "NSString+LCOpenSDK.h" @implementation OpenApiClient +(NSString *)getRandomNumber { NSString *str = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; NSString *randomStr = @""; for (int i=0; i<32; i++) { int rand = arc4random()%str.length; randomStr = [randomStr stringByAppendingString:[str substringWithRange:NSMakeRange(rand, 1)]]; } return randomStr; } +(NSString *)getTime { NSString * tm = [NSString stringWithFormat:@"%ld",time(NULL)]; return tm; } static OpenApiClient* _instance = nil; + (instancetype)shareMyInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[self alloc] init]; }); return _instance; } - (void)setParams:(NSString*)host port:(NSInteger)port appId:(NSString*)appId appSecret:(NSString*)appSecret method:(NSString *)method { _host = host; _port = port; _appId = appId; _appSecret = appSecret; _method = method; if (_port == 80) { _url = [NSString stringWithFormat:@"http://%@:%ld%@", host, (long)port,_method]; } else { _url = [NSString stringWithFormat:@"https://%@:%ld%@", host, (long)port,_method]; } } - (void)setMethod:(NSString *)method { _method = [method copy]; if (_port == 80) { _url = [NSString stringWithFormat:@"http://%@:%ld%@", _host, (long)_port,_method]; } else { _url = [NSString stringWithFormat:@"https://%@:%ld%@", _host, (long)_port,_method]; } } - (NSDictionary*)request:(NSDictionary*)req; { [self sign:req]; NSDictionary *dic = @{@"id": [NSString stringWithFormat:@"%@",@(g_id++)], @"system" : _system, @"params" : req}; NSString *request = [ self dictionaryToJSONString:dic]; NSString *resp = [[OpenApiNetworking shareMyInstance] requestByPost:_url params:request]; return [resp toDictionary]; } static NSInteger g_id = 0; - (void)sign:(NSDictionary*)req { if (!_appId || !_appSecret) { NSLog(@"appId or appSecret is nil"); return; } NSString * signOrg; // NSArray *keys = [req allKeys]; // for (NSString* key in keys) { // NSString* value = [req objectForKey:key]; // if (!signOrg) { // signOrg = [NSString stringWithFormat:@"%@:%@",key,value]; // }else{ // signOrg = [signOrg stringByAppendingFormat:@",%@:%@",key,value]; // } // } NSString *time = [OpenApiClient getTime]; NSString *nonce = [OpenApiClient getRandomNumber]; signOrg = [NSString stringWithFormat:@"time:%@,nonce:%@,appSecret:%@", time, nonce, _appSecret]; NSString *sign = [signOrg stringToMD5]; _system = @{ @"appId": _appId,@"nonce": nonce, @"sign" :sign, @"time":time, @"ver" : @"1.0"}; } - (NSString *)dictionaryToJSONString:(NSDictionary *)dictionary { NSError *error = nil; NSData *jsonData; if (dictionary) { jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error]; } NSString *jsonString; if (jsonData) { jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; } return jsonString; } - (void)cancelRequest { [[OpenApiNetworking shareMyInstance] cancelRequest]; } @end