196 lines
7.2 KiB
Objective-C
196 lines
7.2 KiB
Objective-C
//
|
|
// SDGETHealthTokenManager.m
|
|
// EscortProject
|
|
//
|
|
// Created by 仁康信息 on 2024/1/4.
|
|
//
|
|
|
|
#import "SDGETHealthTokenManager.h"
|
|
#include <CommonCrypto/CommonDigest.h>
|
|
#import "RSAObjC.h"
|
|
|
|
@interface SDGETHealthTokenManager ()
|
|
@property (nonatomic,strong)AFHTTPSessionManager *session;
|
|
@end
|
|
|
|
@implementation SDGETHealthTokenManager
|
|
|
|
|
|
#pragma mark - 初始化单例
|
|
+(SDGETHealthTokenManager *)getHealthTokenManager
|
|
{
|
|
static SDGETHealthTokenManager *manager = nil;
|
|
static dispatch_once_t pred;
|
|
dispatch_once(&pred, ^{
|
|
manager = [[self alloc] init];
|
|
});
|
|
return manager;
|
|
}
|
|
-(id)init
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
_session = [AFHTTPSessionManager manager];
|
|
|
|
/***********请求的序列化**********/
|
|
//传Json 对象
|
|
_session.requestSerializer = [AFJSONRequestSerializer serializer];
|
|
//设置超时时间
|
|
[_session.requestSerializer willChangeValueForKey:@"timeoutInterval"];
|
|
_session.requestSerializer.timeoutInterval = 10.f;
|
|
[_session.requestSerializer didChangeValueForKey:@"timeoutInterval"];
|
|
|
|
/**********响应的序列化**************/
|
|
_session.responseSerializer = [AFJSONResponseSerializer serializer];
|
|
_session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json",@"text/plain" ,@"text/javascript",@"text/html",nil];
|
|
}
|
|
return self;
|
|
|
|
|
|
}
|
|
|
|
-(void)httpRequestWithURL:(NSString *)url
|
|
parameters:(NSDictionary*)paraDic
|
|
hearders:(NSDictionary *)hearder
|
|
success:(successBlock)success
|
|
failed:(failedBlock)failed
|
|
{
|
|
|
|
NSString *fullURL = [NSString stringWithFormat:@"%@/%@",BASEURL,url];
|
|
[_session POST:fullURL parameters:paraDic headers:hearder progress:^(NSProgress * _Nonnull uploadProgress) {
|
|
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
|
success(responseObject);
|
|
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
|
failed(error);
|
|
}];
|
|
}
|
|
|
|
|
|
|
|
-(void)httpRequestGetWithURL:(NSString *)url
|
|
parameters:(NSDictionary*)paraDic
|
|
hearders:(NSDictionary *)hearder
|
|
success:(successBlock)success
|
|
failed:(failedBlock)failed
|
|
{
|
|
|
|
NSString *fullURL = [NSString stringWithFormat:@"%@/%@",BASEURL,url];
|
|
|
|
[_session GET:fullURL parameters:paraDic headers:hearder progress:nil success:^(NSURLSessionTask *task, NSDictionary * responseObject) {
|
|
|
|
success(responseObject);
|
|
} failure:^(NSURLSessionTask *operation, NSError *error) {
|
|
failed(error);
|
|
}];
|
|
}
|
|
|
|
- (void)getTokenSuccess:(successBlock)success failed:(failedBlock)failed {
|
|
|
|
NSMutableDictionary * dic = [[NSMutableDictionary alloc] init];
|
|
|
|
NSMutableDictionary * headerDic = [[NSMutableDictionary alloc] init];
|
|
NSDate * date = [NSDate date];
|
|
NSDateFormatter *matter = [[NSDateFormatter alloc] init];
|
|
matter.dateFormat = @"yyyyMMddHHmmss";
|
|
NSString * dateString = [matter stringFromDate:date];
|
|
|
|
[dic setObject:dateString forKey:@"timeSign"];
|
|
NSMutableDictionary * sigDic = [[NSMutableDictionary alloc] init];
|
|
[sigDic setObject:dateString forKey:@"timeSign"];
|
|
NSString * needSersy = [sigDic modelToJSONString];
|
|
// 时间戳
|
|
NSError *parseError;
|
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:sigDic options:0 error:&parseError];
|
|
if (parseError) {
|
|
//解析出错
|
|
}
|
|
NSString * str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
|
// 时间戳
|
|
NSMutableString * str3 = [[NSMutableString alloc]initWithString:str];
|
|
|
|
[str3 replaceOccurrencesOfString:@"\\" withString:@"" options:1 range:NSMakeRange(0, str3.length)];
|
|
|
|
[str3 appendString:@"dd05f1c54d63749eda95f9fa6d49v442a"];
|
|
|
|
NSString * md5str = [self getMd5_32Bit_String:str3];
|
|
|
|
[headerDic setObject:dateString forKey:@"X-TIMESTAMP"];
|
|
[headerDic setObject:md5str forKey:@"X-Sign"];
|
|
|
|
[self httpRequestGetWithURL:@"gateway/sys/getPublicKey" parameters:dic hearders:@{@"X-TIMESTAMP":dateString,@"X-Sign":md5str} success:^(NSDictionary * _Nonnull responseObject) {
|
|
|
|
if ([responseObject.allKeys containsObject:@"code"]) {
|
|
|
|
if ([[responseObject objectForKey:@"code"] integerValue] == 200)
|
|
{
|
|
NSString *pubkey ;
|
|
if ([responseObject.allKeys containsObject:@"result"]) {
|
|
pubkey = [NSString stringWithFormat:@"-----BEGIN PUBLIC KEY-----\n%@\n-----END PUBLIC KEY-----",responseObject[@"result"]];
|
|
// 时间戳
|
|
}
|
|
HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo];
|
|
|
|
NSString *ret = [RSAObjC encrypt:user.idCard PublicKey:pubkey];
|
|
DLog(@"encrypted: %@", ret);
|
|
|
|
if (ValidStr(ret)) {
|
|
// KPostNotification(KNotificationLoginStateChange, @NO);
|
|
return;
|
|
}
|
|
|
|
NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init];
|
|
[parmDic setObject:[NSString stringWithFormat:@"RSA_%@",ret] forKey: @"idcard"];
|
|
|
|
NSDate * date = [NSDate date];
|
|
NSDateFormatter *matter = [[NSDateFormatter alloc] init];
|
|
matter.dateFormat = @"yyyyMMddHHmmss";
|
|
NSString * dateString = [matter stringFromDate:date];
|
|
|
|
NSError *parseError;
|
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parmDic options:0 error:&parseError];
|
|
if (parseError) {
|
|
//解析出错
|
|
}
|
|
NSString * str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
|
// 时间戳
|
|
NSMutableString * str3 = [[NSMutableString alloc]initWithString:str];
|
|
|
|
[str3 replaceOccurrencesOfString:@"\\" withString:@"" options:1 range:NSMakeRange(0, str3.length)];
|
|
|
|
[str3 appendString:@"dd05f1c54d63749eda95f9fa6d49v442a"];
|
|
|
|
NSString * md5str = [self getMd5_32Bit_String:str3];
|
|
|
|
|
|
[self httpRequestWithURL:@"gateway/sys/thirdAppGetTokenByIdCard" parameters:parmDic hearders:@{@"X-TIMESTAMP":dateString,@"X-Sign":md5str} success:success failed:failed];
|
|
}
|
|
else
|
|
{
|
|
success(responseObject);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
} failed:^(NSError * _Nonnull error) {
|
|
|
|
}];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString *)getMd5_32Bit_String:(NSString *)srcString {
|
|
// 参数 srcString 传进来的字符串
|
|
// 参数 isUppercase 是否需要大小写
|
|
const char *cStr = [srcString UTF8String];
|
|
unsigned char digest[CC_MD5_DIGEST_LENGTH];
|
|
CC_MD5( cStr, (CC_LONG)srcString.length, digest );
|
|
NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
|
|
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
|
|
[result appendFormat:@"%02X", digest[i]];
|
|
return result;
|
|
}
|
|
|
|
@end
|